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/05/05 22:21:00 UTC

[plc4x] branch develop updated: plc4x: removed old rendering methods

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

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


The following commit(s) were added to refs/heads/develop by this push:
     new 7f65e1d  plc4x: removed old rendering methods
7f65e1d is described below

commit 7f65e1d841e39e8decf4f5441441c236d7ad0565
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu May 6 00:20:46 2021 +0200

    plc4x: removed old rendering methods
    
    + plc4j: removed Jackson annotations from the generated classes to encourage the use of XmlBased Reader/Writers
    + plc4go: removed xml and box rendering methods (string method temporary not available)
    + renamed io to read/write-Buffer to not overlap io imports in golang
---
 .../language/go/GoLanguageTemplateHelper.java      |   68 +-
 .../templates/go/data-io-template.go.ftlh          |   24 +-
 .../resources/templates/go/enum-template.go.ftlh   |   30 +-
 .../resources/templates/go/model-template.go.ftlh  |  570 +--
 .../go/xml-parser-factory-template.go.ftlh         |   20 +-
 .../language/java/JavaLanguageTemplateHelper.java  |   68 +-
 .../templates/java/data-io-template.java.ftlh      |   28 +-
 .../resources/templates/java/io-template.java.ftlh |  124 +-
 .../templates/java/pojo-template.java.ftlh         |    9 +-
 .../plc4go/abeth/readwrite/XmlParserHelper.go      |   45 +-
 .../model/CIPEncapsulationConnectionRequest.go     |   66 +-
 .../model/CIPEncapsulationConnectionResponse.go    |   66 +-
 .../readwrite/model/CIPEncapsulationPacket.go      |  283 +-
 .../readwrite/model/CIPEncapsulationReadRequest.go |   92 +-
 .../model/CIPEncapsulationReadResponse.go          |   92 +-
 .../readwrite/model/DF1CommandRequestMessage.go    |   92 +-
 ...mandResponseMessageProtectedTypedLogicalRead.go |  102 +-
 .../abeth/readwrite/model/DF1RequestCommand.go     |  132 +-
 .../abeth/readwrite/model/DF1RequestMessage.go     |  203 +-
 .../model/DF1RequestProtectedTypedLogicalRead.go   |  146 +-
 .../abeth/readwrite/model/DF1ResponseMessage.go    |  210 +-
 .../plc4go/ads/readwrite/XmlParserHelper.go        |   90 +-
 .../model/AdsAddDeviceNotificationRequest.go       |  169 +-
 .../model/AdsAddDeviceNotificationResponse.go      |  105 +-
 .../internal/plc4go/ads/readwrite/model/AdsData.go |  425 +--
 .../plc4go/ads/readwrite/model/AdsDataType.go      |   25 +-
 .../model/AdsDeleteDeviceNotificationRequest.go    |   82 +-
 .../model/AdsDeleteDeviceNotificationResponse.go   |   89 +-
 .../model/AdsDeviceNotificationRequest.go          |  136 +-
 .../model/AdsDeviceNotificationResponse.go         |   66 +-
 .../ads/readwrite/model/AdsInvalidRequest.go       |   66 +-
 .../ads/readwrite/model/AdsInvalidResponse.go      |   66 +-
 .../ads/readwrite/model/AdsMultiRequestItem.go     |  152 +-
 .../ads/readwrite/model/AdsMultiRequestItemRead.go |  114 +-
 .../model/AdsMultiRequestItemReadWrite.go          |  130 +-
 .../readwrite/model/AdsMultiRequestItemWrite.go    |  114 +-
 .../ads/readwrite/model/AdsNotificationSample.go   |  140 +-
 .../readwrite/model/AdsReadDeviceInfoRequest.go    |   66 +-
 .../readwrite/model/AdsReadDeviceInfoResponse.go   |  176 +-
 .../plc4go/ads/readwrite/model/AdsReadRequest.go   |  114 +-
 .../plc4go/ads/readwrite/model/AdsReadResponse.go  |  136 +-
 .../ads/readwrite/model/AdsReadStateRequest.go     |   66 +-
 .../ads/readwrite/model/AdsReadStateResponse.go    |  121 +-
 .../ads/readwrite/model/AdsReadWriteRequest.go     |  209 +-
 .../ads/readwrite/model/AdsReadWriteResponse.go    |  136 +-
 .../plc4go/ads/readwrite/model/AdsStampHeader.go   |  139 +-
 .../ads/readwrite/model/AdsWriteControlRequest.go  |  145 +-
 .../ads/readwrite/model/AdsWriteControlResponse.go |   89 +-
 .../plc4go/ads/readwrite/model/AdsWriteRequest.go  |  145 +-
 .../plc4go/ads/readwrite/model/AdsWriteResponse.go |   89 +-
 .../plc4go/ads/readwrite/model/AmsNetId.go         |  165 +-
 .../plc4go/ads/readwrite/model/AmsPacket.go        |  259 +-
 .../readwrite/model/AmsSerialAcknowledgeFrame.go   |  165 +-
 .../plc4go/ads/readwrite/model/AmsSerialFrame.go   |  188 +-
 .../ads/readwrite/model/AmsSerialResetFrame.go     |  165 +-
 .../plc4go/ads/readwrite/model/AmsTCPPacket.go     |  107 +-
 .../plc4go/ads/readwrite/model/CommandId.go        |   25 +-
 .../plc4go/ads/readwrite/model/DataItem.go         |  140 +-
 .../ads/readwrite/model/ReservedIndexGroups.go     |   25 +-
 .../plc4go/ads/readwrite/model/ReturnCode.go       |   25 +-
 .../internal/plc4go/ads/readwrite/model/State.go   |  220 +-
 .../plc4go/bacnetip/readwrite/XmlParserHelper.go   |  111 +-
 .../plc4go/bacnetip/readwrite/model/APDU.go        |  230 +-
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   |  121 +-
 .../bacnetip/readwrite/model/APDUComplexAck.go     |  204 +-
 .../readwrite/model/APDUConfirmedRequest.go        |  252 +-
 .../plc4go/bacnetip/readwrite/model/APDUError.go   |  115 +-
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  |  105 +-
 .../bacnetip/readwrite/model/APDUSegmentAck.go     |  153 +-
 .../bacnetip/readwrite/model/APDUSimpleAck.go      |  105 +-
 .../readwrite/model/APDUUnconfirmedRequest.go      |   99 +-
 .../bacnetip/readwrite/model/ApplicationTag.go     |   25 +-
 .../bacnetip/readwrite/model/BACnetAddress.go      |  117 +-
 .../readwrite/model/BACnetConfirmedServiceACK.go   |  412 +--
 .../BACnetConfirmedServiceACKAtomicReadFile.go     |   66 +-
 .../BACnetConfirmedServiceACKAtomicWriteFile.go    |   66 +-
 ...tConfirmedServiceACKConfirmedPrivateTransfer.go |   66 +-
 .../model/BACnetConfirmedServiceACKCreateObject.go |   66 +-
 .../BACnetConfirmedServiceACKGetAlarmSummary.go    |   66 +-
 ...ACnetConfirmedServiceACKGetEnrollmentSummary.go |   66 +-
 ...BACnetConfirmedServiceACKGetEventInformation.go |   66 +-
 .../model/BACnetConfirmedServiceACKReadProperty.go |   66 +-
 ...ACnetConfirmedServiceACKReadPropertyMultiple.go |   66 +-
 .../model/BACnetConfirmedServiceACKReadRange.go    |   66 +-
 ...BACnetConfirmedServiceACKRemovedAuthenticate.go |   66 +-
 ...rmedServiceACKRemovedReadPropertyConditional.go |   66 +-
 .../model/BACnetConfirmedServiceACKVTData.go       |   66 +-
 .../model/BACnetConfirmedServiceACKVTOpen.go       |   66 +-
 .../model/BACnetConfirmedServiceRequest.go         |  741 +---
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |   66 +-
 .../BACnetConfirmedServiceRequestAddListElement.go |   66 +-
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |   66 +-
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |   66 +-
 ...firmedServiceRequestConfirmedCOVNotification.go |  279 +-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |   66 +-
 ...rmedServiceRequestConfirmedEventNotification.go |   66 +-
 ...firmedServiceRequestConfirmedPrivateTransfer.go |   66 +-
 ...tConfirmedServiceRequestConfirmedTextMessage.go |   66 +-
 .../BACnetConfirmedServiceRequestCreateObject.go   |   66 +-
 .../BACnetConfirmedServiceRequestDeleteObject.go   |   66 +-
 ...rmedServiceRequestDeviceCommunicationControl.go |   66 +-
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |   66 +-
 ...etConfirmedServiceRequestGetEventInformation.go |   66 +-
 ...etConfirmedServiceRequestLifeSafetyOperation.go |   66 +-
 .../BACnetConfirmedServiceRequestReadProperty.go   |  165 +-
 ...tConfirmedServiceRequestReadPropertyMultiple.go |   66 +-
 .../BACnetConfirmedServiceRequestReadRange.go      |   66 +-
 ...netConfirmedServiceRequestReinitializeDevice.go |   66 +-
 ...CnetConfirmedServiceRequestRemoveListElement.go |   66 +-
 ...etConfirmedServiceRequestRemovedAuthenticate.go |   66 +-
 ...ServiceRequestRemovedReadPropertyConditional.go |   66 +-
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |   66 +-
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |  215 +-
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |   66 +-
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |   66 +-
 .../model/BACnetConfirmedServiceRequestVTClose.go  |   66 +-
 .../model/BACnetConfirmedServiceRequestVTData.go   |   66 +-
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |   66 +-
 .../BACnetConfirmedServiceRequestWriteProperty.go  |  229 +-
 ...ConfirmedServiceRequestWritePropertyMultiple.go |   66 +-
 .../plc4go/bacnetip/readwrite/model/BACnetError.go |  405 +-
 .../readwrite/model/BACnetErrorAtomicReadFile.go   |   66 +-
 .../readwrite/model/BACnetErrorAtomicWriteFile.go  |   66 +-
 .../model/BACnetErrorConfirmedPrivateTransfer.go   |   66 +-
 .../readwrite/model/BACnetErrorCreateObject.go     |   66 +-
 .../readwrite/model/BACnetErrorGetAlarmSummary.go  |   66 +-
 .../model/BACnetErrorGetEnrollmentSummary.go       |   66 +-
 .../model/BACnetErrorGetEventInformation.go        |   66 +-
 .../readwrite/model/BACnetErrorReadProperty.go     |  186 +-
 .../model/BACnetErrorReadPropertyMultiple.go       |   66 +-
 .../readwrite/model/BACnetErrorReadRange.go        |   66 +-
 .../model/BACnetErrorRemovedAuthenticate.go        |   66 +-
 .../BACnetErrorRemovedReadPropertyConditional.go   |   66 +-
 .../bacnetip/readwrite/model/BACnetErrorVTData.go  |   66 +-
 .../bacnetip/readwrite/model/BACnetErrorVTOpen.go  |   66 +-
 .../bacnetip/readwrite/model/BACnetNetworkType.go  |   25 +-
 .../bacnetip/readwrite/model/BACnetNodeType.go     |   25 +-
 .../bacnetip/readwrite/model/BACnetNotifyType.go   |   25 +-
 .../bacnetip/readwrite/model/BACnetObjectType.go   |   25 +-
 .../bacnetip/readwrite/model/BACnetServiceAck.go   |  405 +-
 .../model/BACnetServiceAckAtomicReadFile.go        |   66 +-
 .../model/BACnetServiceAckAtomicWriteFile.go       |   66 +-
 .../BACnetServiceAckConfirmedPrivateTransfer.go    |   66 +-
 .../model/BACnetServiceAckCreateObject.go          |   66 +-
 .../model/BACnetServiceAckGetAlarmSummary.go       |   66 +-
 .../model/BACnetServiceAckGetEnrollmentSummary.go  |   66 +-
 .../model/BACnetServiceAckGetEventInformation.go   |   66 +-
 .../model/BACnetServiceAckReadProperty.go          |  203 +-
 .../model/BACnetServiceAckReadPropertyMultiple.go  |   66 +-
 .../readwrite/model/BACnetServiceAckReadRange.go   |   66 +-
 .../model/BACnetServiceAckRemovedAuthenticate.go   |   66 +-
 ...CnetServiceAckRemovedReadPropertyConditional.go |   66 +-
 .../readwrite/model/BACnetServiceAckVTData.go      |   66 +-
 .../readwrite/model/BACnetServiceAckVTOpen.go      |   66 +-
 .../plc4go/bacnetip/readwrite/model/BACnetTag.go   |  452 +--
 .../model/BACnetTagApplicationBitString.go         |  125 +-
 .../readwrite/model/BACnetTagApplicationBoolean.go |   66 +-
 .../model/BACnetTagApplicationCharacterString.go   |   66 +-
 .../readwrite/model/BACnetTagApplicationDate.go    |   66 +-
 .../readwrite/model/BACnetTagApplicationDouble.go  |   82 +-
 .../model/BACnetTagApplicationEnumerated.go        |  109 +-
 .../readwrite/model/BACnetTagApplicationNull.go    |   66 +-
 .../model/BACnetTagApplicationObjectIdentifier.go  |   66 +-
 .../model/BACnetTagApplicationOctetString.go       |   66 +-
 .../readwrite/model/BACnetTagApplicationReal.go    |   82 +-
 .../model/BACnetTagApplicationSignedInteger.go     |  109 +-
 .../readwrite/model/BACnetTagApplicationTime.go    |   66 +-
 .../model/BACnetTagApplicationUnsignedInteger.go   |  109 +-
 .../bacnetip/readwrite/model/BACnetTagContext.go   |  109 +-
 .../readwrite/model/BACnetTagWithContent.go        |  248 +-
 .../model/BACnetUnconfirmedServiceRequest.go       |  342 +-
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |  209 +-
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |   66 +-
 ...UnconfirmedServiceRequestTimeSynchronization.go |   66 +-
 ...onfirmedServiceRequestUTCTimeSynchronization.go |   66 +-
 ...rmedServiceRequestUnconfirmedCOVNotification.go |   66 +-
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |   66 +-
 ...edServiceRequestUnconfirmedEventNotification.go |   66 +-
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go |  165 +-
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |   66 +-
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |  183 +-
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |  186 +-
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |   66 +-
 .../plc4go/bacnetip/readwrite/model/BVLC.go        |  384 +-
 .../model/BVLCDeleteForeignDeviceTableEntry.go     |   66 +-
 .../model/BVLCDistributeBroadcastToNetwork.go      |   66 +-
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |  137 +-
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |   89 +-
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |   89 +-
 .../model/BVLCReadBroadcastDistributionTable.go    |   66 +-
 .../model/BVLCReadBroadcastDistributionTableAck.go |   66 +-
 .../readwrite/model/BVLCReadForeignDeviceTable.go  |   66 +-
 .../model/BVLCReadForeignDeviceTableAck.go         |   66 +-
 .../readwrite/model/BVLCRegisterForeignDevice.go   |   66 +-
 .../plc4go/bacnetip/readwrite/model/BVLCResult.go  |   66 +-
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |   66 +-
 .../model/BVLCWideBroadcastDistributionTable.go    |   66 +-
 .../plc4go/bacnetip/readwrite/model/NLM.go         |  175 +-
 .../readwrite/model/NLMIAmRouterToNetwork.go       |  100 +-
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |  100 +-
 .../plc4go/bacnetip/readwrite/model/NPDU.go        |  428 +--
 .../plc4go/df1/readwrite/XmlParserHelper.go        |   27 +-
 .../plc4go/df1/readwrite/model/DF1Command.go       |  178 +-
 .../plc4go/df1/readwrite/model/DF1Symbol.go        |  180 +-
 .../df1/readwrite/model/DF1SymbolMessageFrame.go   |  143 +-
 .../readwrite/model/DF1SymbolMessageFrameACK.go    |   66 +-
 .../readwrite/model/DF1SymbolMessageFrameNAK.go    |   66 +-
 .../readwrite/model/DF1UnprotectedReadRequest.go   |   98 +-
 .../readwrite/model/DF1UnprotectedReadResponse.go  |   91 +-
 .../plc4go/eip/readwrite/XmlParserHelper.go        |   41 +-
 .../plc4go/eip/readwrite/model/CIPDataTypeCode.go  |   25 +-
 .../plc4go/eip/readwrite/model/CipExchange.go      |  121 +-
 .../plc4go/eip/readwrite/model/CipRRData.go        |  103 +-
 .../plc4go/eip/readwrite/model/CipReadRequest.go   |  141 +-
 .../plc4go/eip/readwrite/model/CipReadResponse.go  |  168 +-
 .../plc4go/eip/readwrite/model/CipService.go       |  216 +-
 .../eip/readwrite/model/CipUnconnectedRequest.go   |  180 +-
 .../plc4go/eip/readwrite/model/CipWriteRequest.go  |  206 +-
 .../plc4go/eip/readwrite/model/CipWriteResponse.go |  105 +-
 .../plc4go/eip/readwrite/model/EiPCommand.go       |   25 +-
 .../eip/readwrite/model/EipConnectionRequest.go    |   78 +-
 .../eip/readwrite/model/EipDisconnectRequest.go    |   66 +-
 .../plc4go/eip/readwrite/model/EipPacket.go        |  255 +-
 .../eip/readwrite/model/MultipleServiceRequest.go  |  101 +-
 .../eip/readwrite/model/MultipleServiceResponse.go |  190 +-
 .../plc4go/eip/readwrite/model/Services.go         |  163 +-
 .../plc4go/firmata/readwrite/XmlParserHelper.go    |   36 +-
 .../firmata/readwrite/model/FirmataCommand.go      |  195 +-
 .../model/FirmataCommandProtocolVersion.go         |   98 +-
 .../model/FirmataCommandSetDigitalPinValue.go      |  105 +-
 .../readwrite/model/FirmataCommandSetPinMode.go    |  106 +-
 .../firmata/readwrite/model/FirmataCommandSysex.go |   99 +-
 .../readwrite/model/FirmataCommandSystemReset.go   |   66 +-
 .../firmata/readwrite/model/FirmataMessage.go      |  188 +-
 .../readwrite/model/FirmataMessageAnalogIO.go      |  121 +-
 .../readwrite/model/FirmataMessageCommand.go       |   92 +-
 .../readwrite/model/FirmataMessageDigitalIO.go     |  121 +-
 .../model/FirmataMessageSubscribeAnalogPinValue.go |  105 +-
 .../FirmataMessageSubscribeDigitalPinValue.go      |  105 +-
 .../plc4go/firmata/readwrite/model/PinMode.go      |   25 +-
 .../plc4go/firmata/readwrite/model/SysexCommand.go |  398 +-
 .../model/SysexCommandAnalogMappingQueryRequest.go |   66 +-
 .../SysexCommandAnalogMappingQueryResponse.go      |   82 +-
 .../model/SysexCommandAnalogMappingResponse.go     |   66 +-
 .../readwrite/model/SysexCommandCapabilityQuery.go |   66 +-
 .../model/SysexCommandCapabilityResponse.go        |   66 +-
 .../readwrite/model/SysexCommandExendedId.go       |  105 +-
 .../readwrite/model/SysexCommandExtendedAnalog.go  |   66 +-
 .../readwrite/model/SysexCommandPinStateQuery.go   |   82 +-
 .../model/SysexCommandPinStateResponse.go          |  114 +-
 .../model/SysexCommandReportFirmwareRequest.go     |   66 +-
 .../model/SysexCommandReportFirmwareResponse.go    |  123 +-
 .../model/SysexCommandSamplingInterval.go          |   66 +-
 .../readwrite/model/SysexCommandStringData.go      |   66 +-
 .../model/SysexCommandSysexNonRealtime.go          |   66 +-
 .../readwrite/model/SysexCommandSysexRealtime.go   |   66 +-
 .../plc4go/knxnetip/readwrite/XmlParserHelper.go   |  280 +-
 .../plc4go/knxnetip/readwrite/model/AccessLevel.go |   25 +-
 .../plc4go/knxnetip/readwrite/model/Apdu.go        |  178 +-
 .../plc4go/knxnetip/readwrite/model/ApduControl.go |  202 +-
 .../knxnetip/readwrite/model/ApduControlAck.go     |   66 +-
 .../knxnetip/readwrite/model/ApduControlConnect.go |   66 +-
 .../readwrite/model/ApduControlContainer.go        |   92 +-
 .../readwrite/model/ApduControlDisconnect.go       |   66 +-
 .../knxnetip/readwrite/model/ApduControlNack.go    |   66 +-
 .../plc4go/knxnetip/readwrite/model/ApduData.go    |  398 +-
 .../knxnetip/readwrite/model/ApduDataAdcRead.go    |   66 +-
 .../readwrite/model/ApduDataAdcResponse.go         |   66 +-
 .../knxnetip/readwrite/model/ApduDataContainer.go  |   92 +-
 .../model/ApduDataDeviceDescriptorRead.go          |   82 +-
 .../model/ApduDataDeviceDescriptorResponse.go      |  121 +-
 .../plc4go/knxnetip/readwrite/model/ApduDataExt.go |  930 +----
 .../readwrite/model/ApduDataExtAuthorizeRequest.go |  114 +-
 .../model/ApduDataExtAuthorizeResponse.go          |   82 +-
 .../model/ApduDataExtDomainAddressRead.go          |   66 +-
 .../model/ApduDataExtDomainAddressResponse.go      |   66 +-
 .../model/ApduDataExtDomainAddressSelectiveRead.go |   66 +-
 .../ApduDataExtDomainAddressSerialNumberRead.go    |   66 +-
 ...ApduDataExtDomainAddressSerialNumberResponse.go |   66 +-
 .../ApduDataExtDomainAddressSerialNumberWrite.go   |   66 +-
 .../model/ApduDataExtDomainAddressWrite.go         |   66 +-
 .../model/ApduDataExtFileStreamInfoReport.go       |   66 +-
 .../ApduDataExtGroupPropertyValueInfoReport.go     |   66 +-
 .../model/ApduDataExtGroupPropertyValueRead.go     |   66 +-
 .../model/ApduDataExtGroupPropertyValueResponse.go |   66 +-
 .../model/ApduDataExtGroupPropertyValueWrite.go    |   66 +-
 ...ApduDataExtIndividualAddressSerialNumberRead.go |   66 +-
 ...DataExtIndividualAddressSerialNumberResponse.go |   66 +-
 ...pduDataExtIndividualAddressSerialNumberWrite.go |   66 +-
 .../readwrite/model/ApduDataExtKeyResponse.go      |   66 +-
 .../readwrite/model/ApduDataExtKeyWrite.go         |   66 +-
 .../readwrite/model/ApduDataExtLinkRead.go         |   66 +-
 .../readwrite/model/ApduDataExtLinkResponse.go     |   66 +-
 .../readwrite/model/ApduDataExtLinkWrite.go        |   66 +-
 .../readwrite/model/ApduDataExtMemoryBitWrite.go   |   66 +-
 .../model/ApduDataExtNetworkParameterRead.go       |   66 +-
 .../model/ApduDataExtNetworkParameterResponse.go   |   66 +-
 .../model/ApduDataExtNetworkParameterWrite.go      |   66 +-
 .../model/ApduDataExtOpenRoutingTableRequest.go    |   66 +-
 .../model/ApduDataExtPropertyDescriptionRead.go    |  114 +-
 .../ApduDataExtPropertyDescriptionResponse.go      |  229 +-
 .../model/ApduDataExtPropertyValueRead.go          |  130 +-
 .../model/ApduDataExtPropertyValueResponse.go      |  162 +-
 .../model/ApduDataExtPropertyValueWrite.go         |  162 +-
 .../model/ApduDataExtReadRouterMemoryRequest.go    |   66 +-
 .../model/ApduDataExtReadRouterMemoryResponse.go   |   66 +-
 .../model/ApduDataExtReadRouterStatusRequest.go    |   66 +-
 .../model/ApduDataExtReadRouterStatusResponse.go   |   66 +-
 .../model/ApduDataExtReadRoutingTableRequest.go    |   66 +-
 .../model/ApduDataExtReadRoutingTableResponse.go   |   66 +-
 .../model/ApduDataExtWriteRouterMemoryRequest.go   |   66 +-
 .../model/ApduDataExtWriteRouterStatusRequest.go   |   66 +-
 .../model/ApduDataExtWriteRoutingTableRequest.go   |   66 +-
 .../readwrite/model/ApduDataGroupValueRead.go      |   73 +-
 .../readwrite/model/ApduDataGroupValueResponse.go  |  121 +-
 .../readwrite/model/ApduDataGroupValueWrite.go     |  121 +-
 .../model/ApduDataIndividualAddressRead.go         |   66 +-
 .../model/ApduDataIndividualAddressResponse.go     |   66 +-
 .../model/ApduDataIndividualAddressWrite.go        |   66 +-
 .../knxnetip/readwrite/model/ApduDataMemoryRead.go |   98 +-
 .../readwrite/model/ApduDataMemoryResponse.go      |  122 +-
 .../readwrite/model/ApduDataMemoryWrite.go         |   66 +-
 .../knxnetip/readwrite/model/ApduDataOther.go      |   92 +-
 .../knxnetip/readwrite/model/ApduDataRestart.go    |   66 +-
 .../readwrite/model/ApduDataUserMessage.go         |   66 +-
 .../plc4go/knxnetip/readwrite/model/CEMI.go        |  559 +--
 .../readwrite/model/CEMIAdditionalInformation.go   |  146 +-
 .../CEMIAdditionalInformationBusmonitorInfo.go     |  168 +-
 .../CEMIAdditionalInformationRelativeTimestamp.go  |   95 +-
 .../knxnetip/readwrite/model/CEMIPriority.go       |   25 +-
 .../knxnetip/readwrite/model/ChannelInformation.go |  101 +-
 .../knxnetip/readwrite/model/ComObjectTable.go     |  152 +-
 .../readwrite/model/ComObjectTableAddresses.go     |   25 +-
 .../model/ComObjectTableRealisationType1.go        |  136 +-
 .../model/ComObjectTableRealisationType2.go        |  136 +-
 .../model/ComObjectTableRealisationType6.go        |   89 +-
 .../knxnetip/readwrite/model/ComObjectValueType.go |   25 +-
 .../knxnetip/readwrite/model/ConnectionRequest.go  |  138 +-
 .../model/ConnectionRequestInformation.go          |  161 +-
 ...ConnectionRequestInformationDeviceManagement.go |   66 +-
 ...ConnectionRequestInformationTunnelConnection.go |   96 +-
 .../knxnetip/readwrite/model/ConnectionResponse.go |  146 +-
 .../readwrite/model/ConnectionResponseDataBlock.go |  161 +-
 .../ConnectionResponseDataBlockDeviceManagement.go |   66 +-
 .../ConnectionResponseDataBlockTunnelConnection.go |   89 +-
 .../readwrite/model/ConnectionStateRequest.go      |  112 +-
 .../readwrite/model/ConnectionStateResponse.go     |  105 +-
 .../knxnetip/readwrite/model/DIBDeviceInfo.go      |  307 +-
 .../knxnetip/readwrite/model/DIBSuppSvcFamilies.go |  145 +-
 .../knxnetip/readwrite/model/DescriptionRequest.go |   89 +-
 .../readwrite/model/DescriptionResponse.go         |  112 +-
 .../readwrite/model/DeviceConfigurationAck.go      |   89 +-
 .../model/DeviceConfigurationAckDataBlock.go       |  132 +-
 .../readwrite/model/DeviceConfigurationRequest.go  |  115 +-
 .../model/DeviceConfigurationRequestDataBlock.go   |  116 +-
 .../knxnetip/readwrite/model/DeviceDescriptor.go   |   25 +-
 .../readwrite/model/DeviceDescriptorMediumType.go  |   25 +-
 .../readwrite/model/DeviceDescriptorType2.go       |  257 +-
 .../knxnetip/readwrite/model/DeviceStatus.go       |   92 +-
 .../knxnetip/readwrite/model/DisconnectRequest.go  |  112 +-
 .../knxnetip/readwrite/model/DisconnectResponse.go |  105 +-
 .../knxnetip/readwrite/model/FirmwareType.go       |   25 +-
 .../model/GroupObjectDescriptorRealisationType1.go |  218 +-
 .../model/GroupObjectDescriptorRealisationType2.go |  227 +-
 .../model/GroupObjectDescriptorRealisationType6.go |   69 +-
 .../model/GroupObjectDescriptorRealisationType7.go |  227 +-
 .../model/GroupObjectDescriptorRealisationTypeB.go |  211 +-
 .../readwrite/model/HPAIControlEndpoint.go         |  139 +-
 .../knxnetip/readwrite/model/HPAIDataEndpoint.go   |  139 +-
 .../readwrite/model/HPAIDiscoveryEndpoint.go       |  139 +-
 .../knxnetip/readwrite/model/HostProtocolCode.go   |   25 +-
 .../plc4go/knxnetip/readwrite/model/IPAddress.go   |  108 +-
 .../plc4go/knxnetip/readwrite/model/KnxAddress.go  |  117 +-
 .../knxnetip/readwrite/model/KnxDatapoint.go       | 3856 ++++++++++----------
 .../readwrite/model/KnxDatapointMainType.go        |   25 +-
 .../knxnetip/readwrite/model/KnxDatapointType.go   |   25 +-
 .../knxnetip/readwrite/model/KnxGroupAddress.go    |  152 +-
 .../readwrite/model/KnxGroupAddress2Level.go       |   98 +-
 .../readwrite/model/KnxGroupAddress3Level.go       |  114 +-
 .../readwrite/model/KnxGroupAddressFreeLevel.go    |   82 +-
 .../readwrite/model/KnxInterfaceObjectProperty.go  |   25 +-
 .../readwrite/model/KnxInterfaceObjectType.go      |   25 +-
 .../plc4go/knxnetip/readwrite/model/KnxLayer.go    |   25 +-
 .../knxnetip/readwrite/model/KnxManufacturer.go    |   25 +-
 .../plc4go/knxnetip/readwrite/model/KnxMedium.go   |   25 +-
 .../knxnetip/readwrite/model/KnxNetIpCore.go       |   82 +-
 .../readwrite/model/KnxNetIpDeviceManagement.go    |   82 +-
 .../knxnetip/readwrite/model/KnxNetIpMessage.go    |  371 +-
 .../knxnetip/readwrite/model/KnxNetIpRouting.go    |   82 +-
 .../knxnetip/readwrite/model/KnxNetIpTunneling.go  |   82 +-
 .../knxnetip/readwrite/model/KnxNetObjectServer.go |   82 +-
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |   82 +-
 .../readwrite/model/KnxNetRemoteLogging.go         |   82 +-
 .../plc4go/knxnetip/readwrite/model/KnxProperty.go |  476 +--
 .../readwrite/model/KnxPropertyDataType.go         |   25 +-
 .../plc4go/knxnetip/readwrite/model/LBusmonInd.go  |  189 +-
 .../plc4go/knxnetip/readwrite/model/LDataCon.go    |  160 +-
 .../knxnetip/readwrite/model/LDataExtended.go      |  210 +-
 .../plc4go/knxnetip/readwrite/model/LDataFrame.go  |  263 +-
 .../knxnetip/readwrite/model/LDataFrameACK.go      |   66 +-
 .../plc4go/knxnetip/readwrite/model/LDataInd.go    |  160 +-
 .../plc4go/knxnetip/readwrite/model/LDataReq.go    |  160 +-
 .../plc4go/knxnetip/readwrite/model/LPollData.go   |  151 +-
 .../knxnetip/readwrite/model/LPollDataCon.go       |   66 +-
 .../knxnetip/readwrite/model/LPollDataReq.go       |   66 +-
 .../plc4go/knxnetip/readwrite/model/LRawCon.go     |   66 +-
 .../plc4go/knxnetip/readwrite/model/LRawInd.go     |   66 +-
 .../plc4go/knxnetip/readwrite/model/LRawReq.go     |   66 +-
 .../plc4go/knxnetip/readwrite/model/MACAddress.go  |  108 +-
 .../readwrite/model/MFuncPropCommandReq.go         |   66 +-
 .../knxnetip/readwrite/model/MFuncPropCon.go       |   66 +-
 .../readwrite/model/MFuncPropStateReadReq.go       |   66 +-
 .../knxnetip/readwrite/model/MPropInfoInd.go       |   66 +-
 .../knxnetip/readwrite/model/MPropReadCon.go       |  162 +-
 .../knxnetip/readwrite/model/MPropReadReq.go       |  146 +-
 .../knxnetip/readwrite/model/MPropWriteCon.go      |   66 +-
 .../knxnetip/readwrite/model/MPropWriteReq.go      |   66 +-
 .../plc4go/knxnetip/readwrite/model/MResetInd.go   |   66 +-
 .../plc4go/knxnetip/readwrite/model/MResetReq.go   |   66 +-
 .../model/ProjectInstallationIdentifier.go         |  101 +-
 .../knxnetip/readwrite/model/RelativeTimestamp.go  |   85 +-
 .../knxnetip/readwrite/model/RoutingIndication.go  |   66 +-
 .../knxnetip/readwrite/model/SearchRequest.go      |   89 +-
 .../knxnetip/readwrite/model/SearchResponse.go     |  135 +-
 .../plc4go/knxnetip/readwrite/model/ServiceId.go   |  216 +-
 .../plc4go/knxnetip/readwrite/model/Status.go      |   25 +-
 .../readwrite/model/SupportedPhysicalMedia.go      |   25 +-
 .../knxnetip/readwrite/model/TDataConnectedInd.go  |   66 +-
 .../knxnetip/readwrite/model/TDataConnectedReq.go  |   66 +-
 .../knxnetip/readwrite/model/TDataIndividualInd.go |   66 +-
 .../knxnetip/readwrite/model/TDataIndividualReq.go |   66 +-
 .../knxnetip/readwrite/model/TunnelingRequest.go   |  115 +-
 .../readwrite/model/TunnelingRequestDataBlock.go   |  116 +-
 .../knxnetip/readwrite/model/TunnelingResponse.go  |   89 +-
 .../readwrite/model/TunnelingResponseDataBlock.go  |  132 +-
 .../knxnetip/readwrite/model/UnknownMessage.go     |  105 +-
 .../plc4go/modbus/readwrite/XmlParserHelper.go     |   67 +-
 .../plc4go/modbus/readwrite/model/DataItem.go      |  218 +-
 .../modbus/readwrite/model/ModbusConstants.go      |   75 +-
 .../modbus/readwrite/model/ModbusDataType.go       |   25 +-
 .../modbus/readwrite/model/ModbusErrorCode.go      |   25 +-
 .../plc4go/modbus/readwrite/model/ModbusPDU.go     |  714 +---
 .../readwrite/model/ModbusPDUDiagnosticRequest.go  |   98 +-
 .../readwrite/model/ModbusPDUDiagnosticResponse.go |   98 +-
 .../modbus/readwrite/model/ModbusPDUError.go       |   90 +-
 .../model/ModbusPDUGetComEventCounterRequest.go    |   66 +-
 .../model/ModbusPDUGetComEventCounterResponse.go   |   98 +-
 .../model/ModbusPDUGetComEventLogRequest.go        |   66 +-
 .../model/ModbusPDUGetComEventLogResponse.go       |  161 +-
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |  114 +-
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |  114 +-
 .../readwrite/model/ModbusPDUReadCoilsRequest.go   |   98 +-
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |  113 +-
 .../ModbusPDUReadDeviceIdentificationRequest.go    |   66 +-
 .../ModbusPDUReadDeviceIdentificationResponse.go   |   66 +-
 .../model/ModbusPDUReadDiscreteInputsRequest.go    |   98 +-
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |  113 +-
 .../model/ModbusPDUReadExceptionStatusRequest.go   |   66 +-
 .../model/ModbusPDUReadExceptionStatusResponse.go  |   82 +-
 .../model/ModbusPDUReadFifoQueueRequest.go         |   82 +-
 .../model/ModbusPDUReadFifoQueueResponse.go        |  112 +-
 .../model/ModbusPDUReadFileRecordRequest.go        |  123 +-
 .../model/ModbusPDUReadFileRecordRequestItem.go    |  133 +-
 .../model/ModbusPDUReadFileRecordResponse.go       |  123 +-
 .../model/ModbusPDUReadFileRecordResponseItem.go   |  136 +-
 .../model/ModbusPDUReadHoldingRegistersRequest.go  |   98 +-
 .../model/ModbusPDUReadHoldingRegistersResponse.go |  113 +-
 .../model/ModbusPDUReadInputRegistersRequest.go    |   98 +-
 .../model/ModbusPDUReadInputRegistersResponse.go   |  113 +-
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |  177 +-
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |  113 +-
 .../model/ModbusPDUReportServerIdRequest.go        |   66 +-
 .../model/ModbusPDUReportServerIdResponse.go       |  113 +-
 .../model/ModbusPDUWriteFileRecordRequest.go       |  123 +-
 .../model/ModbusPDUWriteFileRecordRequestItem.go   |  168 +-
 .../model/ModbusPDUWriteFileRecordResponse.go      |  123 +-
 .../model/ModbusPDUWriteFileRecordResponseItem.go  |  168 +-
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |  145 +-
 .../model/ModbusPDUWriteMultipleCoilsResponse.go   |   98 +-
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |  145 +-
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |   98 +-
 .../model/ModbusPDUWriteSingleCoilRequest.go       |   98 +-
 .../model/ModbusPDUWriteSingleCoilResponse.go      |   98 +-
 .../model/ModbusPDUWriteSingleRegisterRequest.go   |   98 +-
 .../model/ModbusPDUWriteSingleRegisterResponse.go  |   98 +-
 .../modbus/readwrite/model/ModbusSerialADU.go      |  150 +-
 .../plc4go/modbus/readwrite/model/ModbusTcpADU.go  |  141 +-
 .../plc4go/s7/readwrite/XmlParserHelper.go         |  125 +-
 .../plc4go/s7/readwrite/model/COTPPacket.go        |  292 +-
 .../readwrite/model/COTPPacketConnectionRequest.go |  122 +-
 .../model/COTPPacketConnectionResponse.go          |  122 +-
 .../plc4go/s7/readwrite/model/COTPPacketData.go    |   98 +-
 .../readwrite/model/COTPPacketDisconnectRequest.go |  122 +-
 .../model/COTPPacketDisconnectResponse.go          |   98 +-
 .../s7/readwrite/model/COTPPacketTpduError.go      |   98 +-
 .../plc4go/s7/readwrite/model/COTPParameter.go     |  196 +-
 .../s7/readwrite/model/COTPParameterCalledTsap.go  |   82 +-
 .../s7/readwrite/model/COTPParameterCallingTsap.go |   82 +-
 .../s7/readwrite/model/COTPParameterChecksum.go    |   82 +-
 ...COTPParameterDisconnectAdditionalInformation.go |   88 +-
 .../s7/readwrite/model/COTPParameterTpduSize.go    |   90 +-
 .../plc4go/s7/readwrite/model/COTPProtocolClass.go |   25 +-
 .../plc4go/s7/readwrite/model/COTPTpduSize.go      |   25 +-
 .../internal/plc4go/s7/readwrite/model/DataItem.go |  186 +-
 .../s7/readwrite/model/DataTransportErrorCode.go   |   25 +-
 .../plc4go/s7/readwrite/model/DataTransportSize.go |   25 +-
 .../plc4go/s7/readwrite/model/DeviceGroup.go       |   25 +-
 .../plc4go/s7/readwrite/model/MemoryArea.go        |   25 +-
 .../plc4go/s7/readwrite/model/S7Address.go         |  132 +-
 .../plc4go/s7/readwrite/model/S7AddressAny.go      |  184 +-
 .../plc4go/s7/readwrite/model/S7Message.go         |  277 +-
 .../plc4go/s7/readwrite/model/S7MessageRequest.go  |   66 +-
 .../plc4go/s7/readwrite/model/S7MessageResponse.go |   98 +-
 .../s7/readwrite/model/S7MessageResponseData.go    |   98 +-
 .../plc4go/s7/readwrite/model/S7MessageUserData.go |   66 +-
 .../plc4go/s7/readwrite/model/S7Parameter.go       |  202 +-
 .../readwrite/model/S7ParameterReadVarRequest.go   |  122 +-
 .../readwrite/model/S7ParameterReadVarResponse.go  |   82 +-
 .../model/S7ParameterSetupCommunication.go         |  121 +-
 .../s7/readwrite/model/S7ParameterUserData.go      |  122 +-
 .../s7/readwrite/model/S7ParameterUserDataItem.go  |  132 +-
 .../model/S7ParameterUserDataItemCPUFunctions.go   |  239 +-
 .../readwrite/model/S7ParameterWriteVarRequest.go  |  122 +-
 .../readwrite/model/S7ParameterWriteVarResponse.go |   82 +-
 .../plc4go/s7/readwrite/model/S7Payload.go         |  166 +-
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |  104 +-
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |  114 +-
 .../s7/readwrite/model/S7PayloadUserDataItem.go    |  240 +-
 ...PayloadUserDataItemCpuFunctionReadSzlRequest.go |   66 +-
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |  118 +-
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |  104 +-
 .../readwrite/model/S7PayloadWriteVarResponse.go   |  104 +-
 .../s7/readwrite/model/S7VarPayloadDataItem.go     |  171 +-
 .../s7/readwrite/model/S7VarPayloadStatusItem.go   |   93 +-
 .../readwrite/model/S7VarRequestParameterItem.go   |  132 +-
 .../model/S7VarRequestParameterItemAddress.go      |  100 +-
 .../plc4go/s7/readwrite/model/SzlDataTreeItem.go   |  155 +-
 plc4go/internal/plc4go/s7/readwrite/model/SzlId.go |  133 +-
 .../s7/readwrite/model/SzlModuleTypeClass.go       |   25 +-
 .../plc4go/s7/readwrite/model/SzlSublist.go        |   25 +-
 .../plc4go/s7/readwrite/model/TPKTPacket.go        |  116 +-
 .../plc4go/s7/readwrite/model/TransportSize.go     |   25 +-
 plc4go/internal/plc4go/s7/s7Io_test.go             |    8 +-
 .../plc4go/simulated/readwrite/XmlParserHelper.go  |   16 -
 .../plc4go/simulated/readwrite/model/DataItem.go   |  226 +-
 .../plc4go/simulated/readwrite/model/Dummy.go      |   85 +-
 .../readwrite/model/SimulatedDataTypeSizes.go      |   25 +-
 .../plc4go/spi/testutils/DriverTestRunner.go       |    7 +-
 plc4j/drivers/ab-eth/pom.xml                       |    4 -
 plc4j/drivers/ads/pom.xml                          |    5 -
 plc4j/drivers/eip/pom.xml                          |    5 -
 plc4j/drivers/firmata/pom.xml                      |    4 -
 plc4j/drivers/knxnetip/pom.xml                     |    4 -
 .../org/apache/plc4x/java/knxnetip/IOTest.java     |  104 -
 plc4j/drivers/simulated/pom.xml                    |    4 -
 .../ads/src/main/resources/protocols/ads/ads.mspec |    4 +-
 .../df1/src/main/resources/protocols/df1/df1.mspec |    2 +-
 .../main/resources/protocols/firmata/firmata.mspec |    2 +-
 .../s7/src/main/resources/protocols/s7/s7.mspec    |    8 +-
 sandbox/test-java-bacnetip-driver/pom.xml          |    4 -
 sandbox/test-java-df1-driver/pom.xml               |    4 -
 .../java/org/apache/plc4x/protocol/df1/IOTest.java |  100 -
 562 files changed, 10153 insertions(+), 54730 deletions(-)

diff --git a/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java b/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
index bf68294..2568a18 100644
--- a/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
+++ b/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
@@ -305,56 +305,56 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
     public String getReadBufferReadMethodCall(String logicalName, SimpleTypeReference simpleTypeReference, String valueString, TypedField field) {
         switch (simpleTypeReference.getBaseType()) {
             case BIT: {
-                return "io.ReadBit(\"" + logicalName + "\")";
+                return "readBuffer.ReadBit(\"" + logicalName + "\")";
             }
             case BYTE: {
-                return "io.ReadByte(\"" + logicalName + "\")";
+                return "readBuffer.ReadByte(\"" + logicalName + "\")";
             }
             case UINT: {
                 IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
                 if (integerTypeReference.getSizeInBits() <= 8) {
-                    return "io.ReadUint8(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.ReadUint8(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 16) {
-                    return "io.ReadUint16(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.ReadUint16(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 32) {
-                    return "io.ReadUint32(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.ReadUint32(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 64) {
-                    return "io.ReadUint64(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.ReadUint64(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
-                return "io.ReadBigInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                return "readBuffer.ReadBigInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
             }
             case INT: {
                 IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
                 if (integerTypeReference.getSizeInBits() <= 8) {
-                    return "io.ReadInt8(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.ReadInt8(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 16) {
-                    return "io.ReadInt16(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.ReadInt16(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 32) {
-                    return "io.ReadInt32(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.ReadInt32(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 64) {
-                    return "io.ReadInt64(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.ReadInt64(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
-                return "io.ReadBigInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                return "readBuffer.ReadBigInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
             }
             case FLOAT: {
                 FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
                 if (floatTypeReference.getSizeInBits() <= 32) {
-                    return "io.ReadFloat32(\"" + logicalName + "\", true, " + floatTypeReference.getExponent() + ", " + floatTypeReference.getMantissa() + ")";
+                    return "readBuffer.ReadFloat32(\"" + logicalName + "\", true, " + floatTypeReference.getExponent() + ", " + floatTypeReference.getMantissa() + ")";
                 }
                 if (floatTypeReference.getSizeInBits() <= 64) {
-                    return "io.ReadFloat64(\"" + logicalName + "\", true, " + floatTypeReference.getExponent() + ", " + floatTypeReference.getMantissa() + ")";
+                    return "readBuffer.ReadFloat64(\"" + logicalName + "\", true, " + floatTypeReference.getExponent() + ", " + floatTypeReference.getMantissa() + ")";
                 }
-                return "io.ReadBigFloat(\"" + logicalName + "\", true, " + floatTypeReference.getExponent() + ", " + floatTypeReference.getMantissa() + ")";
+                return "readBuffer.ReadBigFloat(\"" + logicalName + "\", true, " + floatTypeReference.getExponent() + ", " + floatTypeReference.getMantissa() + ")";
             }
             case STRING: {
                 StringTypeReference stringTypeReference = (StringTypeReference) simpleTypeReference;
-                return "io.ReadString(\"" + logicalName + "\", uint32(" + toParseExpression(field, stringTypeReference.getLengthExpression(), null) + "))";
+                return "readBuffer.ReadString(\"" + logicalName + "\", uint32(" + toParseExpression(field, stringTypeReference.getLengthExpression(), null) + "))";
             }
         }
         return "Hurz";
@@ -374,59 +374,59 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         }
         switch (simpleTypeReference.getBaseType()) {
             case BIT: {
-                return "io.WriteBit(\"" + logicalName + "\", " + fieldName + writerArgsString + ")";
+                return "writeBuffer.WriteBit(\"" + logicalName + "\", " + fieldName + writerArgsString + ")";
             }
             case BYTE: {
-                return "io.WriteByte(\"" + logicalName + "\", " + fieldName + writerArgsString + ")";
+                return "writeBuffer.WriteByte(\"" + logicalName + "\", " + fieldName + writerArgsString + ")";
             }
             case UINT: {
                 IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
                 if (integerTypeReference.getSizeInBits() <= 8) {
-                    return "io.WriteUint8(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                    return "writeBuffer.WriteUint8(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 16) {
-                    return "io.WriteUint16(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                    return "writeBuffer.WriteUint16(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 32) {
-                    return "io.WriteUint32(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                    return "writeBuffer.WriteUint32(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 64) {
-                    return "io.WriteUint64(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                    return "writeBuffer.WriteUint64(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
                 }
-                return "io.WriteBigInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                return "writeBuffer.WriteBigInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
             }
             case INT: {
                 IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
                 if (integerTypeReference.getSizeInBits() <= 8) {
-                    return "io.WriteInt8(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                    return "writeBuffer.WriteInt8(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 16) {
-                    return "io.WriteInt16(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                    return "writeBuffer.WriteInt16(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 32) {
-                    return "io.WriteInt32(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                    return "writeBuffer.WriteInt32(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 64) {
-                    return "io.WriteInt64(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                    return "writeBuffer.WriteInt64(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
                 }
-                return "io.WriteBigInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                return "writeBuffer.WriteBigInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
             }
             case FLOAT:
             case UFLOAT: {
                 FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
                 if (floatTypeReference.getSizeInBits() <= 32) {
-                    return "io.WriteFloat32(\"" + logicalName + "\", " + floatTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                    return "writeBuffer.WriteFloat32(\"" + logicalName + "\", " + floatTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
                 }
                 if (floatTypeReference.getSizeInBits() <= 64) {
-                    return "io.WriteFloat64(\"" + logicalName + "\", " + floatTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                    return "writeBuffer.WriteFloat64(\"" + logicalName + "\", " + floatTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
                 }
-                return "io.WriteBigFloat(\"" + logicalName + "\", " + floatTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
+                return "writeBuffer.WriteBigFloat(\"" + logicalName + "\", " + floatTypeReference.getSizeInBits() + ", " + fieldName + writerArgsString + ")";
             }
             case STRING: {
                 StringTypeReference stringTypeReference = (StringTypeReference) simpleTypeReference;
                 String encoding = ((stringTypeReference.getEncoding() != null) && (stringTypeReference.getEncoding().length() > 2)) ?
                     stringTypeReference.getEncoding().substring(1, stringTypeReference.getEncoding().length() - 1) : "UTF-8";
-                return "io.WriteString(\"" + logicalName + "\", uint8(" + toSerializationExpression(field, stringTypeReference.getLengthExpression(), getThisTypeDefinition().getParserArguments()) + "), \"" +
+                return "writeBuffer.WriteString(\"" + logicalName + "\", uint8(" + toSerializationExpression(field, stringTypeReference.getLengthExpression(), getThisTypeDefinition().getParserArguments()) + "), \"" +
                     encoding + "\", " + fieldName + writerArgsString + ")";
             }
         }
@@ -662,7 +662,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
                 if (arg instanceof VariableLiteral) {
                     VariableLiteral va = (VariableLiteral) arg;
                     // "io" is the default name of the reader argument which is always available.
-                    boolean isParserArg = "io".equals(va.getName()) || ((getThisTypeDefinition() instanceof DataIoTypeDefinition) && "_value".equals(va.getName()));
+                    boolean isParserArg = "readBuffer".equals(va.getName()) || "writeBuffer".equals(va.getName()) || ((getThisTypeDefinition() instanceof DataIoTypeDefinition) && "_value".equals(va.getName()));
                     boolean isTypeArg = "_type".equals(va.getName());
                     if (!isParserArg && !isTypeArg && parserArguments != null) {
                         for (Argument parserArgument : parserArguments) {
@@ -714,7 +714,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         } else if ("ARRAY_SIZE_IN_BYTES".equals(vl.getName())) {
             VariableLiteral va = (VariableLiteral) vl.getArgs().get(0);
             // "io" and "m" are always available in every parser.
-            boolean isSerializerArg = "io".equals(va.getName()) || "m".equals(va.getName()) || "element".equals(va.getName());
+            boolean isSerializerArg = "readBuffer".equals(va.getName()) || "writeBuffer".equals(va.getName()) || "m".equals(va.getName()) || "element".equals(va.getName());
             if (!isSerializerArg && serializerArguments != null) {
                 for (Argument serializerArgument : serializerArguments) {
                     if (serializerArgument.getName().equals(va.getName())) {
diff --git a/build-utils/language-go/src/main/resources/templates/go/data-io-template.go.ftlh b/build-utils/language-go/src/main/resources/templates/go/data-io-template.go.ftlh
index cc83d66..d0dbfd3 100644
--- a/build-utils/language-go/src/main/resources/templates/go/data-io-template.go.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/data-io-template.go.ftlh
@@ -82,8 +82,8 @@ import (
 <@importSectionWithContentBelow><@emitImport import="github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils" /><@emitImport import="github.com/apache/plc4x/plc4go/internal/plc4go/spi/values" /><@emitImportWithAlias alias="api" import="github.com/apache/plc4x/plc4go/pkg/plc4go/values" />
 // Code generated by build-utils. DO NOT EDIT.
 
-func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type) && !helper.isEnumTypeReference(parserArgument.type)>I</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) (api.PlcValue, error) {
-	io.PullContext("${type.name}")
+func ${type.name}Parse(readBuffer utils.ReadBuffer<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type) && !helper.isEnumTypeReference(parserArgument.type)>I</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) (api.PlcValue, error) {
+	readBuffer.PullContext("${type.name}")
 	switch {
 	<#list type.switchField.cases as case>
         <#if case.discriminatorValues?has_content>case <#list case.discriminatorValues as discriminatorValue>${helper.toParseExpression(null, type.switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)} == <#if helper.discriminatorValueNeedsStringEqualityCheck(type.switchField.discriminatorExpressions[discriminatorValue?index])>"${discriminatorValue}"<#elseif helper.isComplexTypeReference(type.parserArguments[discriminatorValue?index].type)><#if helper.isEn [...]
@@ -151,14 +151,14 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 					<#if helper.hasFieldsWithNames(case.fields, "hour", "minutes", "seconds")>
 			value := time.Date(0,0,0, int(hour), int(minutes), int(seconds), 0, nil)<@emitImport import="time" />
 					</#if>
-			io.CloseContext("${type.name}")
+			readBuffer.CloseContext("${type.name}")
 			return values.NewPlcTIME_OF_DAY(value), nil
 					<#break>
 				<#case "DATE">
 					<#if helper.hasFieldsWithNames(case.fields, "year", "month", "day")>
 			value := time.Date(int(year), time.Month(month), int(day), 0, 0, 0, 0, nil)<@emitImport import="time" />
 					</#if>
-			io.CloseContext("${type.name}")
+			readBuffer.CloseContext("${type.name}")
 			return values.NewPlcDATE(value), nil
 					<#break>
 				<#case "DATE_AND_TIME">
@@ -167,20 +167,20 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
                     <#elseif helper.hasFieldsWithNames(case.fields, "secondsSinceEpoch")>
             value := time.Unix(int64(secondsSinceEpoch), 0)<@emitImport import="time" />
 					</#if>
-			io.CloseContext("${type.name}")
+			readBuffer.CloseContext("${type.name}")
 			return values.NewPlcDATE_AND_TIME(value), nil
 					<#break>
-			io.CloseContext("${type.name}")
+			readBuffer.CloseContext("${type.name}")
 				<#case "Struct">
-			io.CloseContext("${type.name}")
+			readBuffer.CloseContext("${type.name}")
 			return values.NewPlcStruct(_map), nil
 					<#break>
 				<#case "List">
-			io.CloseContext("${type.name}")
+			readBuffer.CloseContext("${type.name}")
 			return values.NewPlcList(value), nil
 					<#break>
 				<#default>
-			io.CloseContext("${type.name}")
+			readBuffer.CloseContext("${type.name}")
 			return values.NewPlc${case.name}(value), nil
 			</#switch>
 		</#if>
@@ -190,8 +190,8 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 	return nil, errors.New("unsupported type")<@emitImport import="github.com/pkg/errors" />
 }
 
-func ${type.name}Serialize(io utils.WriteBuffer, value api.PlcValue<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type) && !helper.isEnumTypeReference(parserArgument.type)>I</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error {
-	io.PushContext("${type.name}")
+func ${type.name}Serialize(writeBuffer utils.WriteBuffer, value api.PlcValue<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type) && !helper.isEnumTypeReference(parserArgument.type)>I</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error {
+	writeBuffer.PushContext("${type.name}")
 	switch {
 	<#assign defaultSet=false>
 	<#list type.switchField.cases as case>
@@ -246,7 +246,7 @@ func ${type.name}Serialize(io utils.WriteBuffer, value api.PlcValue<#if type.par
 			return errors.New("unsupported type")<@emitImport import="github.com/pkg/errors" />
 	</#if>
 	}
-	io.PopContext("${type.name}")
+	writeBuffer.PopContext("${type.name}")
 	return nil
 }
 </...@importSectionWithContentBelow>
diff --git a/build-utils/language-go/src/main/resources/templates/go/enum-template.go.ftlh b/build-utils/language-go/src/main/resources/templates/go/enum-template.go.ftlh
index 21c25b7..527a56a 100644
--- a/build-utils/language-go/src/main/resources/templates/go/enum-template.go.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/enum-template.go.ftlh
@@ -50,9 +50,8 @@ package model
 
 import (
     "encoding/xml"
-	"fmt"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-    "io"
+	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -66,9 +65,7 @@ type I${type.name} interface {
 	${constantName?cap_first}() ${helper.getLanguageTypeNameForTypeReference(type.getConstantType(constantName))}
 	</#list>
 </#if>
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 const(
@@ -159,7 +156,7 @@ func (m ${type.name}) LengthInBytes() uint16 {
 <#if type.type?has_content && helper.isSimpleTypeReference(type.type)>
 	<#assign simpleTypeReference = type.type>
 	<#if simpleTypeReference.getSizeInBits() != -1>
-func ${type.name}Parse(io utils.ReadBuffer) (${type.name}, error) {
+func ${type.name}Parse(readBuffer utils.ReadBuffer) (${type.name}, error) {
 	val, err := ${helper.getReadBufferReadMethodCall(type.name, helper.getEnumBaseTypeReference(type.typeReference))}
 	if err != nil {
 		return <#if helper.isStringTypeReference(type.type)>""<#elseif baseType == "bool">false<#else>0</#if>, nil
@@ -167,14 +164,12 @@ func ${type.name}Parse(io utils.ReadBuffer) (${type.name}, error) {
 	return ${type.name}ByValue(val), nil
 }
 
-func (e ${type.name}) Serialize(io utils.WriteBuffer) error {
-	err := ${helper.getWriteBufferWriteMethodCall(type.name, helper.getEnumBaseTypeReference(type.typeReference), helper.getLanguageTypeNameForTypeReference(helper.getEnumBaseTypeReference(type.typeReference)) + "(e)", null, "utils.WithAdditionalStringRepresentation(e.name())")}
-	return err
+func (e ${type.name}) Serialize(writeBuffer utils.WriteBuffer) error {
+	return ${helper.getWriteBufferWriteMethodCall(type.name, helper.getEnumBaseTypeReference(type.typeReference), helper.getLanguageTypeNameForTypeReference(helper.getEnumBaseTypeReference(type.typeReference)) + "(e)", null, "utils.WithAdditionalStringRepresentation(e.name())")}
 }
 	</#if>
 </#if>
 
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
 func (m *${type.name}) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
 	var token xml.Token
 	var err error
@@ -194,7 +189,6 @@ func (m *${type.name}) UnmarshalXML(d *xml.Decoder, start xml.StartElement) erro
 	}
 }
 
-// Deprecated: the utils.WriteBufferReadBased should be used instead
 func (m ${type.name}) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
 	if err := e.EncodeElement(m.String(), start); err != nil {
 		return err
@@ -216,18 +210,4 @@ func (e ${type.name}) String() string {
 	return e.name()
 }
 
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m ${type.name}) Box(s string, i int) utils.AsciiBox {
-	boxName := "${type.name}"
-	if s != "" {
-		boxName += "/" + s
-	}
-	<#if helper.isSimpleTypeReference(type.type) && !helper.isStringTypeReference(type.type)>
-		<#assign simpleTypeReference=type.type>
-		<#assign hexDigits=(simpleTypeReference.getSizeInBits()/4)?ceiling>
-	<#else>
-		<#assign hexDigits=2>
-	</#if>
-	return utils.BoxString(boxName, fmt.Sprintf("%#0*x %s", ${hexDigits}, ${baseType}(m), m.name()), -1)
-}
 </#outputformat>
\ No newline at end of file
diff --git a/build-utils/language-go/src/main/resources/templates/go/model-template.go.ftlh b/build-utils/language-go/src/main/resources/templates/go/model-template.go.ftlh
index ab1ffa0..1f29983 100644
--- a/build-utils/language-go/src/main/resources/templates/go/model-template.go.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/model-template.go.ftlh
@@ -122,9 +122,7 @@ type I${type.name} interface {
 </#if>
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler<@emitImport import="encoding/xml" />
-	xml.Unmarshaler<@emitImport import="encoding/xml" />
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 <#if helper.isDiscriminatedChildTypeDefinition()>
 	<#assign discriminatedChildType = type>
@@ -145,16 +143,15 @@ func (m *${type.name}) ${discriminatorName?cap_first}() ${helper.getLanguageType
 <#if helper.isDiscriminatedParentTypeDefinition()>
 
 type I${type.name}Parent interface {
-	SerializeParent(io utils.WriteBuffer, child I${type.name}, serializeChildFunction func() error<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error
+	SerializeParent(writeBuffer utils.WriteBuffer, child I${type.name}, serializeChildFunction func() error<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error
 	GetTypeName() string
 }
 
 type I${type.name}Child interface {
-	Serialize(io utils.WriteBuffer<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error
+	Serialize(writeBuffer utils.WriteBuffer<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error
 	InitializeParent(parent *${type.name}<#if type.getPropertyFields()?has_content>, <#list type.getPropertyFields() as field>${field.name} <#if field.loopType??>[]</#if><#if helper.needsPointerAccess(field)>*</#if>${helper.getLanguageTypeNameForField(field)}<#sep>, </#sep></#list></#if>)
 	GetTypeName() string
 	I${type.name}
-	utils.AsciiBoxer
 }
 	<#--list helper.getDiscriminatorTypes() as discriminatorName, discriminatorType>
 	<#- If the discriminator name matches that of another field, suppress the methods generation ->
@@ -534,12 +531,12 @@ func (m *${type.name}) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type)>*</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) (*<#if type.parentType?has_content>${type.parentType.name}<#else>${type.name}</#if>, error) {
-	if pullErr := io.PullContext("${type.name}"); pullErr != nil {
+func ${type.name}Parse(readBuffer utils.ReadBuffer<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} <#if helper.isComplexTypeReference(parserArgument.type)>*</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#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
 	}
 	<#if helper.requiresStartPosAndCurPos()>
-	var startPos = io.GetPos()<@emitImport import="io" />
+	var startPos = readBuffer.GetPos()
 	var curPos uint16
 	</#if>
 	<#list type.fields as field>
@@ -564,19 +561,19 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 		</#compress>
 	</#assign>
 	${numberOfBytesExpression}
-	${arrayField.name}, _readArrayErr := io.ReadByteArray("${arrayField.name}", numberOfBytes)
+	${arrayField.name}, _readArrayErr := readBuffer.ReadByteArray("${arrayField.name}", numberOfBytes)
 	if _readArrayErr != nil {
 		return nil, errors.Wrap(_readArrayErr, "Error parsing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
 	}
 				<#else>
 
 	// Array field (${arrayField.name})
-	if pullErr := io.PullContext("${arrayField.name}", utils.WithRenderAsList(true)); pullErr != nil {
+	if pullErr := readBuffer.PullContext("${arrayField.name}", utils.WithRenderAsList(true)); pullErr != nil {
 		return nil, pullErr
 	}
 			<#-- Only update curPos if the length expression uses it -->
 					<#if arrayField.loopExpression.contains("curPos")>
-	curPos = io.GetPos() - startPos<@emitImport import="io" />
+	curPos = readBuffer.GetPos() - startPos
 					</#if>
 			<#-- If this is a count array, we can directly initialize an array with the given size -->
 					<#if helper.isCountArrayField(field)>
@@ -586,7 +583,7 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 					<#if (!helper.isSimpleTypeReference(arrayField.type)) && helper.requiresVariable(arrayField, "lastItem")>
 		lastItem := curItem == uint16(${helper.toParseExpression(arrayField, arrayField.loopExpression, type.parserArguments)} - 1)
 					</#if>
-		_item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall("", arrayField.type)}<#else>${arrayField.type.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list></# [...]
+		_item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall("", arrayField.type)}<#else>${arrayField.type.name}Parse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></# [...]
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
 		}
@@ -598,16 +595,16 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 	// Length array
 	${arrayField.name} := make([]<#if helper.isComplexTypeReference(arrayField.type)>*</#if>${helper.getLanguageTypeNameForField(field)}, 0)
 	_${arrayField.name}Length := ${helper.toIntegerParseExpression(16, arrayField.loopExpression, type.parserArguments)}
-	_${arrayField.name}EndPos := io.GetPos() + uint16(_${arrayField.name}Length)
-	for ;io.GetPos() < _${arrayField.name}EndPos; {<@emitImport import="io" />
-		_item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall("", arrayField.type)}<#else>${arrayField.type.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list></# [...]
+	_${arrayField.name}EndPos := readBuffer.GetPos() + uint16(_${arrayField.name}Length)
+	for ;readBuffer.GetPos() < _${arrayField.name}EndPos; {
+		_item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall("", arrayField.type)}<#else>${arrayField.type.name}Parse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></# [...]
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
 		}
 		${arrayField.name} = append(${arrayField.name}, _item)
 					<#-- After parsing, update the current position, but only if it's needed -->
 						<#if arrayField.loopExpression.contains("curPos")>
-		curPos = io.GetPos() - startPos<@emitImport import="io" />
+		curPos = readBuffer.GetPos() - startPos
 						</#if>
 	}
 					<#-- A terminated array keeps on reading data as long as the termination expression evaluates to false -->
@@ -615,7 +612,7 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 	// Terminated array
 	${arrayField.name} := make([]<#if helper.isComplexTypeReference(arrayField.type)>*</#if>${helper.getLanguageTypeNameForField(field)}, 0)
 	for ;!bool(${helper.toParseExpression(arrayField, arrayField.loopExpression, type.parserArguments)}); {
-		_item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall("", arrayField.type)}<#else>${arrayField.type.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list></# [...]
+		_item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall("", arrayField.type)}<#else>${arrayField.type.name}Parse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${helper.toTypedParseExpression(helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></# [...]
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
 		}
@@ -623,11 +620,11 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 
 					<#-- After parsing, update the current position, but only if it's needed -->
 						<#if arrayField.loopExpression.contains("curPos")>
-		curPos = io.GetPos() - startPos<@emitImport import="io" />
+		curPos = readBuffer.GetPos() - startPos
 						</#if>
 	}
 					</#if>
-	if closeErr := io.CloseContext("${arrayField.name}", utils.WithRenderAsList(true)); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("${arrayField.name}", utils.WithRenderAsList(true)); closeErr != nil {
 		return nil, closeErr
 	}
 				</#if>
@@ -670,7 +667,7 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 
 	// Discriminator Field (${discriminatorField.name}) (Used as input to a switch field)
 	<#if helper.isEnumField(field)>
-	${helper.getVariableName(field)}_temp, _${discriminatorField.name}Err := ${helper.getLanguageTypeNameForField(discriminatorField)}Parse(io)
+	${helper.getVariableName(field)}_temp, _${discriminatorField.name}Err := ${helper.getLanguageTypeNameForField(discriminatorField)}Parse(readBuffer)
 	var ${helper.getVariableName(field)} *${helper.getLanguageTypeNameForField(discriminatorField)} = &${helper.getVariableName(field)}_temp
 	<#else>
 	${helper.getVariableName(field)}, _${discriminatorField.name}Err := ${helper.getReadBufferReadMethodCall(discriminatorField.name, simpleTypeReference)}
@@ -682,15 +679,15 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 			<#case "enum">
 				<#assign enumField = field>
 
-	if pullErr := io.PullContext("${enumField.name}"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("${enumField.name}"); pullErr != nil {
 		return nil, pullErr
 	}
 	// Enum field (${enumField.name})
-	${enumField.name}, _${enumField.name}Err := ${helper.getLanguageTypeNameForField(field)}Parse(io)
+	${enumField.name}, _${enumField.name}Err := ${helper.getLanguageTypeNameForField(field)}Parse(readBuffer)
 	if _${enumField.name}Err != nil {
 		return nil, errors.Wrap(_${enumField.name}Err, "Error parsing '${enumField.name}' field")<@emitImport import="github.com/pkg/errors" />
 	}
-	if closeErr := io.CloseContext("${enumField.name}"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("${enumField.name}"); closeErr != nil {
 		return nil, closeErr
 	}
 				<#break>
@@ -707,13 +704,13 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 				<#break>
 			<#case "manualArray">
 				<#assign manualArrayField = field>
-	if pullErr := io.PullContext("${manualArrayField.name}", utils.WithRenderAsList(true)); pullErr != nil {
+	if pullErr := readBuffer.PullContext("${manualArrayField.name}", utils.WithRenderAsList(true)); pullErr != nil {
 		return nil, pullErr
 	}
 	// Manual Array Field (${manualArrayField.name})
 			<#-- Only update curPos if the length expression uses it -->
 				<#if manualArrayField.loopExpression.contains("curPos")>
-	curPos = io.GetPos() - startPos<@emitImport import="io" />
+	curPos = readBuffer.GetPos() - startPos
 				</#if>
 			<#-- If this is a count array, we can directly initialize an array with the given size -->
 				<#if helper.isCountArrayField(field)>
@@ -730,12 +727,12 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 	// Length array
 	_${manualArrayField.name}Length := ${helper.toIntegerParseExpression(16, manualArrayField.loopExpression, type.parserArguments)}
 	_${manualArrayField.name}List := make([]${helper.getLanguageTypeNameForField(manualArrayField)}, 0)
-	${manualArrayField.name}EndPos := io.GetPos() + _${manualArrayField.name}Length<@emitImport import="io" />
-	for ;io.GetPos() < ${manualArrayField.name}EndPos; {<@emitImport import="io" />
+	${manualArrayField.name}EndPos := readBuffer.GetPos() + _${manualArrayField.name}Length
+	for ;readBuffer.GetPos() < ${manualArrayField.name}EndPos; {
 		_${manualArrayField.name}List = append(_${manualArrayField.name}List, ((${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(manualArrayField, manualArrayField.parseExpression, type.parserArguments)})))
 					<#-- After parsing, update the current position, but only if it's needed -->
 						<#if manualArrayField.loopExpression.contains("curPos")>
-		curPos = io.GetPos() - startPos<@emitImport import="io" />
+		curPos = readBuffer.GetPos() - startPos
 						</#if>
 	}
 					<#-- A terminated array keeps on reading data as long as the termination expression evaluates to false -->
@@ -747,7 +744,7 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 
 					<#-- After parsing, update the current position, but only if it's needed -->
 						<#if manualArrayField.loopExpression.contains("curPos")>
-		curPos = io.GetPos() - startPos<@emitImport import="io" />
+		curPos = readBuffer.GetPos() - startPos
 						</#if>
 	}
 					</#if>
@@ -765,7 +762,7 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 	${helper.getLanguageTypeNameForField(field)}[] ${manualArrayField.name} = _${manualArrayField.name}List.toArray(new ${helper.getLanguageTypeNameForField(manualArrayField)}[0])
 					</#if>
 				</#if>
-	if closeErr := io.CloseContext("${manualArrayField.name}", utils.WithRenderAsList(true)); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("${manualArrayField.name}", utils.WithRenderAsList(true)); closeErr != nil {
 		return nil, closeErr
 	}
 				<#break>
@@ -783,7 +780,7 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 
 	// Optional Field (${optionalField.name}) (Can be skipped, if a given expression evaluates to false)
 				<#if optionalField.conditionExpression.contains("curPos")>
-	curPos = io.GetPos() - startPos<@emitImport import="io" />
+	curPos = readBuffer.GetPos() - startPos
 				</#if>
 	var ${optionalField.name} *${helper.getLanguageTypeNameForField(field)} = nil
 	if ${helper.toBooleanParseExpression(optionalField.conditionExpression, type.parserArguments)} {
@@ -794,13 +791,13 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 		}
 		${optionalField.name} = &_val
 			<#elseif helper.isEnumField(field)>
-		_val, _err := ${helper.getLanguageTypeNameForField(field)}Parse(io)
+		_val, _err := ${helper.getLanguageTypeNameForField(field)}Parse(readBuffer)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing '${optionalField.name}' field")<@emitImport import="github.com/pkg/errors" />
 		}
 		${optionalField.name} = &_val
 			<#else>
-		_val, _err := ${helper.getLanguageTypeNameForField(field)}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument>${helper.toTypedParseExpression(helper.getArgumentType(optionalField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list></#if>)
+		_val, _err := ${helper.getLanguageTypeNameForField(field)}Parse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument>${helper.toTypedParseExpression(helper.getArgumentType(optionalField.type, parserArgument?index), parserArgument, type.parserArguments)}<#sep>, </#sep></#list></#if>)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing '${optionalField.name}' field")<@emitImport import="github.com/pkg/errors" />
 		}
@@ -814,18 +811,18 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 
 	// Padding Field (padding)
 	{
-		if pullErr := io.PullContext("padding", utils.WithRenderAsList(true)); pullErr != nil {
+		if pullErr := readBuffer.PullContext("padding", utils.WithRenderAsList(true)); pullErr != nil {
 			return nil, pullErr
 		}
 		_timesPadding := (${helper.toParseExpression(paddingField, paddingField.paddingCondition, type.parserArguments)})
-		for ;(io.HasMore(${helper.getNumBits(simpleTypeReference)})) && (_timesPadding > 0);_timesPadding-- {<@emitImport import="io" />
+		for ;(readBuffer.HasMore(${helper.getNumBits(simpleTypeReference)})) && (_timesPadding > 0);_timesPadding-- {
 			// Just read the padding data and ignore it
 			_, _err := ${helper.getReadBufferReadMethodCall("", simpleTypeReference)}
 			if _err != nil {
 				return nil, errors.Wrap(_err, "Error parsing 'padding' field")<@emitImport import="github.com/pkg/errors" />
 			}
 		}
-		if closeErr := io.CloseContext("padding", utils.WithRenderAsList(true)); closeErr != nil {
+		if closeErr := readBuffer.CloseContext("padding", utils.WithRenderAsList(true)); closeErr != nil {
 			return nil, closeErr
 		}
 	}
@@ -852,14 +849,14 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 				<#assign simpleField = field>
 
 				<#if !helper.isSimpleTypeReference(simpleField.type)>
-	if pullErr := io.PullContext("${simpleField.name}"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("${simpleField.name}"); pullErr != nil {
 		return nil, pullErr
 	}
 				</#if>
 
 	// Simple Field (${simpleField.name})
     <#assign simpleFieldLogicalName><#if helper.isSimpleTypeReference(simpleField.type) && !helper.isEnumField(field)>${simpleField.name}<#else>${simpleField.typeName}</#if></#assign>
-	${simpleField.name}, _${simpleField.name}Err := <#if helper.isSimpleTypeReference(simpleField.type)>${helper.getReadBufferReadMethodCall(simpleFieldLogicalName, simpleField.type, null, field)}<#else>${simpleField.type.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*<#elseif helper.needsReferenceForParserArgument(parserArgument.name, helper.getArgumentType(simpl [...]
+	${simpleField.name}, _${simpleField.name}Err := <#if helper.isSimpleTypeReference(simpleField.type)>${helper.getReadBufferReadMethodCall(simpleFieldLogicalName, simpleField.type, null, field)}<#else>${simpleField.type.name}Parse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*<#elseif helper.needsReferenceForParserArgument(parserArgument.name, helper.getArgumentTy [...]
 	if _${simpleField.name}Err != nil {
 			<#if helper.isEnumField(field)>
 		return nil, errors.Wrap(_${simpleField.name}Err, "Error parsing '${simpleField.name}' field")<@emitImport import="github.com/pkg/errors" />
@@ -868,7 +865,7 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 			</#if>
 	}
 				<#if !helper.isSimpleTypeReference(simpleField.type)>
-	if closeErr := io.CloseContext("${simpleField.name}"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("${simpleField.name}"); closeErr != nil {
 		return nil, closeErr
 	}
 				</#if>
@@ -884,7 +881,7 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 				<#list switchField.cases as case>
 					<#--TODO: refactor the line below into multiple assigns -->
 	<#if case.discriminatorValues?has_content>case <#list case.discriminatorValues as discriminatorValue><#if helper.isComplexTypeReference(helper.getDiscriminatorTypes()[helper.toParseExpression(null, switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)])><#if helper.isEnumTypeReference(helper.getDiscriminatorTypes()[helper.toParseExpression(null, switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)])>*</#if></#if>${helper.t [...]
-		_parent, typeSwitchError = ${case.name}Parse(io<#if case.parserArguments?has_content>, <#list case.parserArguments as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${parserArgument.name}<#sep>, </#sep></#list></#if>)
+		_parent, typeSwitchError = ${case.name}Parse(readBuffer<#if case.parserArguments?has_content>, <#list case.parserArguments as parserArgument><#if helper.isOptionalField(helper.getFieldForNameFromCurrentOrParent(parserArgument.name))>*</#if>${parserArgument.name}<#sep>, </#sep></#list></#if>)
 				</#list>
 	default:
 		// TODO: return actual type
@@ -907,7 +904,7 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 		</#switch>
 	</#list>
 
-	if closeErr := io.CloseContext("${type.name}"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("${type.name}"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -932,16 +929,16 @@ func ${type.name}Parse(io utils.ReadBuffer<#if type.parserArguments?has_content>
 }
 
 <#if helper.isDiscriminatedParentTypeDefinition()>
-func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error {
-	return m.Child.Serialize(io<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>)
+func (m *${type.name}) Serialize(writeBuffer utils.WriteBuffer<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error {
+	return m.Child.Serialize(writeBuffer<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>)
 }
 
-func (m *${type.name}) SerializeParent(io utils.WriteBuffer, child I${type.name}, serializeChildFunction func() error<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error {
+func (m *${type.name}) SerializeParent(writeBuffer utils.WriteBuffer, child I${type.name}, serializeChildFunction func() error<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error {
 <#else>
-func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error {
+func (m *${type.name}) Serialize(writeBuffer utils.WriteBuffer<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) error {
 </#if>
 	<#if !helper.isDiscriminatedChildTypeDefinition()>
-	if pushErr :=io.PushContext("${type.name}"); pushErr != nil {
+	if pushErr :=writeBuffer.PushContext("${type.name}"); pushErr != nil {
 		return pushErr
 	}
 	</#if>
@@ -960,7 +957,7 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 	</#if>
 	<#if helper.isDiscriminatedChildTypeDefinition()>
 	ser := func() error {
-		if pushErr := io.PushContext("${type.name}"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("${type.name}"); pushErr != nil {
 			return pushErr
 		}
 	</#if>
@@ -974,12 +971,12 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 	if m.${arrayField.name?cap_first} != nil {
 				<#if helper.isByteBased(arrayField.type)>
 		// Byte Array field (${arrayField.name})
-		_writeArrayErr := io.WriteByteArray("${arrayField.name}", m.${arrayField.name?cap_first})
+		_writeArrayErr := writeBuffer.WriteByteArray("${arrayField.name}", m.${arrayField.name?cap_first})
 		if _writeArrayErr != nil {
 			return errors.Wrap(_writeArrayErr, "Error serializing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
 		}
 				<#else>
-		if pushErr := io.PushContext("${arrayField.name}", utils.WithRenderAsList(true)); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("${arrayField.name}", utils.WithRenderAsList(true)); pushErr != nil {
 			return pushErr
 		}
 					<#if helper.isComplexTypeReference(arrayField.type) && (helper.needsVariable(arrayField, "curItem", true) || helper.needsVariable(arrayField, "lastItem", true))>
@@ -995,7 +992,7 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 					<#if helper.needsVariable(arrayField, "lastItem", true)>
 			var lastItem bool = curItem == (itemCount - 1)
 					</#if>
-			_elementErr := _element.Serialize(io<#if helper.getSerializerTerms(field.params)?has_content>, <#list helper.getSerializerTerms(field.params) as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>)
+			_elementErr := _element.Serialize(writeBuffer<#if helper.getSerializerTerms(field.params)?has_content>, <#list helper.getSerializerTerms(field.params) as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>)
 				</#if>
 			if _elementErr != nil {
 				return errors.Wrap(_elementErr, "Error serializing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
@@ -1004,7 +1001,7 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 			curItem++
 				</#if>
 		}
-		if popErr := io.PopContext("${arrayField.name}", utils.WithRenderAsList(true)); popErr != nil {
+		if popErr := writeBuffer.PopContext("${arrayField.name}", utils.WithRenderAsList(true)); popErr != nil {
 			return popErr
 		}
 				</#if>
@@ -1043,7 +1040,7 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 	// Discriminator Field (${discriminatorField.name}) (Used as input to a switch field)
 	${discriminatorField.name} := ${helper.getLanguageTypeNameForField(field)}(child.${discriminatorField.name?cap_first}())
 	<#if helper.isEnumField(field)>
-	_${discriminatorField.name}Err := ${discriminatorField.name}.Serialize(io)
+	_${discriminatorField.name}Err := ${discriminatorField.name}.Serialize(writeBuffer)
 	<#else>
 	_${discriminatorField.name}Err := ${helper.getWriteBufferWriteMethodCall(discriminatorField.name, simpleTypeReference, "(" + discriminatorField.name + ")", field)}
 	</#if>
@@ -1055,7 +1052,7 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 			<#case "enum">
 				<#assign enumField = field>
 
-	if pushErr := io.PushContext("${enumField.name}"); pushErr != nil {
+	if pushErr := writeBuffer.PushContext("${enumField.name}"); pushErr != nil {
 		return pushErr
 	}
 					<#if enumField.fieldName?has_content>
@@ -1068,12 +1065,12 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 					<#else>
 	// Enum field (${enumField.name})
 	${enumField.name} := Cast${helper.getLanguageTypeNameForField(field)}(m.${enumField.name?cap_first})
-	_${enumField.name}Err := ${enumField.name}.Serialize(io)
+	_${enumField.name}Err := ${enumField.name}.Serialize(writeBuffer)
 	if _${enumField.name}Err != nil {
 		return errors.Wrap(_${enumField.name}Err, "Error serializing '${enumField.name}' field")<@emitImport import="github.com/pkg/errors" />
 	}
 			</#if>
-	if popErr := io.PopContext("${enumField.name}"); popErr != nil {
+	if popErr := writeBuffer.PopContext("${enumField.name}"); popErr != nil {
 		return popErr
 	}
 				<#break>
@@ -1093,14 +1090,14 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 
 	// Manual Array Field (${manualArrayField.name})
 	if m.${manualArrayField.name?cap_first} != nil {
-		if pushErr := io.PushContext("${manualArrayField.name}", utils.WithRenderAsList(true)); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("${manualArrayField.name}", utils.WithRenderAsList(true)); pushErr != nil {
 			return pushErr
 		}
 		//for _, element := range m.${manualArrayField.name?cap_first} {
 			<#-- TODO at the moment the implementation below is broken as element get prefixed wrong -->
 			//${helper.toSerializationExpression(manualArrayField, manualArrayField.serializeExpression, type.parserArguments)}
 		//}
-		if popErr := io.PopContext("${manualArrayField.name}", utils.WithRenderAsList(true)); popErr != nil {
+		if popErr := writeBuffer.PopContext("${manualArrayField.name}", utils.WithRenderAsList(true)); popErr != nil {
 			return popErr
 		}
 	}
@@ -1124,7 +1121,7 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 				<#else>
 					<#assign complexTypeReference = optionalField.type>
 		${optionalField.name} = m.${optionalField.name?cap_first}
-		_${optionalField.name}Err := ${optionalField.name}.Serialize(io)
+		_${optionalField.name}Err := ${optionalField.name}.Serialize(writeBuffer)
 				</#if>
 		if _${optionalField.name}Err != nil {
 			return errors.Wrap(_${optionalField.name}Err, "Error serializing '${optionalField.name}' field")<@emitImport import="github.com/pkg/errors" />
@@ -1137,7 +1134,7 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 
 	// Padding Field (padding)
 	{
-		if pushErr := io.PushContext("padding", utils.WithRenderAsList(true)); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("padding", utils.WithRenderAsList(true)); pushErr != nil {
 			return pushErr
 		}
 		_timesPadding := uint8(${helper.toSerializationExpression(paddingField, paddingField.paddingCondition, type.parserArguments)})
@@ -1148,7 +1145,7 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 				return errors.Wrap(_paddingErr, "Error serializing 'padding' field")<@emitImport import="github.com/pkg/errors" />
 			}
 		}
-		if popErr := io.PopContext("padding", utils.WithRenderAsList(true)); popErr != nil {
+		if popErr := writeBuffer.PopContext("padding", utils.WithRenderAsList(true)); popErr != nil {
 			return popErr
 		}
 	}
@@ -1180,11 +1177,11 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 				</#if>
 				<#else>
 					<#assign complexTypeReference = simpleField.type>
-	if pushErr := io.PushContext("${simpleField.name}"); pushErr != nil {
+	if pushErr := writeBuffer.PushContext("${simpleField.name}"); pushErr != nil {
 		return pushErr
 	}
-	_${simpleField.name}Err := m.${simpleField.name?cap_first}.Serialize(io)
-	if popErr := io.PopContext("${simpleField.name}"); popErr != nil {
+	_${simpleField.name}Err := m.${simpleField.name?cap_first}.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("${simpleField.name}"); popErr != nil {
 		return popErr
 	}
 				</#if>
@@ -1207,459 +1204,20 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 	</#list>
 
 	<#if helper.isDiscriminatedChildTypeDefinition()>
-		if popErr := io.PopContext("${type.name}"); popErr != nil {
+		if popErr := writeBuffer.PopContext("${type.name}"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 	<#else>
-	if popErr := io.PopContext("${type.name}"); popErr != nil {
+	if popErr := writeBuffer.PopContext("${type.name}"); popErr != nil {
 		return popErr
 	}
 	return nil
 	</#if>
 }
 
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *${type.name}) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {<@emitImport import="encoding/xml" />
-	var token xml.Token<@emitImport import="encoding/xml" />
-	var err error
-	foundContent := false
-	<#if helper.isDiscriminatedParentTypeDefinition()>
-	if start.Attr != nil && len(start.Attr ) > 0 {
-		switch start.Attr[0].Value {
-		<#list helper.getUniqueSwitchCases(helper.getSwitchField().cases) as subtype>
-			<#if subtype.fields?size == 0>
-		// ${subtype.name} needs special treatment as it has no fields
-		case "org.apache.plc4x.java.${protocolName}.${outputFlavor?replace("-","")}.${subtype.name}":
-			if m.Child == nil {
-				m.Child = &${subtype.name}{
-					Parent: m,
-				}
-			}
-			</#if>
-		</#list>
-		}
-	}
-	</#if>
-	<#if helper.isDiscriminatedChildTypeDefinition()>
-	token = start
-	</#if>
-	for {
-	<#if !helper.isDiscriminatedChildTypeDefinition()>
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {<@emitImport import="io" />
-				return nil
-			}
-			return err
-		}
-	</#if>
-		switch token.(type) {
-		case xml.StartElement:<@emitImport import="encoding/xml" />
-			foundContent = true
-			tok := token.(xml.StartElement)<@emitImport import="encoding/xml" />
-			switch tok.Name.Local {
-	<#if type.fields?has_content>
-		<#assign hasSwitch = false>
-		<#list type.fields as field>
-			<#if helper.isSwitchField(field)>
-				<#assign hasSwitch = true>
-			<#elseif helper.isPropertyField(field) && !helper.isConstField(field) && !helper.isVirtualField(field)>
-			case "${field.name}":
-			<#-- int8 arrays are serialized in hex encoding -->
-				<#if helper.isArrayField(field) && (helper.getLanguageTypeNameForField(field) == 'int8')>
-				var _encoded string
-				if err := d.DecodeElement(&_encoded, &tok); err != nil {
-					return err
-				}
-				_decoded, err := hex.DecodeString(_encoded)${helper.emitRequiredImport("encoding/hex")}
-				_len := len(_decoded)
-				if err != nil {
-					return err
-				}
-				m.${field.name?cap_first} = utils.ByteArrayToInt8Array(_decoded[0:_len])
-				<#elseif helper.isComplexTypeReference(field.type) && helper.isDiscriminatedParentTypeDefinition(helper.getTypeDefinitionForTypeReference(field.type))>
-					<#if helper.isArrayField(field)>
-				arrayLoop: for {
-					token, err = d.Token()
-					switch token.(type) {
-					case xml.StartElement:<@emitImport import="encoding/xml" />
-						tok := token.(xml.StartElement)<@emitImport import="encoding/xml" />
-						var dt *${helper.getLanguageTypeNameForField(field)}
-						if err := d.DecodeElement(&dt, &tok); err != nil {
-							return err
-						}
-						m.${field.name?cap_first} = append(m.${field.name?cap_first}, dt)
-					default:
-						break arrayLoop
-					}
-				}
-					<#else>
-				var dt *${helper.getLanguageTypeNameForField(field)}
-				if err := d.DecodeElement(&dt, &tok); err != nil {
-					if err == io.EOF {
-						continue
-					}
-					return err
-				}
-				m.${field.name?cap_first} = dt
-					</#if>
-				<#elseif helper.isArrayField(field)>
-				var data []<#if helper.isComplexTypeReference(field.type)>*</#if>${helper.getLanguageTypeNameForField(field)}
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.${field.name?cap_first} = data
-				<#--TODO: we need all optional fields to not intialized-->
-				<#elseif helper.needsPointerAccess(field) && helper.isOptionalField(field) && !helper.isComplex(field)>
-				// When working with pointers we need to check for an empty element
-				var dataString string
-				if err := d.DecodeElement(&dataString, &tok); err != nil {
-					return err
-				}
-				if dataString != "" {
-					atoi, err := strconv.Atoi(dataString)<@emitImport import="strconv" />
-					if err != nil {
-						return err
-					}
-					data := ${helper.getLanguageTypeNameForField(field)}(atoi)
-					m.${field.name?cap_first} = &data
-				}
-				<#elseif helper.needsPointerAccess(field)>
-				var data ${helper.getLanguageTypeNameForField(field)}
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.${field.name?cap_first} = &data
-				<#elseif helper.isManualArrayField(field)>
-					// TODO: not implemented yet
-				<#else>
-				var data ${helper.getLanguageTypeNameForField(field)}
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.${field.name?cap_first} = data
-				</#if>
-			</#if>
-		</#list>
-		<#if hasSwitch>
-			default:
-				attr := start.Attr
-				if attr == nil || len(attr) <= 0 {
-					// TODO: workaround for bug with nested lists
-					attr = tok.Attr
-				}
-				if attr == nil || len(attr) <= 0 {
-					panic("Couldn't determine class type for childs of ${type.name}")
-				}
-				switch attr[0].Value {
-			<#list helper.getUniqueSwitchCases(helper.getSwitchField().cases) as subtype>
-				case "org.apache.plc4x.java.${protocolName}.${outputFlavor?replace("-","")}.${subtype.name}":
-					var dt *${subtype.name}
-					if m.Child != nil {
-						dt = m.Child.(*${subtype.name})
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-				<#if helper.isArrayField(field)>
-					_values = append(_values, dt)
-				<#else>
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				</#if>
-			</#list>
-				}
-		</#if>
-	</#if>
-			}
-		}
-	<#if helper.isDiscriminatedChildTypeDefinition()>
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {<@emitImport import="io" />
-				return nil
-			}
-			return err
-		}
-	</#if>
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *${type.name}) MarshalXML(e *xml.Encoder, start xml.StartElement) error {<@emitImport import="encoding/xml" />
-	<#if helper.isDiscriminatedParentTypeDefinition()>
-	className := reflect.TypeOf(m.Child).String()<@emitImport import="reflect" />
-	className = "org.apache.plc4x.java.${protocolName}.${outputFlavor?replace("-","")}." + className[strings.LastIndex(className, ".") + 1:]${helper.emitRequiredImport("strings")}
-	<#elseif !helper.isDiscriminatedChildTypeDefinition()>
-	className := "org.apache.plc4x.java.${protocolName}.${outputFlavor?replace("-","")}.${type.name}"
-	</#if>
-	<#if !helper.isDiscriminatedChildTypeDefinition()>
-	if err := e.EncodeToken(xml.StartElement{Name: start.Name, Attr: []xml.Attr{<@emitImport import="encoding/xml" />
-			{Name: xml.Name{Local: "className"}, Value: className},<@emitImport import="encoding/xml" />
-		}}); err != nil {
-		return err
-	}
-	</#if>
-	<#if type.fields?has_content>
-		<#list type.fields as field>
-			<#if helper.isPropertyField(field) && !helper.isConstField(field) && !helper.isVirtualField(field)>
-			<#-- int8 arrays are serialized in hex string encoding -->
-				<#if helper.isArrayField(field) && (helper.getLanguageTypeNameForField(field) == 'int8')>
-	_encoded${field.name?cap_first} := hex.EncodeToString(utils.Int8ArrayToByteArray(m.${field.name?cap_first}))${helper.emitRequiredImport("encoding/hex")}
-	_encoded${field.name?cap_first} = strings.ToUpper(_encoded${field.name?cap_first})${helper.emitRequiredImport("strings")}
-	if err := e.EncodeElement(_encoded${field.name?cap_first}, xml.StartElement{Name: xml.Name{Local: "${field.name}"}}); err != nil {<@emitImport import="encoding/xml" />
-		return err
-	}
-				<#-- normal arrays have one element with the same name wrapping them -->
-				<#elseif helper.isArrayField(field) && helper.isComplexTypeReference(field.type)>
-	if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "${field.name}"}}); err != nil {<@emitImport import="encoding/xml" />
-		return err
-	}
-	for _, arrayElement := range m.${field.name?cap_first} {
-		if err := e.EncodeElement(arrayElement, xml.StartElement{Name: xml.Name{Local: "${field.name}"}}); err != nil {<@emitImport import="encoding/xml" />
-			return err
-		}
-	}
-	if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "${field.name}"}}); err != nil {<@emitImport import="encoding/xml" />
-		return err
-	}
-				<#else>
-	if err := e.EncodeElement(m.${field.name?cap_first}, xml.StartElement{Name: xml.Name{Local: "${field.name}"}}); err != nil {<@emitImport import="encoding/xml" />
-		return err
-	}
-				</#if>
-			</#if>
-		</#list>
-		<#-- TODO: we seperated these two loops because the way jackson/java renders fields-->
-		<#list type.fields as field>
-			<#if helper.isSwitchField(field)>
-	marshaller, ok := m.Child.(xml.Marshaler)<@emitImport import="encoding/xml" />
-	if !ok {
-		return errors.Errorf("child is not castable to Marshaler. Actual type %T", m.Child)<@emitImport import="github.com/pkg/errors" />
-	}
-	if err := marshaller.MarshalXML(e, start); err != nil {
-		return err
-	}
-			</#if>
-		</#list>
-	</#if>
-	<#if !helper.isDiscriminatedChildTypeDefinition()>
-	if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {<@emitImport import="encoding/xml" />
-		return err
-	}
-	</#if>
-	return nil
-}
-
-func (m ${type.name}) String() string {
-	return string(m.Box("", 120))
-}
-
-<#if helper.isDiscriminatedParentTypeDefinition()>
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *${type.name}) Box(name string, width int) utils.AsciiBox {
-	return m.Child.Box(name, width)
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *${type.name}) BoxParent(name string, width int, childBoxer func() []utils.AsciiBox ) utils.AsciiBox {
-<#else>
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m ${type.name}) Box(name string, width int) utils.AsciiBox {
-</#if>
-	boxName := "${type.name}"
-	if name != "" {
-		boxName += "/" + name
-	}
-	<#assign arraySizeInBytesHelpers=helper.requiresHelperFunctions("ARRAY_SIZE_IN_BYTES")>
-	<#if arraySizeInBytesHelpers?has_content>
-		<#list arraySizeInBytesHelpers?keys as key>
-			<#assign typeName=arraySizeInBytesHelpers[key]>
-			${key}ArraySizeInBytes := func(items []*${typeName}) uint32 {
-			var sizeInBytes uint32 = 0
-			for _, v := range items {
-			sizeInBytes += uint32(v.LengthInBytes())
-			}
-			return sizeInBytes
-			}
-		</#list>
-	</#if>
-	<#if helper.isDiscriminatedChildTypeDefinition()>
-		childBoxer := func() []utils.AsciiBox {
-	</#if>
-	boxes := make([]utils.AsciiBox, 0)
-	<#if type.fields?has_content>
-		<#list type.fields as field>
-			<#switch field.typeName>
-				<#case "array">
-					<#assign arrayField = field>
-					<#assign simpleTypeReference = arrayField.type>
-	// Array Field (${arrayField.name})
-	if m.${arrayField.name?cap_first} != nil {
-					<#if helper.isSimpleTypeReference(arrayField.type)>
-						<#assign simpleTypeReference = arrayField.type>
-						<#switch helper.getLanguageTypeNameForTypeReference(arrayField.type)>
-						<#case "uint8">
-		// Simple array base type ${helper.getLanguageTypeNameForTypeReference(arrayField.type)} will be hex dumped
-		boxes = append(boxes, utils.BoxedDumpAnything("${arrayField.name?cap_first}", m.${arrayField.name?cap_first}))
-						<#default>
-		// Simple array base type ${helper.getLanguageTypeNameForTypeReference(arrayField.type)} will be rendered one by one
-		arrayBoxes := make([]utils.AsciiBox, 0)
-		for _, _element := range m.${arrayField.name?cap_first} {
-							<#assign complexTypeReference = arrayField.type>
-			arrayBoxes = append(arrayBoxes, utils.BoxAnything("", _element, width-2))
-		}
-		boxes = append(boxes, utils.BoxBox("${arrayField.name?cap_first}", utils.AlignBoxes(arrayBoxes, width-4), 0))
-						</#switch>
-					<#else>
-		// Complex array base type
-		arrayBoxes := make([]utils.AsciiBox, 0)
-		for _, _element := range m.${arrayField.name?cap_first} {
-						<#assign complexTypeReference = arrayField.type>
-			arrayBoxes = append(arrayBoxes, utils.BoxAnything("", _element, width-2))
-		}
-		boxes = append(boxes, utils.BoxBox("${arrayField.name?cap_first}", utils.AlignBoxes(arrayBoxes, width-4), 0))
-					</#if>
-	}
-					<#break>
-				<#case "checksum">
-					<#assign checksumField = field>
-					<#assign simpleTypeReference = checksumField.type>
-	// Checksum Field (checksum) (Calculated)
-	_checksum, _ := ${helper.toSerializationExpression(checksumField, checksumField.checksumExpression, type.parserArguments)}
-	boxes = append(boxes, utils.BoxAnything("${constField.name?cap_first}", _checksum, -1))
-					<#break>
-				<#case "const">
-					<#assign constField = field>
-					<#assign simpleTypeReference = constField.type>
-					<#assign baseType = helper.getLanguageTypeNameForTypeReference(simpleTypeReference)>
-	// Const Field (${constField.name})
-	boxes = append(boxes, utils.BoxAnything("${constField.name?cap_first}", ${baseType}(${constField.referenceValue}), -1))
-					<#break>
-				<#case "discriminator">
-					<#assign discriminatorField = field>
-					<#assign simpleTypeReference = discriminatorField.type>
-	// Discriminator Field (${discriminatorField.name}) (Used as input to a switch field)
-	${discriminatorField.name} := ${helper.getLanguageTypeNameForField(field)}(m.Child.${discriminatorField.name?cap_first}())
-	// ${helper.getLanguageTypeNameForField(field)} can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("${field.name?cap_first}", ${discriminatorField.name}, -1))
-					<#if helper.isEnumField(field)>
-	// TODO: implement boxing on enum
-	//_${discriminatorField.name}Err := ${discriminatorField.name}.Box(discriminatorField.name, -1)
-					</#if>
-					<#break>
-				<#case "enum">
-				<#assign enumField = field>
-				<#if enumField.fieldName?has_content>
-					<#assign enumValueFieldAccessor="m."+enumField.name?cap_first+"."+enumField.fieldName?cap_first+"()">
-	// Enum field (${enumField.name}) with value
-	boxes = append(boxes, utils.BoxAnything("${enumField.name?cap_first}_"+m.${enumField.name?cap_first}.String(), ${enumValueFieldAccessor}, -1))
-				<#else>
-	// Enum field (${enumField.name})
-	${enumField.name} := Cast${helper.getLanguageTypeNameForField(field)}(m.${enumField.name?cap_first})
-	boxes = append(boxes, ${enumField.name}.Box("${enumField.name}", -1))
-				</#if>
-				<#break>
-				<#case "implicit">
-					<#assign implicitField = field>
-					<#assign simpleTypeReference = implicitField.type>
-	// Implicit Field (${implicitField.name})
-	${implicitField.name} := ${helper.getLanguageTypeNameForField(field)}(${helper.toSerializationExpression(implicitField, implicitField.serializeExpression, type.parserArguments)})
-	// ${helper.getLanguageTypeNameForField(field)} can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("${implicitField.name?cap_first}", ${implicitField.name}, -1))
-					<#break>
-				<#case "manualArray">
-					<#assign manualArrayField = field>
-					// Manual Array Field (${manualArrayField.name})
-	//if m.${manualArrayField.name?cap_first} != nil {
-	//	for(${helper.getLanguageTypeNameForField(field)} element : m.${manualArrayField.name?cap_first}) {
-			// TODO ${helper.toSerializationExpression(manualArrayField, manualArrayField.serializeExpression, type.parserArguments)}
-	//	}
-	//}
-					<#break>
-				<#case "manual">
-					<#assign manualField = field>
-	// Manual Field (${manualField.name})
-	// TODO: ${helper.toSerializationExpression(manualField, manualField.serializeExpression, type.parserArguments)}
-					<#break>
-				<#case "optional">
-					<#assign optionalField = field>
-	// Optional Field (${optionalField.name}) (Can be skipped, if the value is null)
-	var ${optionalField.name} *${helper.getLanguageTypeNameForField(field)} = nil
-	if m.${optionalField.name?cap_first} != nil {
-					<#if helper.isSimpleTypeReference(optionalField.type)>
-						<#assign simpleTypeReference = optionalField.type>
-		${optionalField.name} = m.${optionalField.name?cap_first}
-		// ${helper.getLanguageTypeNameForField(field)} can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("${optionalField.name?cap_first}", *(${optionalField.name}), -1))
-					<#else>
-					<#assign complexTypeReference = optionalField.type>
-		${optionalField.name} = m.${optionalField.name?cap_first}
-		boxes = append(boxes, ${optionalField.name}.Box("${optionalField.name}", width-2))
-					</#if>
-	}
-					<#break>
-				<#case "padding">
-					<#assign paddingField = field>
-					<#assign simpleTypeReference = paddingField.type>
-	// Padding Field (padding)
-	lastItem:=false // TODO: not sure if its worth to calculate here
-	_=lastItem
-	_timesPadding := uint8(${helper.toSerializationExpression(paddingField, paddingField.paddingCondition, type.parserArguments)})
-	for ;_timesPadding > 0; _timesPadding-- {
-		_paddingValue := ${helper.getLanguageTypeNameForField(field)}(${helper.toSerializationExpression(paddingField, paddingField.paddingValue, type.parserArguments)})
-		boxes = append(boxes, utils.BoxAnything("padding", _paddingValue, -1))
-	}
-					<#break>
-				<#case "reserved">
-				<#assign reservedField = field>
-				<#assign simpleTypeReference = reservedField.type>
-	// Reserved Field (reserved)
-	// reserved field can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("reserved", ${helper.getReservedValue(field)}, -1))
-				<#break>
-				<#case "simple">
-					<#assign simpleField = field>
-						<#if helper.isSimpleTypeReference(simpleField.type)>
-							<#assign simpleTypeReference = simpleField.type>
-	// Simple field (case simple)
-	// ${helper.getLanguageTypeNameForField(field)} can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("${field.name?cap_first}", m.${field.name?cap_first}, -1))
-						<#else>
-							<#assign complexTypeReference = simpleField.type>
-	// Complex field (case complex)
-	boxes = append(boxes, m.${simpleField.name?cap_first}.Box("${simpleField.name}", width-2))
-						</#if>
-					<#break>
-				<#case "switch">
-					<#assign switchField = field>
-	// Switch field (Depending on the discriminator values, passes the boxing to a sub-type)
-	boxes = append(boxes, childBoxer()...)
-					<#break>
-				<#default>
-					<#if helper.isPropertyField(field) && !helper.isConstField(field) && !helper.isVirtualField(field)>
-	// TODO: default case for "${field.name}" with type name "${field.typeName}" should not occur anymore
-	boxes = append(boxes, utils.BoxAnything("${field.name?cap_first}", m.${field.name?cap_first}, width-2))
-					<#else>
-	// TODO: field "${field.name}" with type name "${field.typeName}" unmapped
-					</#if>
-					<#break>
-			</#switch>
-		</#list>
-	</#if>
-	<#if helper.isDiscriminatedChildTypeDefinition()>
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
-	<#else>
-	return utils.BoxBox(boxName, utils.AlignBoxes(boxes, width-2), 0)
-	</#if>
-}
 </...@importSectionWithContentBelow>
 
 </#outputformat>
diff --git a/build-utils/language-go/src/main/resources/templates/go/xml-parser-factory-template.go.ftlh b/build-utils/language-go/src/main/resources/templates/go/xml-parser-factory-template.go.ftlh
index 5e75b5b..25ba5b2 100644
--- a/build-utils/language-go/src/main/resources/templates/go/xml-parser-factory-template.go.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/xml-parser-factory-template.go.ftlh
@@ -64,7 +64,6 @@ ${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/X
 package ${outputFlavor?replace("-","")}
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/${helper.getSanitizedProtocolName()}/${outputFlavor?replace("-","")}/model"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
@@ -82,7 +81,6 @@ func init() {
 	_ = strconv.Atoi
 	_ = strings.Join
 	_ = utils.Dump
-	_ = xml.NewDecoder
 }
 
 func (m ${helper.getSanitizedProtocolName()?cap_first}XmlParserHelper) Parse(typeName string, xmlString string, parserArguments ...string) (interface{}, error) {
@@ -127,26 +125,12 @@ func (m ${helper.getSanitizedProtocolName()?cap_first}XmlParserHelper) Parse(typ
         <#elseif !helper.isDiscriminatedParentTypeDefinition(typeDefinition) && !helper.isDiscriminatedChildTypeDefinition()>
             return model.${typeDefinition.name}Parse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
         <#else>
+			// TODO: implement ${typeDefinition.class}
+			_ = model.New${typeDefinition.name}
             return nil, errors.New("${typeDefinition.name} unmappable")
         </#if>
     </#list>
     }
     return nil, errors.Errorf("Unsupported type %s", typeName)
 }
-
-// Deprecated: will be removed in favor of Parse soon
-func (m ${helper.getSanitizedProtocolName()?cap_first}XmlParserHelper) ParseOld(typeName string, xmlString string) (interface{}, error) {
-	switch typeName {
-<#list helper.getComplexTypeRootDefinitions() as typeDefinition>
-	case "${typeDefinition.name}":
-		var obj *model.${helper.getLanguageTypeNameForTypeReference(typeDefinition.typeReference)}
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err ,"error unmarshalling xml")
-		}
-		return obj, nil
-</#list>
-	}
-	return nil, errors.Errorf("Unsupported type %s", typeName)
-}
 </#outputformat>
\ No newline at end of file
diff --git a/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java b/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
index 11265f1..bdddcbf 100644
--- a/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
+++ b/build-utils/language-java/src/main/java/org/apache/plc4x/language/java/JavaLanguageTemplateHelper.java
@@ -332,43 +332,43 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe
     public String getReadBufferReadMethodCall(String logicalName, SimpleTypeReference simpleTypeReference, String valueString, TypedField field) {
         switch (simpleTypeReference.getBaseType()) {
             case BIT: {
-                return "io.readBit(\"" + logicalName + "\")";
+                return "readBuffer.readBit(\"" + logicalName + "\")";
             }
             case BYTE: {
                 ByteTypeReference byteTypeReference = (ByteTypeReference) simpleTypeReference;
-                return "io.readByte(\"" + logicalName + "\")";
+                return "readBuffer.readByte(\"" + logicalName + "\")";
             }
             case UINT: {
                 IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
                 if (integerTypeReference.getSizeInBits() <= 4) {
-                    return "io.readUnsignedByte(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.readUnsignedByte(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 8) {
-                    return "io.readUnsignedShort(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.readUnsignedShort(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 16) {
-                    return "io.readUnsignedInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.readUnsignedInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 32) {
-                    return "io.readUnsignedLong(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.readUnsignedLong(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
-                return "io.readUnsignedBigInteger(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                return "readBuffer.readUnsignedBigInteger(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
             }
             case INT: {
                 IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
                 if (integerTypeReference.getSizeInBits() <= 8) {
-                    return "io.readSignedByte(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.readSignedByte(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 16) {
-                    return "io.readShort(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.readShort(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 32) {
-                    return "io.readInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.readInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 64) {
-                    return "io.readLong(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
+                    return "readBuffer.readLong(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ")";
                 }
-                return "io.readBigInteger(" + integerTypeReference.getSizeInBits() + ")";
+                return "readBuffer.readBigInteger(" + integerTypeReference.getSizeInBits() + ")";
             }
             case FLOAT: {
                 FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
@@ -376,7 +376,7 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe
                 String typeCast = (floatTypeReference.getSizeInBits() <= 32) ? "float" : "double";
                 String defaultNull = (floatTypeReference.getSizeInBits() <= 32) ? "0.0f" : "0.0";
                 return "((Supplier<" + type + ">) (() -> {" +
-                    "\n            return (" + typeCast + ") toFloat(io, \"" + logicalName + "\", " +
+                    "\n            return (" + typeCast + ") toFloat(readBuffer, \"" + logicalName + "\", " +
                     ((floatTypeReference.getBaseType() == SimpleTypeReference.SimpleBaseType.FLOAT) ? "true" : "false") +
                     ", " + floatTypeReference.getExponent() + ", " +
                     floatTypeReference.getMantissa() + ");" +
@@ -384,7 +384,7 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe
             }
             case STRING: {
                 StringTypeReference stringTypeReference = (StringTypeReference) simpleTypeReference;
-                return "io.readString(\"" + logicalName + "\", " + toParseExpression(field, stringTypeReference.getLengthExpression(), null) + ", \"" +
+                return "readBuffer.readString(\"" + logicalName + "\", " + toParseExpression(field, stringTypeReference.getLengthExpression(), null) + ", \"" +
                     stringTypeReference.getEncoding() + "\")";
             }
         }
@@ -403,58 +403,58 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe
         }
         switch (simpleTypeReference.getBaseType()) {
             case BIT: {
-                return "io.writeBit(\"" + logicalName + "\", (boolean) " + fieldName + "" + writerArgsString + ")";
+                return "writeBuffer.writeBit(\"" + logicalName + "\", (boolean) " + fieldName + "" + writerArgsString + ")";
             }
             case BYTE: {
                 ByteTypeReference byteTypeReference = (ByteTypeReference) simpleTypeReference;
-                return "io.writeByte(\"" + logicalName + "\", ((Number) " + fieldName + ").byteValue()" + writerArgsString + ")";
+                return "writeBuffer.writeByte(\"" + logicalName + "\", ((Number) " + fieldName + ").byteValue()" + writerArgsString + ")";
             }
             case UINT: {
                 IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
                 if (integerTypeReference.getSizeInBits() <= 4) {
-                    return "io.writeUnsignedByte(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").byteValue()" + writerArgsString + ")";
+                    return "writeBuffer.writeUnsignedByte(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").byteValue()" + writerArgsString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 8) {
-                    return "io.writeUnsignedShort(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").shortValue()" + writerArgsString + ")";
+                    return "writeBuffer.writeUnsignedShort(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").shortValue()" + writerArgsString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 16) {
-                    return "io.writeUnsignedInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").intValue()" + writerArgsString + ")";
+                    return "writeBuffer.writeUnsignedInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").intValue()" + writerArgsString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 32) {
-                    return "io.writeUnsignedLong(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").longValue()" + writerArgsString + ")";
+                    return "writeBuffer.writeUnsignedLong(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").longValue()" + writerArgsString + ")";
                 }
-                return "io.writeUnsignedBigInteger(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", (BigInteger) " + fieldName + "" + writerArgsString + ")";
+                return "writeBuffer.writeUnsignedBigInteger(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", (BigInteger) " + fieldName + "" + writerArgsString + ")";
             }
             case INT: {
                 IntegerTypeReference integerTypeReference = (IntegerTypeReference) simpleTypeReference;
                 if (integerTypeReference.getSizeInBits() <= 8) {
-                    return "io.writeSignedByte(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").byteValue()" + writerArgsString + ")";
+                    return "writeBuffer.writeSignedByte(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").byteValue()" + writerArgsString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 16) {
-                    return "io.writeShort(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").shortValue()" + writerArgsString + ")";
+                    return "writeBuffer.writeShort(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").shortValue()" + writerArgsString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 32) {
-                    return "io.writeInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").intValue()" + writerArgsString + ")";
+                    return "writeBuffer.writeInt(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").intValue()" + writerArgsString + ")";
                 }
                 if (integerTypeReference.getSizeInBits() <= 64) {
-                    return "io.writeLong(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").longValue()" + writerArgsString + ")";
+                    return "writeBuffer.writeLong(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", ((Number) " + fieldName + ").longValue()" + writerArgsString + ")";
                 }
-                return "io.writeBigInteger(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", BigInteger.valueOf( " + fieldName + ")" + writerArgsString + ")";
+                return "writeBuffer.writeBigInteger(\"" + logicalName + "\", " + integerTypeReference.getSizeInBits() + ", BigInteger.valueOf( " + fieldName + ")" + writerArgsString + ")";
             }
             case FLOAT:
             case UFLOAT: {
                 FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
                 if (floatTypeReference.getSizeInBits() <= 32) {
-                    return "io.writeFloat(\"" + logicalName + "\", " + fieldName + "," + floatTypeReference.getExponent() + "," + floatTypeReference.getMantissa() + "" + writerArgsString + ")";
+                    return "writeBuffer.writeFloat(\"" + logicalName + "\", " + fieldName + "," + floatTypeReference.getExponent() + "," + floatTypeReference.getMantissa() + "" + writerArgsString + ")";
                 } else if (floatTypeReference.getSizeInBits() <= 64) {
-                    return "io.writeDouble(\"" + logicalName + "\", " + fieldName + "," + floatTypeReference.getExponent() + "," + floatTypeReference.getMantissa() + "" + writerArgsString + ")";
+                    return "writeBuffer.writeDouble(\"" + logicalName + "\", " + fieldName + "," + floatTypeReference.getExponent() + "," + floatTypeReference.getMantissa() + "" + writerArgsString + ")";
                 } else {
                     throw new RuntimeException("Unsupported float type");
                 }
             }
             case STRING: {
                 StringTypeReference stringTypeReference = (StringTypeReference) simpleTypeReference;
-                return "io.writeString(\"" + logicalName + "\", " + toSerializationExpression(field, stringTypeReference.getLengthExpression(), getThisTypeDefinition().getParserArguments()) + ", \"" +
+                return "writeBuffer.writeString(\"" + logicalName + "\", " + toSerializationExpression(field, stringTypeReference.getLengthExpression(), getThisTypeDefinition().getParserArguments()) + ", \"" +
                     stringTypeReference.getEncoding() + "\", (String) " + fieldName + "" + writerArgsString + ")";
             }
         }
@@ -628,8 +628,8 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe
                 }
                 if (arg instanceof VariableLiteral) {
                     VariableLiteral va = (VariableLiteral) arg;
-                    // "io" is the default name of the reader argument which is always available.
-                    boolean isParserArg = "io".equals(va.getName());
+                    // "readBuffer" is the default name of the reader argument which is always available.
+                    boolean isParserArg = "readBuffer".equals(va.getName());
                     boolean isTypeArg = "_type".equals(va.getName());
                     if (!isParserArg && !isTypeArg && parserArguments != null) {
                         for (Argument parserArgument : parserArguments) {
@@ -713,8 +713,8 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe
                 }
                 if (arg instanceof VariableLiteral) {
                     VariableLiteral va = (VariableLiteral) arg;
-                    // "io" and "_value" are always available in every parser.
-                    boolean isSerializerArg = "io".equals(va.getName()) || "_value".equals(va.getName()) || "element".equals(va.getName());
+                    // "readBuffer" and "_value" are always available in every parser.
+                    boolean isSerializerArg = "readBuffer".equals(va.getName()) || "writeBuffer".equals(va.getName()) || "_value".equals(va.getName()) || "element".equals(va.getName());
                     boolean isTypeArg = "_type".equals(va.getName());
                     if (!isSerializerArg && !isTypeArg && serialzerArguments != null) {
                         for (Argument serializerArgument : serialzerArguments) {
@@ -765,7 +765,7 @@ public class JavaLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHe
 
                     if (arg instanceof VariableLiteral) {
                         VariableLiteral va = (VariableLiteral) arg;
-                        boolean isSerializerArg = "io".equals(va.getName());
+                        boolean isSerializerArg = "readBuffer".equals(va.getName()) || "writeBuffer".equals(va.getName());
                         boolean isTypeArg = "_type".equals(va.getName());
                         if (!isSerializerArg && !isTypeArg && serialzerArguments != null) {
                             for (Argument serializerArgument : serialzerArguments) {
diff --git a/build-utils/language-java/src/main/resources/templates/java/data-io-template.java.ftlh b/build-utils/language-java/src/main/resources/templates/java/data-io-template.java.ftlh
index 2353894..415a442 100644
--- a/build-utils/language-java/src/main/resources/templates/java/data-io-template.java.ftlh
+++ b/build-utils/language-java/src/main/resources/templates/java/data-io-template.java.ftlh
@@ -89,7 +89,7 @@ import java.util.function.Supplier;
 public class ${type.name}IO {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(${type.name}IO.class);
-    public static PlcValue staticParse(ReadBuffer io<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${helper.getLanguageTypeNameForTypeReference(parserArgument.type, false)} ${parserArgument.name}<#sep>, </#sep></#list></#if>) throws ParseException {
+    public static PlcValue staticParse(ReadBuffer readBuffer<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${helper.getLanguageTypeNameForTypeReference(parserArgument.type, false)} ${parserArgument.name}<#sep>, </#sep></#list></#if>) throws ParseException {
         <#assign defaultCaseOutput=false>
         <#list type.switchField.cases as case>
 <#if case.discriminatorValues?has_content>if(<#list case.discriminatorValues as discriminatorValue>EvaluationHelper.equals(${helper.toParseExpression(null, type.switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)}, <#if helper.discriminatorValueNeedsStringEqualityCheck(type.switchField.discriminatorExpressions[discriminatorValue?index])>"${discriminatorValue}"<#elseif helper.isComplexTypeReference(type.parserArguments[discriminatorValue?index].type)><#if [...]
@@ -101,7 +101,7 @@ public class ${type.name}IO {
             // Array field (${field.name})
             <#-- Only update curPos if the length expression uses it -->
                         <#if field.loopExpression.contains("curPos")>
-            curPos = io.getPos() - startPos;
+            curPos = readBuffer.getPos() - startPos;
                         </#if>
             <#-- If this is a count array, we can directly initialize an array with the given size -->
                         <#if helper.isCountArrayField(field)>
@@ -114,7 +114,7 @@ public class ${type.name}IO {
                 int itemCount = (int) ${helper.toParseExpression(field, field.loopExpression, type.parserArguments)};
                 ${field.name} = new LinkedList<>();
                 for(int curItem = 0; curItem < itemCount; curItem++) {
-                    ${field.name}.add(new ${helper.getPlcValueTypeForTypeReference(field.type)}((${helper.getNonPrimitiveLanguageTypeNameForField(field)}) <#if helper.isSimpleTypeReference(field.type)>${helper.getReadBufferReadMethodCall(field.type, "", field)})<#else>${field.type.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(field.type, parserArgument?index), true)}) (${hel [...]
+                    ${field.name}.add(new ${helper.getPlcValueTypeForTypeReference(field.type)}((${helper.getNonPrimitiveLanguageTypeNameForField(field)}) <#if helper.isSimpleTypeReference(field.type)>${helper.getReadBufferReadMethodCall(field.type, "", field)})<#else>${field.type.name}IO.staticParse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(field.type, parserArgument?index), true)} [...]
                 }
             }
             <#-- In all other cases do we have to work with a list, that is later converted to an array -->
@@ -123,13 +123,13 @@ public class ${type.name}IO {
                             <#if helper.isLengthArrayField(field)>
             // Length array
             int _${field.name}Length = ${helper.toParseExpression(field, field.loopExpression, type.parserArguments)};
-            int ${field.name}EndPos = io.getPos() + _${field.name}Length;
+            int ${field.name}EndPos = readBuffer.getPos() + _${field.name}Length;
             List<PlcValue> value = new LinkedList<>();
-            while(io.getPos() < ${field.name}EndPos) {
+            while(readBuffer.getPos() < ${field.name}EndPos) {
                 value.add(
                 <#if helper.isSimpleTypeReference(field.type)>
                     new ${helper.getPlcValueTypeForTypeReference(field.type)}(${helper.getReadBufferReadMethodCall(field.type, "", field)})
-                <#else>${field.type.name}IO.staticParse(io
+                <#else>${field.type.name}IO.staticParse(readBuffer
                     <#if field.params?has_content>,
                         <#list field.params as parserArgument>
                             (${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(field.type, parserArgument?index), true)}) (${helper.toParseExpression(field, parserArgument, type.parserArguments)})
@@ -145,11 +145,11 @@ public class ${type.name}IO {
             // Terminated array
             List<${helper.getNonPrimitiveLanguageTypeNameForField(field)}> ${field.name} = new LinkedList<>();
             while(!((boolean) (${helper.toParseExpression(field, field.loopExpression, type.parserArguments)}))) {
-                ${field.name}.add(<#if helper.isSimpleTypeReference(field.type)>${helper.getReadBufferReadMethodCall(field.type, "", field)}<#else>${field.type.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(field.type, parserArgument?index), true)}) (${helper.toParseExpression(field, parserArgument, type.parserArguments)})<#sep>, </#sep></#list></#if>)</#if>);
+                ${field.name}.add(<#if helper.isSimpleTypeReference(field.type)>${helper.getReadBufferReadMethodCall(field.type, "", field)}<#else>${field.type.name}IO.staticParse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(field.type, parserArgument?index), true)}) (${helper.toParseExpression(field, parserArgument, type.parserArguments)})<#sep>, </#sep></#list></#if>)</#if>);
 
                 <#-- After parsing, update the current position, but only if it's needed -->
                                 <#if field.loopExpression.contains("curPos")>
-                curPos = io.getPos() - startPos;
+                curPos = readBuffer.getPos() - startPos;
                                 </#if>
             }
                             </#if>
@@ -202,7 +202,7 @@ public class ${type.name}IO {
             ${helper.getNonPrimitiveLanguageTypeNameForField(field)} ${field.name} = ${helper.getNonPrimitiveLanguageTypeNameForField(field)}.enumForValue(${helper.getReadBufferReadMethodCall(helper.getEnumBaseTypeReference(field.type), "", field)});
                         <#else>
             // Simple Field (${field.name})
-            ${helper.getNonPrimitiveLanguageTypeNameForField(field)} ${field.name} = <#if helper.isSimpleTypeReference(field.type)>${helper.getReadBufferReadMethodCall(field.type, "", field)}<#else>${field.type.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(field.type, parserArgument?index), true)}) (${helper.toParseExpression(field, parserArgument, type.parserArguments)})<#s [...]
+            ${helper.getNonPrimitiveLanguageTypeNameForField(field)} ${field.name} = <#if helper.isSimpleTypeReference(field.type)>${helper.getReadBufferReadMethodCall(field.type, "", field)}<#else>${field.type.name}IO.staticParse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(field.type, parserArgument?index), true)}) (${helper.toParseExpression(field, parserArgument, type.parserArgumen [...]
                         </#if>
                         <#if case.name == "Struct" ||
                             ((case.name == "DATE_AND_TIME") && ((field.name == "year") || (field.name == "month") || (field.name == "day") || (field.name == "hour") || (field.name == "minutes") || (field.name == "seconds"))) ||
@@ -322,7 +322,7 @@ public class ${type.name}IO {
     public static WriteBufferByteBased staticSerialize(PlcValue _value<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${helper.getLanguageTypeNameForTypeReference(parserArgument.type, false)} ${parserArgument.name}<#sep>, </#sep></#list></#if>, boolean littleEndian) throws ParseException {
         <#assign defaultCaseOutput=false>
         <#list type.switchField.cases as case><#if case.discriminatorValues?has_content>if(<#list case.discriminatorValues as discriminatorValue>EvaluationHelper.equals(${helper.toParseExpression(null, type.switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)},<#if helper.discriminatorValueNeedsStringEqualityCheck(type.switchField.discriminatorExpressions[discriminatorValue?index])>"${discriminatorValue}"<#elseif helper.isComplexTypeReference(type.parserA [...]
-        WriteBufferByteBased io = new WriteBufferByteBased((int) Math.ceil(((float) ${helper.getSizeInBits(case, type.parserArguments)}) / 8.0f), littleEndian);
+        WriteBufferByteBased writeBuffer = new WriteBufferByteBased((int) Math.ceil(((float) ${helper.getSizeInBits(case, type.parserArguments)}) / 8.0f), littleEndian);
 
             <#list case.fields as field>
                 <#switch field.typeName>
@@ -342,8 +342,8 @@ public class ${type.name}IO {
                         </#if>
 
                     <#if case.name == "BOOL">
-            while (io.getPos() < io.getData().length) {
-                io.writeBit(false);
+            while (writeBuffer.getPos() < writeBuffer.getData().length) {
+                writeBuffer.writeBit(false);
             }
                     </#if>
                     <#break>
@@ -379,12 +379,12 @@ public class ${type.name}IO {
                         <#if helper.isSimpleTypeReference(field.type)>
             ${helper.getWriteBufferWriteMethodCall(field.type, "(" + field.name + ")", field)};
                         <#else>
-            ${field.type.name}IO.staticSerialize(io, ${field.name});
+            ${field.type.name}IO.staticSerialize(writeBuffer, ${field.name});
                         </#if>
                     <#break>
                 </#switch>
             </#list>
-            return io;
+            return writeBuffer;
         }<#sep> else </#sep></#list>
         <#if !defaultCaseOutput>
         return null;
diff --git a/build-utils/language-java/src/main/resources/templates/java/io-template.java.ftlh b/build-utils/language-java/src/main/resources/templates/java/io-template.java.ftlh
index 7048753..7f09b31 100644
--- a/build-utils/language-java/src/main/resources/templates/java/io-template.java.ftlh
+++ b/build-utils/language-java/src/main/resources/templates/java/io-template.java.ftlh
@@ -91,7 +91,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
 <#-- The parse and serialize methods here are just proxies for forwardning the requests to static counterparts -->
 <#if !helper.isDiscriminatedChildTypeDefinition()>
     @Override
-    public ${type.name} parse(ReadBuffer io, Object... args) throws ParseException {
+    public ${type.name} parse(ReadBuffer readBuffer, Object... args) throws ParseException {
         <#if type.parserArguments?has_content>
         if((args == null) || (args.length != ${type.parserArguments?size})) {
             throw new PlcRuntimeException("Wrong number of arguments, expected ${type.parserArguments?size}, but got " + args.length);
@@ -109,12 +109,12 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         }
         </#list>
         </#if>
-        return ${type.name}IO.staticParse(io<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>);
+        return ${type.name}IO.staticParse(readBuffer<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>);
     }
 
     <#if outputFlavor != "passive">
     @Override
-    public void serialize(WriteBuffer io, ${type.name} value, Object... args) throws ParseException {
+    public void serialize(WriteBuffer writeBuffer, ${type.name} value, Object... args) throws ParseException {
         <#if helper.getSerializerArguments(type.parserArguments)?has_content>
         if((args == null) || (args.length != ${type.parserArguments?size})) {
             throw new PlcRuntimeException("Wrong number of arguments, expected ${type.parserArguments?size}, but got " + args.length);
@@ -126,28 +126,28 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         ${helper.getLanguageTypeNameForTypeReference(serializerArgument.type, false)} ${serializerArgument.name} = (${helper.getLanguageTypeNameForTypeReference(serializerArgument.type, false)}) args[${serializerArgument?index}];
         </#list>
         </#if>
-        ${type.name}IO.staticSerialize(io, value<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>);
+        ${type.name}IO.staticSerialize(writeBuffer, value<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>);
     }
 
     </#if>
 <#else>
     @Override
-    public ${type.name} parse(ReadBuffer io, Object... args) throws ParseException {
-        return (${type.name}) new ${type.parentType.name}IO().parse(io, args);
+    public ${type.name} parse(ReadBuffer readBuffer, Object... args) throws ParseException {
+        return (${type.name}) new ${type.parentType.name}IO().parse(readBuffer, args);
     }
 
 <#if outputFlavor != "passive">
     @Override
-    public void serialize(WriteBuffer io, ${type.name} value, Object... args) throws ParseException {
-        new ${type.parentType.name}IO().serialize(io, value, args);
+    public void serialize(WriteBuffer writeBuffer, ${type.name} value, Object... args) throws ParseException {
+        new ${type.parentType.name}IO().serialize(writeBuffer, value, args);
     }
 
 </#if>
 </#if>
 <#-- Here come the actual parse and serialize methods that actually do the parsing and serlaizing -->
-    public static ${type.name}<#if helper.isDiscriminatedChildTypeDefinition()>Builder</#if> staticParse(ReadBuffer io<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${helper.getLanguageTypeNameForTypeReference(parserArgument.type, false)} ${parserArgument.name}<#sep>, </#sep></#list></#if>) throws ParseException {
-        io.pullContext("${type.name}");
-        int startPos = io.getPos();
+    public static ${type.name}<#if helper.isDiscriminatedChildTypeDefinition()>Builder</#if> staticParse(ReadBuffer readBuffer<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${helper.getLanguageTypeNameForTypeReference(parserArgument.type, false)} ${parserArgument.name}<#sep>, </#sep></#list></#if>) throws ParseException {
+        readBuffer.pullContext("${type.name}");
+        int startPos = readBuffer.getPos();
         int curPos;
 <#list type.fields as field>
 <#switch field.typeName>
@@ -171,13 +171,13 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
                 </#compress>
             </#assign>
         ${numberOfBytesExpression}
-        byte[] ${arrayField.name} = io.readByteArray("${arrayField.name}", numberOfBytes);
+        byte[] ${arrayField.name} = readBuffer.readByteArray("${arrayField.name}", numberOfBytes);
         <#else>
         // Array field (${arrayField.name})
-        io.pullContext("${arrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
+        readBuffer.pullContext("${arrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
             <#-- Only update curPos if the length expression uses it -->
             <#if arrayField.loopExpression.contains("curPos")>
-        curPos = io.getPos() - startPos;
+        curPos = readBuffer.getPos() - startPos;
             </#if>
         <#-- If this is a count array, we can directly initialize an array with the given size -->
             <#if helper.isCountArrayField(field)>
@@ -192,7 +192,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
             for(int curItem = 0; curItem < itemCount; curItem++) {
                 <#-- When parsing simple types, there is nothing that could require the "lastItem" -->
                 <#if !helper.isSimpleTypeReference(arrayField.type)>boolean lastItem = curItem == (itemCount - 1);</#if>
-                ${arrayField.name}[curItem] = <#if helper.isSimpleTypeReference(arrayField.type)><#assign simpleTypeReference = arrayField.type>${helper.getReadBufferReadMethodCall("", simpleTypeReference, "", arrayField)}<#else>${arrayField.type.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(arrayField.type, parserArgument?index), true)}) (${helper.toParseExpression(arrayFie [...]
+                ${arrayField.name}[curItem] = <#if helper.isSimpleTypeReference(arrayField.type)><#assign simpleTypeReference = arrayField.type>${helper.getReadBufferReadMethodCall("", simpleTypeReference, "", arrayField)}<#else>${arrayField.type.name}IO.staticParse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(arrayField.type, parserArgument?index), true)}) (${helper.toParseExpression( [...]
             }
         }
         <#-- In all other cases do we have to work with a list, that is later converted to an array -->
@@ -202,12 +202,12 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         // Length array
         int _${arrayField.name}Length = ${helper.toParseExpression(arrayField, arrayField.loopExpression, type.parserArguments)};
         List<${helper.getNonPrimitiveLanguageTypeNameForField(arrayField)}> _${arrayField.name}List = new LinkedList<>();
-        int ${arrayField.name}EndPos = io.getPos() + _${arrayField.name}Length;
-        while(io.getPos() < ${arrayField.name}EndPos) {
-            _${arrayField.name}List.add(<#if helper.isSimpleTypeReference(arrayField.type)><#assign simpleTypeReference = arrayField.type>${helper.getReadBufferReadMethodCall("", simpleTypeReference, "", arrayField)}<#else>${arrayField.type.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(arrayField.type, parserArgument?index), true)}) (${helper.toParseExpression(arrayField, pa [...]
+        int ${arrayField.name}EndPos = readBuffer.getPos() + _${arrayField.name}Length;
+        while(readBuffer.getPos() < ${arrayField.name}EndPos) {
+            _${arrayField.name}List.add(<#if helper.isSimpleTypeReference(arrayField.type)><#assign simpleTypeReference = arrayField.type>${helper.getReadBufferReadMethodCall("", simpleTypeReference, "", arrayField)}<#else>${arrayField.type.name}IO.staticParse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(arrayField.type, parserArgument?index), true)}) (${helper.toParseExpression(arrayF [...]
             <#-- After parsing, update the current position, but only if it's needed -->
                 <#if arrayField.loopExpression.contains("curPos")>
-            curPos = io.getPos() - startPos;
+            curPos = readBuffer.getPos() - startPos;
                 </#if>
         }
             <#-- A terminated array keeps on reading data as long as the termination expression evaluates to false -->
@@ -215,11 +215,11 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         // Terminated array
         List<${helper.getNonPrimitiveLanguageTypeNameForField(arrayField)}> _${arrayField.name}List = new LinkedList<>();
         while(!((boolean) (${helper.toParseExpression(arrayField, arrayField.loopExpression, type.parserArguments)}))) {
-            _${arrayField.name}List.add(<#if helper.isSimpleTypeReference(arrayField.type)><#assign simpleTypeReference = arrayField.type>${helper.getReadBufferReadMethodCall("", simpleTypeReference, "", arrayField)}<#else>${arrayField.type.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(arrayField.type, parserArgument?index), true)}) (${helper.toParseExpression(arrayField, pa [...]
+            _${arrayField.name}List.add(<#if helper.isSimpleTypeReference(arrayField.type)><#assign simpleTypeReference = arrayField.type>${helper.getReadBufferReadMethodCall("", simpleTypeReference, "", arrayField)}<#else>${arrayField.type.name}IO.staticParse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(arrayField.type, parserArgument?index), true)}) (${helper.toParseExpression(arrayF [...]
 
             <#-- After parsing, update the current position, but only if it's needed -->
                 <#if arrayField.loopExpression.contains("curPos")>
-            curPos = io.getPos() - startPos;
+            curPos = readBuffer.getPos() - startPos;
                 </#if>
         }
                 </#if>
@@ -237,7 +237,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         ${helper.getLanguageTypeNameForField(field)}[] ${arrayField.name} = _${arrayField.name}List.toArray(new ${helper.getNonPrimitiveLanguageTypeNameForField(arrayField)}[0]);
                 </#if>
             </#if>
-        io.closeContext("${arrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
+            readBuffer.closeContext("${arrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
         </#if>
         <#break>
     <#case "checksum">
@@ -272,21 +272,21 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         <#if helper.isEnumField(field)>
         ${helper.getLanguageTypeNameForField(field)} ${discriminatorField.name} = ${helper.getLanguageTypeNameForField(discriminatorField)}.enumForValue(${helper.getReadBufferReadMethodCall(discriminatorField.name, helper.getEnumBaseTypeReference(discriminatorField.type), "", discriminatorField)});
         <#else>
-        ${helper.getLanguageTypeNameForField(field)} ${discriminatorField.name} = <#if helper.isSimpleTypeReference(discriminatorField.type)>${helper.getReadBufferReadMethodCall(discriminatorField.name, discriminatorField.type, "", discriminatorField)}<#else>${discriminatorField.type.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(discriminatorField.type, parserArgument?index) [...]
+        ${helper.getLanguageTypeNameForField(field)} ${discriminatorField.name} = <#if helper.isSimpleTypeReference(discriminatorField.type)>${helper.getReadBufferReadMethodCall(discriminatorField.name, discriminatorField.type, "", discriminatorField)}<#else>${discriminatorField.type.name}IO.staticParse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(discriminatorField.type, parserArgumen [...]
         </#if>
 
         <#break>
     <#case "enum">
         <#assign enumField = field>
 
-        io.pullContext("${enumField.name}");
+        readBuffer.pullContext("${enumField.name}");
         // Enum field (${enumField.name})
         <#if enumField.fieldName?has_content>
         ${helper.getLanguageTypeNameForField(field)} ${enumField.name} = ${helper.getLanguageTypeNameForField(field)}.firstEnumForField${enumField.fieldName?cap_first}(${helper.getReadBufferReadMethodCall(helper.getTypeDefinitionForTypeReference(enumField.type).name, helper.getEnumBaseTypeReference(enumField.type), "", enumField)});
         <#else>
         ${helper.getLanguageTypeNameForField(field)} ${enumField.name} = ${helper.getLanguageTypeNameForField(field)}.enumForValue(${helper.getReadBufferReadMethodCall(helper.getTypeDefinitionForTypeReference(enumField.type).name, helper.getEnumBaseTypeReference(enumField.type), "", enumField)});
         </#if>
-        io.closeContext("${enumField.name}");
+        readBuffer.closeContext("${enumField.name}");
         <#break>
     <#case "implicit">
         <#assign implicitField = field>
@@ -298,11 +298,11 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
     <#case "manualArray">
         <#assign manualArrayField = field>
 
-        io.pullContext("${manualArrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
+        readBuffer.pullContext("${manualArrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
         // Manual Array Field (${manualArrayField.name})
         <#-- Only update curPos if the length expression uses it -->
         <#if manualArrayField.loopExpression.contains("curPos")>
-        curPos = io.getPos() - startPos;
+        curPos = readBuffer.getPos() - startPos;
         </#if>
         <#-- If this is a count array, we can directly initialize an array with the given size -->
         <#if helper.isCountArrayField(field)>
@@ -319,12 +319,12 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         // Length array
         int _${manualArrayField.name}Length = ${helper.toParseExpression(manualArrayField, manualArrayField.loopExpression, type.parserArguments)};
         List<${helper.getNonPrimitiveLanguageTypeNameForField(manualArrayField)}> _${manualArrayField.name}List = new LinkedList<>();
-        int ${manualArrayField.name}EndPos = io.getPos() + _${manualArrayField.name}Length;
-        while(io.getPos() < ${manualArrayField.name}EndPos) {
+        int ${manualArrayField.name}EndPos = readBuffer.getPos() + _${manualArrayField.name}Length;
+        while(readBuffer.getPos() < ${manualArrayField.name}EndPos) {
             _${manualArrayField.name}List.add((${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(manualArrayField, manualArrayField.parseExpression, type.parserArguments)}));
             <#-- After parsing, update the current position, but only if it's needed -->
             <#if manualArrayField.loopExpression.contains("curPos")>
-            curPos = io.getPos() - startPos;
+            curPos = readBuffer.getPos() - startPos;
             </#if>
         }
             <#-- A terminated array keeps on reading data as long as the termination expression evaluates to false -->
@@ -336,7 +336,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
 
             <#-- After parsing, update the current position, but only if it's needed -->
             <#if manualArrayField.loopExpression.contains("curPos")>
-            curPos = io.getPos() - startPos;
+            curPos = readBuffer.getPos() - startPos;
             </#if>
         }
             </#if>
@@ -354,7 +354,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         ${helper.getLanguageTypeNameForField(field)}[] ${manualArrayField.name} = _${manualArrayField.name}List.toArray(new ${helper.getNonPrimitiveLanguageTypeNameForField(manualArrayField)}[0]);
             </#if>
         </#if>
-        io.closeContext("${manualArrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
+        readBuffer.closeContext("${manualArrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
         <#break>
     <#case "manual">
         <#assign manualField = field>
@@ -367,14 +367,14 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
 
         // Optional Field (${optionalField.name}) (Can be skipped, if a given expression evaluates to false)
         <#if optionalField.conditionExpression.contains("curPos")>
-        curPos = io.getPos() - startPos;
+        curPos = readBuffer.getPos() - startPos;
         </#if>
         ${helper.getLanguageTypeNameForField(field)} ${optionalField.name} = null;
         if(${helper.toParseExpression(optionalField, optionalField.conditionExpression, type.parserArguments)}) {
             <#if helper.isEnumField(field)>
             ${optionalField.name} = ${helper.getLanguageTypeNameForField(optionalField)}.enumForValue(${helper.getReadBufferReadMethodCall(optionalField.name, helper.getEnumBaseTypeReference(optionalField.type), "", optionalField)});
             <#else>
-            ${optionalField.name} = <#if helper.isSimpleTypeReference(optionalField.type)>${helper.getReadBufferReadMethodCall(optionalField.name, optionalField.type, "", optionalField)}<#else>${optionalField.type.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(optionalField.type, parserArgument?index), true)}) (${helper.toParseExpression(optionalField, parserArgument, type.pa [...]
+            ${optionalField.name} = <#if helper.isSimpleTypeReference(optionalField.type)>${helper.getReadBufferReadMethodCall(optionalField.name, optionalField.type, "", optionalField)}<#else>${optionalField.type.name}IO.staticParse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(optionalField.type, parserArgument?index), true)}) (${helper.toParseExpression(optionalField, parserArgument, [...]
             </#if>
         }
         <#break>
@@ -384,13 +384,13 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
 
         // Padding Field (padding)
         {
-            io.pullContext("padding", WithReaderWriterArgs.WithRenderAsList(true));
+            readBuffer.pullContext("padding", WithReaderWriterArgs.WithRenderAsList(true));
             int _timesPadding = (int) (${helper.toParseExpression(paddingField, paddingField.paddingCondition, type.parserArguments)});
-            while ((io.hasMore(${helper.getNumBits(simpleTypeReference)})) && (_timesPadding-- > 0)) {
+            while ((readBuffer.hasMore(${helper.getNumBits(simpleTypeReference)})) && (_timesPadding-- > 0)) {
                 // Just read the padding data and ignore it
                 ${helper.getReadBufferReadMethodCall(simpleTypeReference, "", paddingField)};
             }
-            io.closeContext("padding", WithReaderWriterArgs.WithRenderAsList(true));
+            readBuffer.closeContext("padding", WithReaderWriterArgs.WithRenderAsList(true));
         }
         <#break>
     <#case "reserved">
@@ -409,7 +409,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         <#assign simpleField = field>
 
         <#if !helper.isSimpleTypeReference(simpleField.type)>
-        io.pullContext("${simpleField.name}");
+        readBuffer.pullContext("${simpleField.name}");
         </#if>
 
         // Simple Field (${simpleField.name})
@@ -418,10 +418,10 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         ${helper.getLanguageTypeNameForField(simpleField)} ${simpleField.name} = ${helper.getLanguageTypeNameForField(simpleField)}.enumForValue(${helper.getReadBufferReadMethodCall(simpleField.type.name, helper.getEnumBaseTypeReference(simpleField.type), "", simpleField)});
         <#else>
         <#assign simpleFieldLogicalName><#if helper.isSimpleTypeReference(simpleField.type)>${simpleField.name}<#else>${simpleField.typeName}</#if></#assign>
-        ${helper.getLanguageTypeNameForField(simpleField)} ${simpleField.name} = <#if helper.isSimpleTypeReference(simpleField.type)><#assign simpleTypeReference = simpleField.type>${helper.getReadBufferReadMethodCall(simpleFieldLogicalName, simpleTypeReference, "", simpleField)}<#else><#assign complexTypeReference = simpleField.type>${complexTypeReference.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeRefer [...]
+        ${helper.getLanguageTypeNameForField(simpleField)} ${simpleField.name} = <#if helper.isSimpleTypeReference(simpleField.type)><#assign simpleTypeReference = simpleField.type>${helper.getReadBufferReadMethodCall(simpleFieldLogicalName, simpleTypeReference, "", simpleField)}<#else><#assign complexTypeReference = simpleField.type>${complexTypeReference.name}IO.staticParse(readBuffer<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForT [...]
         </#if>
         <#if !helper.isSimpleTypeReference(simpleField.type)>
-        io.closeContext("${simpleField.name}");
+        readBuffer.closeContext("${simpleField.name}");
         </#if>
         <#break>
     <#case "switch">
@@ -431,7 +431,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         ${type.name}Builder builder = null;
         <#list switchField.cases as case>
                 <#if case.discriminatorValues?has_content>if(<#list case.discriminatorValues as discriminatorValue>EvaluationHelper.equals(${helper.toParseExpression(null, switchField.discriminatorExpressions[discriminatorValue?index], type.parserArguments)}, <#if helper.discriminatorValueNeedsStringEqualityCheck(switchField.discriminatorExpressions[discriminatorValue?index])>"${discriminatorValue}"<#elseif helper.isComplexTypeReference(helper.getDiscriminatorTypes()[field.discriminatorE [...]
-            builder = ${case.name}IO.staticParse(io<#if case.parserArguments?has_content>, <#list case.parserArguments as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>);
+            builder = ${case.name}IO.staticParse(readBuffer<#if case.parserArguments?has_content>, <#list case.parserArguments as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>);
         }<#sep> else </#sep>
         </#list>
         if (builder == null) {
@@ -452,7 +452,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
 </#switch>
 </#list>
 
-        io.closeContext("${type.name}");
+        readBuffer.closeContext("${type.name}");
         // Create the instance
         <#if helper.isDiscriminatedChildTypeDefinition()>
         return new ${type.name}Builder(<#list type.propertyFields as field>${field.name}<#sep>, </#sep></#list>);
@@ -464,9 +464,9 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
     }
 
 <#if outputFlavor != "passive">
-    public static void staticSerialize(WriteBuffer io, ${type.name} _value<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${helper.getLanguageTypeNameForTypeReference(parserArgument.type, false)} ${parserArgument.name}<#sep>, </#sep></#list></#if>) throws ParseException {
-        int startPos = io.getPos();
-        io.pushContext("${type.name}");
+    public static void staticSerialize(WriteBuffer writeBuffer, ${type.name} _value<#if helper.getSerializerArguments(type.parserArguments)?has_content>, <#list helper.getSerializerArguments(type.parserArguments) as parserArgument>${helper.getLanguageTypeNameForTypeReference(parserArgument.type, false)} ${parserArgument.name}<#sep>, </#sep></#list></#if>) throws ParseException {
+        int startPos = writeBuffer.getPos();
+        writeBuffer.pushContext("${type.name}");
 <#list type.fields as field>
 <#switch field.typeName>
     <#case "array">
@@ -477,9 +477,9 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         if(_value.get${arrayField.name?cap_first}() != null) {
             <#if helper.isByteBased(arrayField.type)>
             // Byte Array field (${arrayField.name})
-            io.writeByteArray("${arrayField.name}", _value.get${arrayField.name?cap_first}());
+            writeBuffer.writeByteArray("${arrayField.name}", _value.get${arrayField.name?cap_first}());
             <#else>
-            io.pushContext("${arrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
+            writeBuffer.pushContext("${arrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
             int itemCount = (int) _value.get${arrayField.name?cap_first}().length;
             int curItem = 0;
             for(${helper.getLanguageTypeNameForField(field)} element : _value.get${arrayField.name?cap_first}()) {
@@ -489,11 +489,11 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
                     <#else>
                         <#assign complexTypeReference = arrayField.type>
                 boolean lastItem = curItem == (itemCount - 1);
-                ${complexTypeReference.name}IO.staticSerialize(io, element<#if helper.getSerializerTerms(field.params)?has_content>, <#list helper.getSerializerTerms(field.params) as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>);
+                ${complexTypeReference.name}IO.staticSerialize(writeBuffer, element<#if helper.getSerializerTerms(field.params)?has_content>, <#list helper.getSerializerTerms(field.params) as parserArgument>${parserArgument.name}<#sep>, </#sep></#list></#if>);
                     </#if>
                 curItem++;
             }
-            io.popContext("${arrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
+            writeBuffer.popContext("${arrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
             </#if>
         }
         <#break>
@@ -531,14 +531,14 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
             <#if helper.isEnumField(field)>
                 ${helper.getWriteBufferWriteMethodCall(discriminatorField.name, helper.getEnumBaseTypeReference(discriminatorField.type), "(" + discriminatorField.name + ".getValue())", field)};
             <#else>
-                ${complexTypeReference.name}IO.staticSerialize(io, ${discriminatorField.name});
+                ${complexTypeReference.name}IO.staticSerialize(writeBuffer, ${discriminatorField.name});
             </#if>
         </#if>
         <#break>
     <#case "enum">
         <#assign enumField = field>
 
-        io.pushContext("${enumField.name}");
+        writeBuffer.pushContext("${enumField.name}");
         // Enum field (${enumField.name})
         ${helper.getLanguageTypeNameForField(field)} ${enumField.name} = (${helper.getLanguageTypeNameForField(field)}) _value.get${enumField.name?cap_first}();
         <#if enumField.fieldName?has_content>
@@ -546,7 +546,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         <#else>
         ${helper.getWriteBufferWriteMethodCall(helper.getTypeDefinitionForTypeReference(enumField.type).name, helper.getEnumBaseTypeReference(enumField.type), "(" + enumField.name + ".getValue())", field, "WithReaderWriterArgs.WithAdditionalStringRepresentation(${enumField.name}.name())")};
         </#if>
-        io.popContext("${enumField.name}");
+        writeBuffer.popContext("${enumField.name}");
         <#break>
     <#case "implicit">
         <#assign implicitField = field>
@@ -561,11 +561,11 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
 
         // Manual Array Field (${manualArrayField.name})
         if(_value.get${manualArrayField.name?cap_first}() != null) {
-            io.pushContext("${manualArrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
+            writeBuffer.pushContext("${manualArrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
             for(${helper.getLanguageTypeNameForField(field)} element : _value.get${manualArrayField.name?cap_first}()) {
                 ${helper.toSerializationExpression(manualArrayField, manualArrayField.serializeExpression, type.parserArguments)};
             }
-            io.popContext("${manualArrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
+            writeBuffer.popContext("${manualArrayField.name}", WithReaderWriterArgs.WithRenderAsList(true));
         }
         <#break>
     <#case "manual">
@@ -589,7 +589,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
                 <#if helper.isEnumField(field)>
             ${helper.getWriteBufferWriteMethodCall(optionalField.name, helper.getEnumBaseTypeReference(optionalField.type), "(" + optionalField.name + ".getValue())", field)};
                 <#else>
-            ${complexTypeReference.name}IO.staticSerialize(io, ${optionalField.name});
+            ${complexTypeReference.name}IO.staticSerialize(writeBuffer, ${optionalField.name});
                 </#if>
             </#if>
         }
@@ -600,13 +600,13 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
 
         // Padding Field (padding)
         {
-            io.pushContext("padding", WithReaderWriterArgs.WithRenderAsList(true));
+            writeBuffer.pushContext("padding", WithReaderWriterArgs.WithRenderAsList(true));
             int _timesPadding = (int) (${helper.toSerializationExpression(paddingField, paddingField.paddingCondition, type.parserArguments)});
             while (_timesPadding-- > 0) {
                 ${helper.getLanguageTypeNameForField(field)} _paddingValue = (${helper.getLanguageTypeNameForField(field)}) (${helper.toSerializationExpression(paddingField, paddingField.paddingValue, type.parserArguments)});
                 ${helper.getWriteBufferWriteMethodCall("", simpleTypeReference, "(_paddingValue)", field)};
             }
-            io.popContext("padding", WithReaderWriterArgs.WithRenderAsList(true));
+            writeBuffer.popContext("padding", WithReaderWriterArgs.WithRenderAsList(true));
         }
         <#break>
     <#case "reserved">
@@ -630,15 +630,15 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         ${helper.getWriteBufferWriteMethodCall(simpleField.name, simpleTypeReference, "(" + simpleField.name + ")", simpleField)};
             </#if>
         <#else>
-        io.pushContext("${simpleField.name}");
+        writeBuffer.pushContext("${simpleField.name}");
             <#assign complexTypeReference = simpleField.type>
             <#if helper.isEnumField(field)>
         // enum field with type ${simpleField.type.name}
         ${helper.getWriteBufferWriteMethodCall(simpleField.type.name, helper.getEnumBaseTypeReference(simpleField.type), "(" + simpleField.name + ".getValue())", simpleField, "WithReaderWriterArgs.WithAdditionalStringRepresentation(${simpleField.name}.name())")};
             <#else>
-        ${complexTypeReference.name}IO.staticSerialize(io, ${simpleField.name});
+        ${complexTypeReference.name}IO.staticSerialize(writeBuffer, ${simpleField.name});
             </#if>
-        io.popContext("${simpleField.name}");
+        writeBuffer.popContext("${simpleField.name}");
         </#if>
         <#break>
     <#case "switch">
@@ -647,7 +647,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         // Switch field (Depending on the discriminator values, passes the instantiation to a sub-type)
         <#list switchField.cases as case>
         if(_value instanceof ${case.name}) {
-            ${case.name}IO.staticSerialize(io, (${case.name}) _value);
+            ${case.name}IO.staticSerialize(writeBuffer, (${case.name}) _value);
         }<#sep> else </#sep>
         </#list>
         <#break>
@@ -655,7 +655,7 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
         <#break>
 </#switch>
 </#list>
-        io.popContext("${type.name}");
+        writeBuffer.popContext("${type.name}");
     }
 </#if>
 
diff --git a/build-utils/language-java/src/main/resources/templates/java/pojo-template.java.ftlh b/build-utils/language-java/src/main/resources/templates/java/pojo-template.java.ftlh
index 3ff8cdb..589632f 100644
--- a/build-utils/language-java/src/main/resources/templates/java/pojo-template.java.ftlh
+++ b/build-utils/language-java/src/main/resources/templates/java/pojo-template.java.ftlh
@@ -68,7 +68,6 @@ import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
 import ${helper.packageName(protocolName, languageName, outputFlavor)}.io.*;
 import ${helper.packageName(protocolName, languageName, outputFlavor)}.types.*;
 
-import com.fasterxml.jackson.annotation.*;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import org.apache.plc4x.java.api.value.*;
@@ -81,7 +80,6 @@ import java.math.BigInteger;
 
 // Code generated by build-utils. DO NOT EDIT.
 
-@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public<#if helper.isDiscriminatedParentTypeDefinition()> abstract</#if> class ${type.name}<#if type.parentType??> extends ${type.parentType.name}</#if> implements Message {
 
 <#--
@@ -95,7 +93,6 @@ public<#if helper.isDiscriminatedParentTypeDefinition()> abstract</#if> class ${
     <#list helper.getDiscriminatorValues(discriminatedChildType) as discriminatorName, discriminatorValue>
         <#-- If the discriminator name matches that of another field, suppress the methods generation -->
         <#if !helper.isNonDiscriminatorField(discriminatorName)>
-    @JsonIgnore
     public ${helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])} get${discriminatorName?cap_first}() {
             <#if !helper.isComplexTypeReference(helper.getDiscriminatorTypes()[discriminatorName])>
         return <#if helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName]) = "String"><#if discriminatorValue??>"${discriminatorValue}"<#else>${helper.getNullValueForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])}</#if><#else><#if discriminatorValue??>${helper.adjustLiterals(helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName]),discriminatorValue)}<#else>${helper.getNullValueForTypeReference( [...]
@@ -138,9 +135,8 @@ public<#if helper.isDiscriminatedParentTypeDefinition()> abstract</#if> class ${
 </#list>
 </#if>
 
-    @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
     <#-- getAllPropertyFields() returns not only the property fields of this type but also of it's parents -->
-    public ${type.name}(<#list type.getAllPropertyFields() as field>@JsonProperty("${field.name}") ${helper.getLanguageTypeNameForField(field)}<#if field.loopType??>[]</#if> ${field.name}<#sep>, </#sep></#list>) {
+    public ${type.name}(<#list type.getAllPropertyFields() as field>${helper.getLanguageTypeNameForField(field)}<#if field.loopType??>[]</#if> ${field.name}<#sep>, </#sep></#list>) {
 <#if type.getParentPropertyFields()?has_content>
         super(<#list type.getParentPropertyFields() as field>${field.name}<#sep>, </#sep></#list>);
 </#if>
@@ -170,13 +166,11 @@ public<#if helper.isDiscriminatedParentTypeDefinition()> abstract</#if> class ${
 
 </#list>
     @Override
-    @JsonIgnore
     public int getLengthInBytes() {
         return getLengthInBits() / 8;
     }
 
     @Override
-    @JsonIgnore
     public int getLengthInBits() {
         return getLengthInBitsConditional(false);
     }
@@ -338,7 +332,6 @@ public<#if helper.isDiscriminatedParentTypeDefinition()> abstract</#if> class ${
     }
 
     @Override
-    @JsonIgnore
     public MessageIO<<#if type.parentType??>${type.parentType.name}<#else>${type.name}</#if>, <#if type.parentType??>${type.parentType.name}<#else>${type.name}</#if>> getMessageIO() {
         return new <#if type.parentType??>${type.parentType.name}<#else>${type.name}</#if>IO();
     }
diff --git a/plc4go/internal/plc4go/abeth/readwrite/XmlParserHelper.go b/plc4go/internal/plc4go/abeth/readwrite/XmlParserHelper.go
index 48edd0d..e0a0a0c 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/XmlParserHelper.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/XmlParserHelper.go
@@ -20,7 +20,6 @@
 package readwrite
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/abeth/readwrite/model"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
@@ -38,54 +37,26 @@ func init() {
 	_ = strconv.Atoi
 	_ = strings.Join
 	_ = utils.Dump
-	_ = xml.NewDecoder
 }
 
 func (m AbethXmlParserHelper) Parse(typeName string, xmlString string, parserArguments ...string) (interface{}, error) {
 	switch typeName {
 	case "DF1RequestCommand":
+		// TODO: implement class org.apache.plc4x.plugins.codegenerator.language.mspec.model.definitions.DefaultComplexTypeDefinition
+		_ = model.NewDF1RequestCommand
 		return nil, errors.New("DF1RequestCommand unmappable")
 	case "DF1RequestMessage":
+		// TODO: implement class org.apache.plc4x.plugins.codegenerator.language.mspec.model.definitions.DefaultComplexTypeDefinition
+		_ = model.NewDF1RequestMessage
 		return nil, errors.New("DF1RequestMessage unmappable")
 	case "DF1ResponseMessage":
+		// TODO: implement class org.apache.plc4x.plugins.codegenerator.language.mspec.model.definitions.DefaultComplexTypeDefinition
+		_ = model.NewDF1ResponseMessage
 		return nil, errors.New("DF1ResponseMessage unmappable")
 	case "CIPEncapsulationPacket":
+		// TODO: implement class org.apache.plc4x.plugins.codegenerator.language.mspec.model.definitions.DefaultComplexTypeDefinition
+		_ = model.NewCIPEncapsulationPacket
 		return nil, errors.New("CIPEncapsulationPacket unmappable")
 	}
 	return nil, errors.Errorf("Unsupported type %s", typeName)
 }
-
-// Deprecated: will be removed in favor of Parse soon
-func (m AbethXmlParserHelper) ParseOld(typeName string, xmlString string) (interface{}, error) {
-	switch typeName {
-	case "DF1RequestCommand":
-		var obj *model.DF1RequestCommand
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "DF1RequestMessage":
-		var obj *model.DF1RequestMessage
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "DF1ResponseMessage":
-		var obj *model.DF1ResponseMessage
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "CIPEncapsulationPacket":
-		var obj *model.CIPEncapsulationPacket
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	}
-	return nil, errors.Errorf("Unsupported type %s", typeName)
-}
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionRequest.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionRequest.go
index 527bb2d..999dc03 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionRequest.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionRequest.go
@@ -20,9 +20,7 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -36,9 +34,7 @@ type CIPEncapsulationConnectionRequest struct {
 type ICIPEncapsulationConnectionRequest interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -100,12 +96,12 @@ func (m *CIPEncapsulationConnectionRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func CIPEncapsulationConnectionRequestParse(io utils.ReadBuffer) (*CIPEncapsulationPacket, error) {
-	if pullErr := io.PullContext("CIPEncapsulationConnectionRequest"); pullErr != nil {
+func CIPEncapsulationConnectionRequestParse(readBuffer utils.ReadBuffer) (*CIPEncapsulationPacket, error) {
+	if pullErr := readBuffer.PullContext("CIPEncapsulationConnectionRequest"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if closeErr := io.CloseContext("CIPEncapsulationConnectionRequest"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("CIPEncapsulationConnectionRequest"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -117,62 +113,16 @@ func CIPEncapsulationConnectionRequestParse(io utils.ReadBuffer) (*CIPEncapsulat
 	return _child.Parent, nil
 }
 
-func (m *CIPEncapsulationConnectionRequest) Serialize(io utils.WriteBuffer) error {
+func (m *CIPEncapsulationConnectionRequest) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("CIPEncapsulationConnectionRequest"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("CIPEncapsulationConnectionRequest"); pushErr != nil {
 			return pushErr
 		}
 
-		if popErr := io.PopContext("CIPEncapsulationConnectionRequest"); popErr != nil {
+		if popErr := writeBuffer.PopContext("CIPEncapsulationConnectionRequest"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *CIPEncapsulationConnectionRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *CIPEncapsulationConnectionRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	return nil
-}
-
-func (m CIPEncapsulationConnectionRequest) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m CIPEncapsulationConnectionRequest) Box(name string, width int) utils.AsciiBox {
-	boxName := "CIPEncapsulationConnectionRequest"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionResponse.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionResponse.go
index 25c063f..5f56c93 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionResponse.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionResponse.go
@@ -20,9 +20,7 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -36,9 +34,7 @@ type CIPEncapsulationConnectionResponse struct {
 type ICIPEncapsulationConnectionResponse interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -100,12 +96,12 @@ func (m *CIPEncapsulationConnectionResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func CIPEncapsulationConnectionResponseParse(io utils.ReadBuffer) (*CIPEncapsulationPacket, error) {
-	if pullErr := io.PullContext("CIPEncapsulationConnectionResponse"); pullErr != nil {
+func CIPEncapsulationConnectionResponseParse(readBuffer utils.ReadBuffer) (*CIPEncapsulationPacket, error) {
+	if pullErr := readBuffer.PullContext("CIPEncapsulationConnectionResponse"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if closeErr := io.CloseContext("CIPEncapsulationConnectionResponse"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("CIPEncapsulationConnectionResponse"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -117,62 +113,16 @@ func CIPEncapsulationConnectionResponseParse(io utils.ReadBuffer) (*CIPEncapsula
 	return _child.Parent, nil
 }
 
-func (m *CIPEncapsulationConnectionResponse) Serialize(io utils.WriteBuffer) error {
+func (m *CIPEncapsulationConnectionResponse) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("CIPEncapsulationConnectionResponse"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("CIPEncapsulationConnectionResponse"); pushErr != nil {
 			return pushErr
 		}
 
-		if popErr := io.PopContext("CIPEncapsulationConnectionResponse"); popErr != nil {
+		if popErr := writeBuffer.PopContext("CIPEncapsulationConnectionResponse"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *CIPEncapsulationConnectionResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *CIPEncapsulationConnectionResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	return nil
-}
-
-func (m CIPEncapsulationConnectionResponse) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m CIPEncapsulationConnectionResponse) Box(name string, width int) utils.AsciiBox {
-	boxName := "CIPEncapsulationConnectionResponse"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationPacket.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationPacket.go
index a41a69b..b03fd93 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationPacket.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationPacket.go
@@ -20,13 +20,9 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
 	"github.com/rs/zerolog/log"
-	"io"
-	"reflect"
-	"strings"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -45,22 +41,19 @@ type ICIPEncapsulationPacket interface {
 	CommandType() uint16
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 type ICIPEncapsulationPacketParent interface {
-	SerializeParent(io utils.WriteBuffer, child ICIPEncapsulationPacket, serializeChildFunction func() error) error
+	SerializeParent(writeBuffer utils.WriteBuffer, child ICIPEncapsulationPacket, serializeChildFunction func() error) error
 	GetTypeName() string
 }
 
 type ICIPEncapsulationPacketChild interface {
-	Serialize(io utils.WriteBuffer) error
+	Serialize(writeBuffer utils.WriteBuffer) error
 	InitializeParent(parent *CIPEncapsulationPacket, sessionHandle uint32, status uint32, senderContext []uint8, options uint32)
 	GetTypeName() string
 	ICIPEncapsulationPacket
-	utils.AsciiBoxer
 }
 
 func NewCIPEncapsulationPacket(sessionHandle uint32, status uint32, senderContext []uint8, options uint32) *CIPEncapsulationPacket {
@@ -124,62 +117,62 @@ func (m *CIPEncapsulationPacket) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func CIPEncapsulationPacketParse(io utils.ReadBuffer) (*CIPEncapsulationPacket, error) {
-	if pullErr := io.PullContext("CIPEncapsulationPacket"); pullErr != nil {
+func CIPEncapsulationPacketParse(readBuffer utils.ReadBuffer) (*CIPEncapsulationPacket, error) {
+	if pullErr := readBuffer.PullContext("CIPEncapsulationPacket"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Discriminator Field (commandType) (Used as input to a switch field)
-	commandType, _commandTypeErr := io.ReadUint16("commandType", 16)
+	commandType, _commandTypeErr := readBuffer.ReadUint16("commandType", 16)
 	if _commandTypeErr != nil {
 		return nil, errors.Wrap(_commandTypeErr, "Error parsing 'commandType' field")
 	}
 
 	// Implicit Field (len) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-	len, _lenErr := io.ReadUint16("len", 16)
+	len, _lenErr := readBuffer.ReadUint16("len", 16)
 	_ = len
 	if _lenErr != nil {
 		return nil, errors.Wrap(_lenErr, "Error parsing 'len' field")
 	}
 
 	// Simple Field (sessionHandle)
-	sessionHandle, _sessionHandleErr := io.ReadUint32("sessionHandle", 32)
+	sessionHandle, _sessionHandleErr := readBuffer.ReadUint32("sessionHandle", 32)
 	if _sessionHandleErr != nil {
 		return nil, errors.Wrap(_sessionHandleErr, "Error parsing 'sessionHandle' field")
 	}
 
 	// Simple Field (status)
-	status, _statusErr := io.ReadUint32("status", 32)
+	status, _statusErr := readBuffer.ReadUint32("status", 32)
 	if _statusErr != nil {
 		return nil, errors.Wrap(_statusErr, "Error parsing 'status' field")
 	}
 
 	// Array field (senderContext)
-	if pullErr := io.PullContext("senderContext", utils.WithRenderAsList(true)); pullErr != nil {
+	if pullErr := readBuffer.PullContext("senderContext", utils.WithRenderAsList(true)); pullErr != nil {
 		return nil, pullErr
 	}
 	// Count array
 	senderContext := make([]uint8, uint16(8))
 	for curItem := uint16(0); curItem < uint16(uint16(8)); curItem++ {
-		_item, _err := io.ReadUint8("", 8)
+		_item, _err := readBuffer.ReadUint8("", 8)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'senderContext' field")
 		}
 		senderContext[curItem] = _item
 	}
-	if closeErr := io.CloseContext("senderContext", utils.WithRenderAsList(true)); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("senderContext", utils.WithRenderAsList(true)); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Simple Field (options)
-	options, _optionsErr := io.ReadUint32("options", 32)
+	options, _optionsErr := readBuffer.ReadUint32("options", 32)
 	if _optionsErr != nil {
 		return nil, errors.Wrap(_optionsErr, "Error parsing 'options' field")
 	}
 
 	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
 	{
-		reserved, _err := io.ReadUint32("reserved", 32)
+		reserved, _err := readBuffer.ReadUint32("reserved", 32)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'reserved' field")
 		}
@@ -196,13 +189,13 @@ func CIPEncapsulationPacketParse(io utils.ReadBuffer) (*CIPEncapsulationPacket,
 	var typeSwitchError error
 	switch {
 	case commandType == 0x0101: // CIPEncapsulationConnectionRequest
-		_parent, typeSwitchError = CIPEncapsulationConnectionRequestParse(io)
+		_parent, typeSwitchError = CIPEncapsulationConnectionRequestParse(readBuffer)
 	case commandType == 0x0201: // CIPEncapsulationConnectionResponse
-		_parent, typeSwitchError = CIPEncapsulationConnectionResponseParse(io)
+		_parent, typeSwitchError = CIPEncapsulationConnectionResponseParse(readBuffer)
 	case commandType == 0x0107: // CIPEncapsulationReadRequest
-		_parent, typeSwitchError = CIPEncapsulationReadRequestParse(io)
+		_parent, typeSwitchError = CIPEncapsulationReadRequestParse(readBuffer)
 	case commandType == 0x0207: // CIPEncapsulationReadResponse
-		_parent, typeSwitchError = CIPEncapsulationReadResponseParse(io, len)
+		_parent, typeSwitchError = CIPEncapsulationReadResponseParse(readBuffer, len)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -211,7 +204,7 @@ func CIPEncapsulationPacketParse(io utils.ReadBuffer) (*CIPEncapsulationPacket,
 		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
 	}
 
-	if closeErr := io.CloseContext("CIPEncapsulationPacket"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("CIPEncapsulationPacket"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -220,18 +213,18 @@ func CIPEncapsulationPacketParse(io utils.ReadBuffer) (*CIPEncapsulationPacket,
 	return _parent, nil
 }
 
-func (m *CIPEncapsulationPacket) Serialize(io utils.WriteBuffer) error {
-	return m.Child.Serialize(io)
+func (m *CIPEncapsulationPacket) Serialize(writeBuffer utils.WriteBuffer) error {
+	return m.Child.Serialize(writeBuffer)
 }
 
-func (m *CIPEncapsulationPacket) SerializeParent(io utils.WriteBuffer, child ICIPEncapsulationPacket, serializeChildFunction func() error) error {
-	if pushErr := io.PushContext("CIPEncapsulationPacket"); pushErr != nil {
+func (m *CIPEncapsulationPacket) SerializeParent(writeBuffer utils.WriteBuffer, child ICIPEncapsulationPacket, serializeChildFunction func() error) error {
+	if pushErr := writeBuffer.PushContext("CIPEncapsulationPacket"); pushErr != nil {
 		return pushErr
 	}
 
 	// Discriminator Field (commandType) (Used as input to a switch field)
 	commandType := uint16(child.CommandType())
-	_commandTypeErr := io.WriteUint16("commandType", 16, (commandType))
+	_commandTypeErr := writeBuffer.WriteUint16("commandType", 16, (commandType))
 
 	if _commandTypeErr != nil {
 		return errors.Wrap(_commandTypeErr, "Error serializing 'commandType' field")
@@ -239,51 +232,51 @@ func (m *CIPEncapsulationPacket) SerializeParent(io utils.WriteBuffer, child ICI
 
 	// Implicit Field (len) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 	len := uint16(uint16(uint16(m.LengthInBytes())) - uint16(uint16(28)))
-	_lenErr := io.WriteUint16("len", 16, (len))
+	_lenErr := writeBuffer.WriteUint16("len", 16, (len))
 	if _lenErr != nil {
 		return errors.Wrap(_lenErr, "Error serializing 'len' field")
 	}
 
 	// Simple Field (sessionHandle)
 	sessionHandle := uint32(m.SessionHandle)
-	_sessionHandleErr := io.WriteUint32("sessionHandle", 32, (sessionHandle))
+	_sessionHandleErr := writeBuffer.WriteUint32("sessionHandle", 32, (sessionHandle))
 	if _sessionHandleErr != nil {
 		return errors.Wrap(_sessionHandleErr, "Error serializing 'sessionHandle' field")
 	}
 
 	// Simple Field (status)
 	status := uint32(m.Status)
-	_statusErr := io.WriteUint32("status", 32, (status))
+	_statusErr := writeBuffer.WriteUint32("status", 32, (status))
 	if _statusErr != nil {
 		return errors.Wrap(_statusErr, "Error serializing 'status' field")
 	}
 
 	// Array Field (senderContext)
 	if m.SenderContext != nil {
-		if pushErr := io.PushContext("senderContext", utils.WithRenderAsList(true)); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("senderContext", utils.WithRenderAsList(true)); pushErr != nil {
 			return pushErr
 		}
 		for _, _element := range m.SenderContext {
-			_elementErr := io.WriteUint8("", 8, _element)
+			_elementErr := writeBuffer.WriteUint8("", 8, _element)
 			if _elementErr != nil {
 				return errors.Wrap(_elementErr, "Error serializing 'senderContext' field")
 			}
 		}
-		if popErr := io.PopContext("senderContext", utils.WithRenderAsList(true)); popErr != nil {
+		if popErr := writeBuffer.PopContext("senderContext", utils.WithRenderAsList(true)); popErr != nil {
 			return popErr
 		}
 	}
 
 	// Simple Field (options)
 	options := uint32(m.Options)
-	_optionsErr := io.WriteUint32("options", 32, (options))
+	_optionsErr := writeBuffer.WriteUint32("options", 32, (options))
 	if _optionsErr != nil {
 		return errors.Wrap(_optionsErr, "Error serializing 'options' field")
 	}
 
 	// Reserved Field (reserved)
 	{
-		_err := io.WriteUint32("reserved", 32, uint32(0x00000000))
+		_err := writeBuffer.WriteUint32("reserved", 32, uint32(0x00000000))
 		if _err != nil {
 			return errors.Wrap(_err, "Error serializing 'reserved' field")
 		}
@@ -295,218 +288,8 @@ func (m *CIPEncapsulationPacket) SerializeParent(io utils.WriteBuffer, child ICI
 		return errors.Wrap(_typeSwitchErr, "Error serializing sub-type field")
 	}
 
-	if popErr := io.PopContext("CIPEncapsulationPacket"); popErr != nil {
+	if popErr := writeBuffer.PopContext("CIPEncapsulationPacket"); popErr != nil {
 		return popErr
 	}
 	return nil
 }
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *CIPEncapsulationPacket) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	if start.Attr != nil && len(start.Attr) > 0 {
-		switch start.Attr[0].Value {
-		// CIPEncapsulationConnectionRequest needs special treatment as it has no fields
-		case "org.apache.plc4x.java.ab-eth.readwrite.CIPEncapsulationConnectionRequest":
-			if m.Child == nil {
-				m.Child = &CIPEncapsulationConnectionRequest{
-					Parent: m,
-				}
-			}
-		// CIPEncapsulationConnectionResponse needs special treatment as it has no fields
-		case "org.apache.plc4x.java.ab-eth.readwrite.CIPEncapsulationConnectionResponse":
-			if m.Child == nil {
-				m.Child = &CIPEncapsulationConnectionResponse{
-					Parent: m,
-				}
-			}
-		}
-	}
-	for {
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "sessionHandle":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.SessionHandle = data
-			case "status":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Status = data
-			case "senderContext":
-				var data []uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.SenderContext = data
-			case "options":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Options = data
-			default:
-				attr := start.Attr
-				if attr == nil || len(attr) <= 0 {
-					// TODO: workaround for bug with nested lists
-					attr = tok.Attr
-				}
-				if attr == nil || len(attr) <= 0 {
-					panic("Couldn't determine class type for childs of CIPEncapsulationPacket")
-				}
-				switch attr[0].Value {
-				case "org.apache.plc4x.java.ab-eth.readwrite.CIPEncapsulationConnectionRequest":
-					var dt *CIPEncapsulationConnectionRequest
-					if m.Child != nil {
-						dt = m.Child.(*CIPEncapsulationConnectionRequest)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ab-eth.readwrite.CIPEncapsulationConnectionResponse":
-					var dt *CIPEncapsulationConnectionResponse
-					if m.Child != nil {
-						dt = m.Child.(*CIPEncapsulationConnectionResponse)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ab-eth.readwrite.CIPEncapsulationReadRequest":
-					var dt *CIPEncapsulationReadRequest
-					if m.Child != nil {
-						dt = m.Child.(*CIPEncapsulationReadRequest)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ab-eth.readwrite.CIPEncapsulationReadResponse":
-					var dt *CIPEncapsulationReadResponse
-					if m.Child != nil {
-						dt = m.Child.(*CIPEncapsulationReadResponse)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				}
-			}
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *CIPEncapsulationPacket) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	className := reflect.TypeOf(m.Child).String()
-	className = "org.apache.plc4x.java.ab-eth.readwrite." + className[strings.LastIndex(className, ".")+1:]
-	if err := e.EncodeToken(xml.StartElement{Name: start.Name, Attr: []xml.Attr{
-		{Name: xml.Name{Local: "className"}, Value: className},
-	}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.SessionHandle, xml.StartElement{Name: xml.Name{Local: "sessionHandle"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.Status, xml.StartElement{Name: xml.Name{Local: "status"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.SenderContext, xml.StartElement{Name: xml.Name{Local: "senderContext"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.Options, xml.StartElement{Name: xml.Name{Local: "options"}}); err != nil {
-		return err
-	}
-	marshaller, ok := m.Child.(xml.Marshaler)
-	if !ok {
-		return errors.Errorf("child is not castable to Marshaler. Actual type %T", m.Child)
-	}
-	if err := marshaller.MarshalXML(e, start); err != nil {
-		return err
-	}
-	if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m CIPEncapsulationPacket) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *CIPEncapsulationPacket) Box(name string, width int) utils.AsciiBox {
-	return m.Child.Box(name, width)
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *CIPEncapsulationPacket) BoxParent(name string, width int, childBoxer func() []utils.AsciiBox) utils.AsciiBox {
-	boxName := "CIPEncapsulationPacket"
-	if name != "" {
-		boxName += "/" + name
-	}
-	boxes := make([]utils.AsciiBox, 0)
-	// Discriminator Field (commandType) (Used as input to a switch field)
-	commandType := uint16(m.Child.CommandType())
-	// uint16 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("CommandType", commandType, -1))
-	// Implicit Field (len)
-	len := uint16(uint16(uint16(m.LengthInBytes())) - uint16(uint16(28)))
-	// uint16 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("Len", len, -1))
-	// Simple field (case simple)
-	// uint32 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("SessionHandle", m.SessionHandle, -1))
-	// Simple field (case simple)
-	// uint32 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("Status", m.Status, -1))
-	// Array Field (senderContext)
-	if m.SenderContext != nil {
-		// Simple array base type uint8 will be hex dumped
-		boxes = append(boxes, utils.BoxedDumpAnything("SenderContext", m.SenderContext))
-		// Simple array base type uint8 will be rendered one by one
-		arrayBoxes := make([]utils.AsciiBox, 0)
-		for _, _element := range m.SenderContext {
-			arrayBoxes = append(arrayBoxes, utils.BoxAnything("", _element, width-2))
-		}
-		boxes = append(boxes, utils.BoxBox("SenderContext", utils.AlignBoxes(arrayBoxes, width-4), 0))
-	}
-	// Simple field (case simple)
-	// uint32 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("Options", m.Options, -1))
-	// Reserved Field (reserved)
-	// reserved field can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("reserved", uint32(0x00000000), -1))
-	// Switch field (Depending on the discriminator values, passes the boxing to a sub-type)
-	boxes = append(boxes, childBoxer()...)
-	return utils.BoxBox(boxName, utils.AlignBoxes(boxes, width-2), 0)
-}
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadRequest.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadRequest.go
index 11104a8..e9488ea 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadRequest.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadRequest.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -38,9 +36,7 @@ type CIPEncapsulationReadRequest struct {
 type ICIPEncapsulationReadRequest interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -106,25 +102,25 @@ func (m *CIPEncapsulationReadRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func CIPEncapsulationReadRequestParse(io utils.ReadBuffer) (*CIPEncapsulationPacket, error) {
-	if pullErr := io.PullContext("CIPEncapsulationReadRequest"); pullErr != nil {
+func CIPEncapsulationReadRequestParse(readBuffer utils.ReadBuffer) (*CIPEncapsulationPacket, error) {
+	if pullErr := readBuffer.PullContext("CIPEncapsulationReadRequest"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if pullErr := io.PullContext("request"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("request"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (request)
-	request, _requestErr := DF1RequestMessageParse(io)
+	request, _requestErr := DF1RequestMessageParse(readBuffer)
 	if _requestErr != nil {
 		return nil, errors.Wrap(_requestErr, "Error parsing 'request' field")
 	}
-	if closeErr := io.CloseContext("request"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("request"); closeErr != nil {
 		return nil, closeErr
 	}
 
-	if closeErr := io.CloseContext("CIPEncapsulationReadRequest"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("CIPEncapsulationReadRequest"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -137,88 +133,28 @@ func CIPEncapsulationReadRequestParse(io utils.ReadBuffer) (*CIPEncapsulationPac
 	return _child.Parent, nil
 }
 
-func (m *CIPEncapsulationReadRequest) Serialize(io utils.WriteBuffer) error {
+func (m *CIPEncapsulationReadRequest) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("CIPEncapsulationReadRequest"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("CIPEncapsulationReadRequest"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (request)
-		if pushErr := io.PushContext("request"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("request"); pushErr != nil {
 			return pushErr
 		}
-		_requestErr := m.Request.Serialize(io)
-		if popErr := io.PopContext("request"); popErr != nil {
+		_requestErr := m.Request.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("request"); popErr != nil {
 			return popErr
 		}
 		if _requestErr != nil {
 			return errors.Wrap(_requestErr, "Error serializing 'request' field")
 		}
 
-		if popErr := io.PopContext("CIPEncapsulationReadRequest"); popErr != nil {
+		if popErr := writeBuffer.PopContext("CIPEncapsulationReadRequest"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *CIPEncapsulationReadRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "request":
-				var dt *DF1RequestMessage
-				if err := d.DecodeElement(&dt, &tok); err != nil {
-					if err == io.EOF {
-						continue
-					}
-					return err
-				}
-				m.Request = dt
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *CIPEncapsulationReadRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.Request, xml.StartElement{Name: xml.Name{Local: "request"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m CIPEncapsulationReadRequest) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m CIPEncapsulationReadRequest) Box(name string, width int) utils.AsciiBox {
-	boxName := "CIPEncapsulationReadRequest"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Complex field (case complex)
-		boxes = append(boxes, m.Request.Box("request", width-2))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadResponse.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadResponse.go
index 499d4cd..7bf0946 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadResponse.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadResponse.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -38,9 +36,7 @@ type CIPEncapsulationReadResponse struct {
 type ICIPEncapsulationReadResponse interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -106,25 +102,25 @@ func (m *CIPEncapsulationReadResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func CIPEncapsulationReadResponseParse(io utils.ReadBuffer, len uint16) (*CIPEncapsulationPacket, error) {
-	if pullErr := io.PullContext("CIPEncapsulationReadResponse"); pullErr != nil {
+func CIPEncapsulationReadResponseParse(readBuffer utils.ReadBuffer, len uint16) (*CIPEncapsulationPacket, error) {
+	if pullErr := readBuffer.PullContext("CIPEncapsulationReadResponse"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if pullErr := io.PullContext("response"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("response"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (response)
-	response, _responseErr := DF1ResponseMessageParse(io, len)
+	response, _responseErr := DF1ResponseMessageParse(readBuffer, len)
 	if _responseErr != nil {
 		return nil, errors.Wrap(_responseErr, "Error parsing 'response' field")
 	}
-	if closeErr := io.CloseContext("response"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("response"); closeErr != nil {
 		return nil, closeErr
 	}
 
-	if closeErr := io.CloseContext("CIPEncapsulationReadResponse"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("CIPEncapsulationReadResponse"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -137,88 +133,28 @@ func CIPEncapsulationReadResponseParse(io utils.ReadBuffer, len uint16) (*CIPEnc
 	return _child.Parent, nil
 }
 
-func (m *CIPEncapsulationReadResponse) Serialize(io utils.WriteBuffer) error {
+func (m *CIPEncapsulationReadResponse) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("CIPEncapsulationReadResponse"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("CIPEncapsulationReadResponse"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (response)
-		if pushErr := io.PushContext("response"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("response"); pushErr != nil {
 			return pushErr
 		}
-		_responseErr := m.Response.Serialize(io)
-		if popErr := io.PopContext("response"); popErr != nil {
+		_responseErr := m.Response.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("response"); popErr != nil {
 			return popErr
 		}
 		if _responseErr != nil {
 			return errors.Wrap(_responseErr, "Error serializing 'response' field")
 		}
 
-		if popErr := io.PopContext("CIPEncapsulationReadResponse"); popErr != nil {
+		if popErr := writeBuffer.PopContext("CIPEncapsulationReadResponse"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *CIPEncapsulationReadResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "response":
-				var dt *DF1ResponseMessage
-				if err := d.DecodeElement(&dt, &tok); err != nil {
-					if err == io.EOF {
-						continue
-					}
-					return err
-				}
-				m.Response = dt
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *CIPEncapsulationReadResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.Response, xml.StartElement{Name: xml.Name{Local: "response"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m CIPEncapsulationReadResponse) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m CIPEncapsulationReadResponse) Box(name string, width int) utils.AsciiBox {
-	boxName := "CIPEncapsulationReadResponse"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Complex field (case complex)
-		boxes = append(boxes, m.Response.Box("response", width-2))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandRequestMessage.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandRequestMessage.go
index 1f3ef2d..acb2ecb 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandRequestMessage.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandRequestMessage.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -38,9 +36,7 @@ type DF1CommandRequestMessage struct {
 type IDF1CommandRequestMessage interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -106,25 +102,25 @@ func (m *DF1CommandRequestMessage) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func DF1CommandRequestMessageParse(io utils.ReadBuffer) (*DF1RequestMessage, error) {
-	if pullErr := io.PullContext("DF1CommandRequestMessage"); pullErr != nil {
+func DF1CommandRequestMessageParse(readBuffer utils.ReadBuffer) (*DF1RequestMessage, error) {
+	if pullErr := readBuffer.PullContext("DF1CommandRequestMessage"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if pullErr := io.PullContext("command"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("command"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (command)
-	command, _commandErr := DF1RequestCommandParse(io)
+	command, _commandErr := DF1RequestCommandParse(readBuffer)
 	if _commandErr != nil {
 		return nil, errors.Wrap(_commandErr, "Error parsing 'command' field")
 	}
-	if closeErr := io.CloseContext("command"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("command"); closeErr != nil {
 		return nil, closeErr
 	}
 
-	if closeErr := io.CloseContext("DF1CommandRequestMessage"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("DF1CommandRequestMessage"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -137,88 +133,28 @@ func DF1CommandRequestMessageParse(io utils.ReadBuffer) (*DF1RequestMessage, err
 	return _child.Parent, nil
 }
 
-func (m *DF1CommandRequestMessage) Serialize(io utils.WriteBuffer) error {
+func (m *DF1CommandRequestMessage) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("DF1CommandRequestMessage"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("DF1CommandRequestMessage"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (command)
-		if pushErr := io.PushContext("command"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("command"); pushErr != nil {
 			return pushErr
 		}
-		_commandErr := m.Command.Serialize(io)
-		if popErr := io.PopContext("command"); popErr != nil {
+		_commandErr := m.Command.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("command"); popErr != nil {
 			return popErr
 		}
 		if _commandErr != nil {
 			return errors.Wrap(_commandErr, "Error serializing 'command' field")
 		}
 
-		if popErr := io.PopContext("DF1CommandRequestMessage"); popErr != nil {
+		if popErr := writeBuffer.PopContext("DF1CommandRequestMessage"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *DF1CommandRequestMessage) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "command":
-				var dt *DF1RequestCommand
-				if err := d.DecodeElement(&dt, &tok); err != nil {
-					if err == io.EOF {
-						continue
-					}
-					return err
-				}
-				m.Command = dt
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *DF1CommandRequestMessage) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.Command, xml.StartElement{Name: xml.Name{Local: "command"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m DF1CommandRequestMessage) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m DF1CommandRequestMessage) Box(name string, width int) utils.AsciiBox {
-	boxName := "DF1CommandRequestMessage"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Complex field (case complex)
-		boxes = append(boxes, m.Command.Box("command", width-2))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandResponseMessageProtectedTypedLogicalRead.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandResponseMessageProtectedTypedLogicalRead.go
index f75cb13..29d106b 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandResponseMessageProtectedTypedLogicalRead.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandResponseMessageProtectedTypedLogicalRead.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -38,9 +36,7 @@ type DF1CommandResponseMessageProtectedTypedLogicalRead struct {
 type IDF1CommandResponseMessageProtectedTypedLogicalRead interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -108,31 +104,31 @@ func (m *DF1CommandResponseMessageProtectedTypedLogicalRead) LengthInBytes() uin
 	return m.LengthInBits() / 8
 }
 
-func DF1CommandResponseMessageProtectedTypedLogicalReadParse(io utils.ReadBuffer, payloadLength uint16, status uint8) (*DF1ResponseMessage, error) {
-	if pullErr := io.PullContext("DF1CommandResponseMessageProtectedTypedLogicalRead"); pullErr != nil {
+func DF1CommandResponseMessageProtectedTypedLogicalReadParse(readBuffer utils.ReadBuffer, payloadLength uint16, status uint8) (*DF1ResponseMessage, error) {
+	if pullErr := readBuffer.PullContext("DF1CommandResponseMessageProtectedTypedLogicalRead"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Array field (data)
-	if pullErr := io.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
+	if pullErr := readBuffer.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
 		return nil, pullErr
 	}
 	// Length array
 	data := make([]uint8, 0)
 	_dataLength := uint16(payloadLength) - uint16(uint16(8))
-	_dataEndPos := io.GetPos() + uint16(_dataLength)
-	for io.GetPos() < _dataEndPos {
-		_item, _err := io.ReadUint8("", 8)
+	_dataEndPos := readBuffer.GetPos() + uint16(_dataLength)
+	for readBuffer.GetPos() < _dataEndPos {
+		_item, _err := readBuffer.ReadUint8("", 8)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'data' field")
 		}
 		data = append(data, _item)
 	}
-	if closeErr := io.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
 		return nil, closeErr
 	}
 
-	if closeErr := io.CloseContext("DF1CommandResponseMessageProtectedTypedLogicalRead"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("DF1CommandResponseMessageProtectedTypedLogicalRead"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -145,98 +141,32 @@ func DF1CommandResponseMessageProtectedTypedLogicalReadParse(io utils.ReadBuffer
 	return _child.Parent, nil
 }
 
-func (m *DF1CommandResponseMessageProtectedTypedLogicalRead) Serialize(io utils.WriteBuffer) error {
+func (m *DF1CommandResponseMessageProtectedTypedLogicalRead) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("DF1CommandResponseMessageProtectedTypedLogicalRead"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("DF1CommandResponseMessageProtectedTypedLogicalRead"); pushErr != nil {
 			return pushErr
 		}
 
 		// Array Field (data)
 		if m.Data != nil {
-			if pushErr := io.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
+			if pushErr := writeBuffer.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
 				return pushErr
 			}
 			for _, _element := range m.Data {
-				_elementErr := io.WriteUint8("", 8, _element)
+				_elementErr := writeBuffer.WriteUint8("", 8, _element)
 				if _elementErr != nil {
 					return errors.Wrap(_elementErr, "Error serializing 'data' field")
 				}
 			}
-			if popErr := io.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
+			if popErr := writeBuffer.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
 				return popErr
 			}
 		}
 
-		if popErr := io.PopContext("DF1CommandResponseMessageProtectedTypedLogicalRead"); popErr != nil {
+		if popErr := writeBuffer.PopContext("DF1CommandResponseMessageProtectedTypedLogicalRead"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *DF1CommandResponseMessageProtectedTypedLogicalRead) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "data":
-				var data []uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Data = data
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *DF1CommandResponseMessageProtectedTypedLogicalRead) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.Data, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m DF1CommandResponseMessageProtectedTypedLogicalRead) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m DF1CommandResponseMessageProtectedTypedLogicalRead) Box(name string, width int) utils.AsciiBox {
-	boxName := "DF1CommandResponseMessageProtectedTypedLogicalRead"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Array Field (data)
-		if m.Data != nil {
-			// Simple array base type uint8 will be hex dumped
-			boxes = append(boxes, utils.BoxedDumpAnything("Data", m.Data))
-			// Simple array base type uint8 will be rendered one by one
-			arrayBoxes := make([]utils.AsciiBox, 0)
-			for _, _element := range m.Data {
-				arrayBoxes = append(arrayBoxes, utils.BoxAnything("", _element, width-2))
-			}
-			boxes = append(boxes, utils.BoxBox("Data", utils.AlignBoxes(arrayBoxes, width-4), 0))
-		}
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestCommand.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestCommand.go
index e958a53..a56b16f 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestCommand.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestCommand.go
@@ -20,12 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
-	"reflect"
-	"strings"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -40,22 +36,19 @@ type IDF1RequestCommand interface {
 	FunctionCode() uint8
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 type IDF1RequestCommandParent interface {
-	SerializeParent(io utils.WriteBuffer, child IDF1RequestCommand, serializeChildFunction func() error) error
+	SerializeParent(writeBuffer utils.WriteBuffer, child IDF1RequestCommand, serializeChildFunction func() error) error
 	GetTypeName() string
 }
 
 type IDF1RequestCommandChild interface {
-	Serialize(io utils.WriteBuffer) error
+	Serialize(writeBuffer utils.WriteBuffer) error
 	InitializeParent(parent *DF1RequestCommand)
 	GetTypeName() string
 	IDF1RequestCommand
-	utils.AsciiBoxer
 }
 
 func NewDF1RequestCommand() *DF1RequestCommand {
@@ -99,13 +92,13 @@ func (m *DF1RequestCommand) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func DF1RequestCommandParse(io utils.ReadBuffer) (*DF1RequestCommand, error) {
-	if pullErr := io.PullContext("DF1RequestCommand"); pullErr != nil {
+func DF1RequestCommandParse(readBuffer utils.ReadBuffer) (*DF1RequestCommand, error) {
+	if pullErr := readBuffer.PullContext("DF1RequestCommand"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Discriminator Field (functionCode) (Used as input to a switch field)
-	functionCode, _functionCodeErr := io.ReadUint8("functionCode", 8)
+	functionCode, _functionCodeErr := readBuffer.ReadUint8("functionCode", 8)
 	if _functionCodeErr != nil {
 		return nil, errors.Wrap(_functionCodeErr, "Error parsing 'functionCode' field")
 	}
@@ -115,7 +108,7 @@ func DF1RequestCommandParse(io utils.ReadBuffer) (*DF1RequestCommand, error) {
 	var typeSwitchError error
 	switch {
 	case functionCode == 0xA2: // DF1RequestProtectedTypedLogicalRead
-		_parent, typeSwitchError = DF1RequestProtectedTypedLogicalReadParse(io)
+		_parent, typeSwitchError = DF1RequestProtectedTypedLogicalReadParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -124,7 +117,7 @@ func DF1RequestCommandParse(io utils.ReadBuffer) (*DF1RequestCommand, error) {
 		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
 	}
 
-	if closeErr := io.CloseContext("DF1RequestCommand"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("DF1RequestCommand"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -133,18 +126,18 @@ func DF1RequestCommandParse(io utils.ReadBuffer) (*DF1RequestCommand, error) {
 	return _parent, nil
 }
 
-func (m *DF1RequestCommand) Serialize(io utils.WriteBuffer) error {
-	return m.Child.Serialize(io)
+func (m *DF1RequestCommand) Serialize(writeBuffer utils.WriteBuffer) error {
+	return m.Child.Serialize(writeBuffer)
 }
 
-func (m *DF1RequestCommand) SerializeParent(io utils.WriteBuffer, child IDF1RequestCommand, serializeChildFunction func() error) error {
-	if pushErr := io.PushContext("DF1RequestCommand"); pushErr != nil {
+func (m *DF1RequestCommand) SerializeParent(writeBuffer utils.WriteBuffer, child IDF1RequestCommand, serializeChildFunction func() error) error {
+	if pushErr := writeBuffer.PushContext("DF1RequestCommand"); pushErr != nil {
 		return pushErr
 	}
 
 	// Discriminator Field (functionCode) (Used as input to a switch field)
 	functionCode := uint8(child.FunctionCode())
-	_functionCodeErr := io.WriteUint8("functionCode", 8, (functionCode))
+	_functionCodeErr := writeBuffer.WriteUint8("functionCode", 8, (functionCode))
 
 	if _functionCodeErr != nil {
 		return errors.Wrap(_functionCodeErr, "Error serializing 'functionCode' field")
@@ -156,105 +149,8 @@ func (m *DF1RequestCommand) SerializeParent(io utils.WriteBuffer, child IDF1Requ
 		return errors.Wrap(_typeSwitchErr, "Error serializing sub-type field")
 	}
 
-	if popErr := io.PopContext("DF1RequestCommand"); popErr != nil {
+	if popErr := writeBuffer.PopContext("DF1RequestCommand"); popErr != nil {
 		return popErr
 	}
 	return nil
 }
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *DF1RequestCommand) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	if start.Attr != nil && len(start.Attr) > 0 {
-		switch start.Attr[0].Value {
-		}
-	}
-	for {
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			default:
-				attr := start.Attr
-				if attr == nil || len(attr) <= 0 {
-					// TODO: workaround for bug with nested lists
-					attr = tok.Attr
-				}
-				if attr == nil || len(attr) <= 0 {
-					panic("Couldn't determine class type for childs of DF1RequestCommand")
-				}
-				switch attr[0].Value {
-				case "org.apache.plc4x.java.ab-eth.readwrite.DF1RequestProtectedTypedLogicalRead":
-					var dt *DF1RequestProtectedTypedLogicalRead
-					if m.Child != nil {
-						dt = m.Child.(*DF1RequestProtectedTypedLogicalRead)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				}
-			}
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *DF1RequestCommand) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	className := reflect.TypeOf(m.Child).String()
-	className = "org.apache.plc4x.java.ab-eth.readwrite." + className[strings.LastIndex(className, ".")+1:]
-	if err := e.EncodeToken(xml.StartElement{Name: start.Name, Attr: []xml.Attr{
-		{Name: xml.Name{Local: "className"}, Value: className},
-	}}); err != nil {
-		return err
-	}
-	marshaller, ok := m.Child.(xml.Marshaler)
-	if !ok {
-		return errors.Errorf("child is not castable to Marshaler. Actual type %T", m.Child)
-	}
-	if err := marshaller.MarshalXML(e, start); err != nil {
-		return err
-	}
-	if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m DF1RequestCommand) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *DF1RequestCommand) Box(name string, width int) utils.AsciiBox {
-	return m.Child.Box(name, width)
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *DF1RequestCommand) BoxParent(name string, width int, childBoxer func() []utils.AsciiBox) utils.AsciiBox {
-	boxName := "DF1RequestCommand"
-	if name != "" {
-		boxName += "/" + name
-	}
-	boxes := make([]utils.AsciiBox, 0)
-	// Discriminator Field (functionCode) (Used as input to a switch field)
-	functionCode := uint8(m.Child.FunctionCode())
-	// uint8 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("FunctionCode", functionCode, -1))
-	// Switch field (Depending on the discriminator values, passes the boxing to a sub-type)
-	boxes = append(boxes, childBoxer()...)
-	return utils.BoxBox(boxName, utils.AlignBoxes(boxes, width-2), 0)
-}
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestMessage.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestMessage.go
index 3aa2773..cf98abd 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestMessage.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestMessage.go
@@ -20,13 +20,9 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
 	"github.com/rs/zerolog/log"
-	"io"
-	"reflect"
-	"strings"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -45,22 +41,19 @@ type IDF1RequestMessage interface {
 	CommandCode() uint8
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 type IDF1RequestMessageParent interface {
-	SerializeParent(io utils.WriteBuffer, child IDF1RequestMessage, serializeChildFunction func() error) error
+	SerializeParent(writeBuffer utils.WriteBuffer, child IDF1RequestMessage, serializeChildFunction func() error) error
 	GetTypeName() string
 }
 
 type IDF1RequestMessageChild interface {
-	Serialize(io utils.WriteBuffer) error
+	Serialize(writeBuffer utils.WriteBuffer) error
 	InitializeParent(parent *DF1RequestMessage, destinationAddress uint8, sourceAddress uint8, status uint8, transactionCounter uint16)
 	GetTypeName() string
 	IDF1RequestMessage
-	utils.AsciiBoxer
 }
 
 func NewDF1RequestMessage(destinationAddress uint8, sourceAddress uint8, status uint8, transactionCounter uint16) *DF1RequestMessage {
@@ -119,26 +112,26 @@ func (m *DF1RequestMessage) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func DF1RequestMessageParse(io utils.ReadBuffer) (*DF1RequestMessage, error) {
-	if pullErr := io.PullContext("DF1RequestMessage"); pullErr != nil {
+func DF1RequestMessageParse(readBuffer utils.ReadBuffer) (*DF1RequestMessage, error) {
+	if pullErr := readBuffer.PullContext("DF1RequestMessage"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (destinationAddress)
-	destinationAddress, _destinationAddressErr := io.ReadUint8("destinationAddress", 8)
+	destinationAddress, _destinationAddressErr := readBuffer.ReadUint8("destinationAddress", 8)
 	if _destinationAddressErr != nil {
 		return nil, errors.Wrap(_destinationAddressErr, "Error parsing 'destinationAddress' field")
 	}
 
 	// Simple Field (sourceAddress)
-	sourceAddress, _sourceAddressErr := io.ReadUint8("sourceAddress", 8)
+	sourceAddress, _sourceAddressErr := readBuffer.ReadUint8("sourceAddress", 8)
 	if _sourceAddressErr != nil {
 		return nil, errors.Wrap(_sourceAddressErr, "Error parsing 'sourceAddress' field")
 	}
 
 	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
 	{
-		reserved, _err := io.ReadUint16("reserved", 16)
+		reserved, _err := readBuffer.ReadUint16("reserved", 16)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'reserved' field")
 		}
@@ -151,19 +144,19 @@ func DF1RequestMessageParse(io utils.ReadBuffer) (*DF1RequestMessage, error) {
 	}
 
 	// Discriminator Field (commandCode) (Used as input to a switch field)
-	commandCode, _commandCodeErr := io.ReadUint8("commandCode", 8)
+	commandCode, _commandCodeErr := readBuffer.ReadUint8("commandCode", 8)
 	if _commandCodeErr != nil {
 		return nil, errors.Wrap(_commandCodeErr, "Error parsing 'commandCode' field")
 	}
 
 	// Simple Field (status)
-	status, _statusErr := io.ReadUint8("status", 8)
+	status, _statusErr := readBuffer.ReadUint8("status", 8)
 	if _statusErr != nil {
 		return nil, errors.Wrap(_statusErr, "Error parsing 'status' field")
 	}
 
 	// Simple Field (transactionCounter)
-	transactionCounter, _transactionCounterErr := io.ReadUint16("transactionCounter", 16)
+	transactionCounter, _transactionCounterErr := readBuffer.ReadUint16("transactionCounter", 16)
 	if _transactionCounterErr != nil {
 		return nil, errors.Wrap(_transactionCounterErr, "Error parsing 'transactionCounter' field")
 	}
@@ -173,7 +166,7 @@ func DF1RequestMessageParse(io utils.ReadBuffer) (*DF1RequestMessage, error) {
 	var typeSwitchError error
 	switch {
 	case commandCode == 0x0F: // DF1CommandRequestMessage
-		_parent, typeSwitchError = DF1CommandRequestMessageParse(io)
+		_parent, typeSwitchError = DF1CommandRequestMessageParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -182,7 +175,7 @@ func DF1RequestMessageParse(io utils.ReadBuffer) (*DF1RequestMessage, error) {
 		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
 	}
 
-	if closeErr := io.CloseContext("DF1RequestMessage"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("DF1RequestMessage"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -191,32 +184,32 @@ func DF1RequestMessageParse(io utils.ReadBuffer) (*DF1RequestMessage, error) {
 	return _parent, nil
 }
 
-func (m *DF1RequestMessage) Serialize(io utils.WriteBuffer) error {
-	return m.Child.Serialize(io)
+func (m *DF1RequestMessage) Serialize(writeBuffer utils.WriteBuffer) error {
+	return m.Child.Serialize(writeBuffer)
 }
 
-func (m *DF1RequestMessage) SerializeParent(io utils.WriteBuffer, child IDF1RequestMessage, serializeChildFunction func() error) error {
-	if pushErr := io.PushContext("DF1RequestMessage"); pushErr != nil {
+func (m *DF1RequestMessage) SerializeParent(writeBuffer utils.WriteBuffer, child IDF1RequestMessage, serializeChildFunction func() error) error {
+	if pushErr := writeBuffer.PushContext("DF1RequestMessage"); pushErr != nil {
 		return pushErr
 	}
 
 	// Simple Field (destinationAddress)
 	destinationAddress := uint8(m.DestinationAddress)
-	_destinationAddressErr := io.WriteUint8("destinationAddress", 8, (destinationAddress))
+	_destinationAddressErr := writeBuffer.WriteUint8("destinationAddress", 8, (destinationAddress))
 	if _destinationAddressErr != nil {
 		return errors.Wrap(_destinationAddressErr, "Error serializing 'destinationAddress' field")
 	}
 
 	// Simple Field (sourceAddress)
 	sourceAddress := uint8(m.SourceAddress)
-	_sourceAddressErr := io.WriteUint8("sourceAddress", 8, (sourceAddress))
+	_sourceAddressErr := writeBuffer.WriteUint8("sourceAddress", 8, (sourceAddress))
 	if _sourceAddressErr != nil {
 		return errors.Wrap(_sourceAddressErr, "Error serializing 'sourceAddress' field")
 	}
 
 	// Reserved Field (reserved)
 	{
-		_err := io.WriteUint16("reserved", 16, uint16(0x0000))
+		_err := writeBuffer.WriteUint16("reserved", 16, uint16(0x0000))
 		if _err != nil {
 			return errors.Wrap(_err, "Error serializing 'reserved' field")
 		}
@@ -224,7 +217,7 @@ func (m *DF1RequestMessage) SerializeParent(io utils.WriteBuffer, child IDF1Requ
 
 	// Discriminator Field (commandCode) (Used as input to a switch field)
 	commandCode := uint8(child.CommandCode())
-	_commandCodeErr := io.WriteUint8("commandCode", 8, (commandCode))
+	_commandCodeErr := writeBuffer.WriteUint8("commandCode", 8, (commandCode))
 
 	if _commandCodeErr != nil {
 		return errors.Wrap(_commandCodeErr, "Error serializing 'commandCode' field")
@@ -232,14 +225,14 @@ func (m *DF1RequestMessage) SerializeParent(io utils.WriteBuffer, child IDF1Requ
 
 	// Simple Field (status)
 	status := uint8(m.Status)
-	_statusErr := io.WriteUint8("status", 8, (status))
+	_statusErr := writeBuffer.WriteUint8("status", 8, (status))
 	if _statusErr != nil {
 		return errors.Wrap(_statusErr, "Error serializing 'status' field")
 	}
 
 	// Simple Field (transactionCounter)
 	transactionCounter := uint16(m.TransactionCounter)
-	_transactionCounterErr := io.WriteUint16("transactionCounter", 16, (transactionCounter))
+	_transactionCounterErr := writeBuffer.WriteUint16("transactionCounter", 16, (transactionCounter))
 	if _transactionCounterErr != nil {
 		return errors.Wrap(_transactionCounterErr, "Error serializing 'transactionCounter' field")
 	}
@@ -250,156 +243,8 @@ func (m *DF1RequestMessage) SerializeParent(io utils.WriteBuffer, child IDF1Requ
 		return errors.Wrap(_typeSwitchErr, "Error serializing sub-type field")
 	}
 
-	if popErr := io.PopContext("DF1RequestMessage"); popErr != nil {
+	if popErr := writeBuffer.PopContext("DF1RequestMessage"); popErr != nil {
 		return popErr
 	}
 	return nil
 }
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *DF1RequestMessage) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	if start.Attr != nil && len(start.Attr) > 0 {
-		switch start.Attr[0].Value {
-		}
-	}
-	for {
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "destinationAddress":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.DestinationAddress = data
-			case "sourceAddress":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.SourceAddress = data
-			case "status":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Status = data
-			case "transactionCounter":
-				var data uint16
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.TransactionCounter = data
-			default:
-				attr := start.Attr
-				if attr == nil || len(attr) <= 0 {
-					// TODO: workaround for bug with nested lists
-					attr = tok.Attr
-				}
-				if attr == nil || len(attr) <= 0 {
-					panic("Couldn't determine class type for childs of DF1RequestMessage")
-				}
-				switch attr[0].Value {
-				case "org.apache.plc4x.java.ab-eth.readwrite.DF1CommandRequestMessage":
-					var dt *DF1CommandRequestMessage
-					if m.Child != nil {
-						dt = m.Child.(*DF1CommandRequestMessage)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				}
-			}
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *DF1RequestMessage) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	className := reflect.TypeOf(m.Child).String()
-	className = "org.apache.plc4x.java.ab-eth.readwrite." + className[strings.LastIndex(className, ".")+1:]
-	if err := e.EncodeToken(xml.StartElement{Name: start.Name, Attr: []xml.Attr{
-		{Name: xml.Name{Local: "className"}, Value: className},
-	}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.DestinationAddress, xml.StartElement{Name: xml.Name{Local: "destinationAddress"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.SourceAddress, xml.StartElement{Name: xml.Name{Local: "sourceAddress"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.Status, xml.StartElement{Name: xml.Name{Local: "status"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.TransactionCounter, xml.StartElement{Name: xml.Name{Local: "transactionCounter"}}); err != nil {
-		return err
-	}
-	marshaller, ok := m.Child.(xml.Marshaler)
-	if !ok {
-		return errors.Errorf("child is not castable to Marshaler. Actual type %T", m.Child)
-	}
-	if err := marshaller.MarshalXML(e, start); err != nil {
-		return err
-	}
-	if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m DF1RequestMessage) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *DF1RequestMessage) Box(name string, width int) utils.AsciiBox {
-	return m.Child.Box(name, width)
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *DF1RequestMessage) BoxParent(name string, width int, childBoxer func() []utils.AsciiBox) utils.AsciiBox {
-	boxName := "DF1RequestMessage"
-	if name != "" {
-		boxName += "/" + name
-	}
-	boxes := make([]utils.AsciiBox, 0)
-	// Simple field (case simple)
-	// uint8 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("DestinationAddress", m.DestinationAddress, -1))
-	// Simple field (case simple)
-	// uint8 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("SourceAddress", m.SourceAddress, -1))
-	// Reserved Field (reserved)
-	// reserved field can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("reserved", uint16(0x0000), -1))
-	// Discriminator Field (commandCode) (Used as input to a switch field)
-	commandCode := uint8(m.Child.CommandCode())
-	// uint8 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("CommandCode", commandCode, -1))
-	// Simple field (case simple)
-	// uint8 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("Status", m.Status, -1))
-	// Simple field (case simple)
-	// uint16 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("TransactionCounter", m.TransactionCounter, -1))
-	// Switch field (Depending on the discriminator values, passes the boxing to a sub-type)
-	boxes = append(boxes, childBoxer()...)
-	return utils.BoxBox(boxName, utils.AlignBoxes(boxes, width-2), 0)
-}
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestProtectedTypedLogicalRead.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestProtectedTypedLogicalRead.go
index 233ac3a..cccd30d 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestProtectedTypedLogicalRead.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestProtectedTypedLogicalRead.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -42,9 +40,7 @@ type DF1RequestProtectedTypedLogicalRead struct {
 type IDF1RequestProtectedTypedLogicalRead interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -122,42 +118,42 @@ func (m *DF1RequestProtectedTypedLogicalRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func DF1RequestProtectedTypedLogicalReadParse(io utils.ReadBuffer) (*DF1RequestCommand, error) {
-	if pullErr := io.PullContext("DF1RequestProtectedTypedLogicalRead"); pullErr != nil {
+func DF1RequestProtectedTypedLogicalReadParse(readBuffer utils.ReadBuffer) (*DF1RequestCommand, error) {
+	if pullErr := readBuffer.PullContext("DF1RequestProtectedTypedLogicalRead"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (byteSize)
-	byteSize, _byteSizeErr := io.ReadUint8("byteSize", 8)
+	byteSize, _byteSizeErr := readBuffer.ReadUint8("byteSize", 8)
 	if _byteSizeErr != nil {
 		return nil, errors.Wrap(_byteSizeErr, "Error parsing 'byteSize' field")
 	}
 
 	// Simple Field (fileNumber)
-	fileNumber, _fileNumberErr := io.ReadUint8("fileNumber", 8)
+	fileNumber, _fileNumberErr := readBuffer.ReadUint8("fileNumber", 8)
 	if _fileNumberErr != nil {
 		return nil, errors.Wrap(_fileNumberErr, "Error parsing 'fileNumber' field")
 	}
 
 	// Simple Field (fileType)
-	fileType, _fileTypeErr := io.ReadUint8("fileType", 8)
+	fileType, _fileTypeErr := readBuffer.ReadUint8("fileType", 8)
 	if _fileTypeErr != nil {
 		return nil, errors.Wrap(_fileTypeErr, "Error parsing 'fileType' field")
 	}
 
 	// Simple Field (elementNumber)
-	elementNumber, _elementNumberErr := io.ReadUint8("elementNumber", 8)
+	elementNumber, _elementNumberErr := readBuffer.ReadUint8("elementNumber", 8)
 	if _elementNumberErr != nil {
 		return nil, errors.Wrap(_elementNumberErr, "Error parsing 'elementNumber' field")
 	}
 
 	// Simple Field (subElementNumber)
-	subElementNumber, _subElementNumberErr := io.ReadUint8("subElementNumber", 8)
+	subElementNumber, _subElementNumberErr := readBuffer.ReadUint8("subElementNumber", 8)
 	if _subElementNumberErr != nil {
 		return nil, errors.Wrap(_subElementNumberErr, "Error parsing 'subElementNumber' field")
 	}
 
-	if closeErr := io.CloseContext("DF1RequestProtectedTypedLogicalRead"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("DF1RequestProtectedTypedLogicalRead"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -174,157 +170,51 @@ func DF1RequestProtectedTypedLogicalReadParse(io utils.ReadBuffer) (*DF1RequestC
 	return _child.Parent, nil
 }
 
-func (m *DF1RequestProtectedTypedLogicalRead) Serialize(io utils.WriteBuffer) error {
+func (m *DF1RequestProtectedTypedLogicalRead) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("DF1RequestProtectedTypedLogicalRead"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("DF1RequestProtectedTypedLogicalRead"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (byteSize)
 		byteSize := uint8(m.ByteSize)
-		_byteSizeErr := io.WriteUint8("byteSize", 8, (byteSize))
+		_byteSizeErr := writeBuffer.WriteUint8("byteSize", 8, (byteSize))
 		if _byteSizeErr != nil {
 			return errors.Wrap(_byteSizeErr, "Error serializing 'byteSize' field")
 		}
 
 		// Simple Field (fileNumber)
 		fileNumber := uint8(m.FileNumber)
-		_fileNumberErr := io.WriteUint8("fileNumber", 8, (fileNumber))
+		_fileNumberErr := writeBuffer.WriteUint8("fileNumber", 8, (fileNumber))
 		if _fileNumberErr != nil {
 			return errors.Wrap(_fileNumberErr, "Error serializing 'fileNumber' field")
 		}
 
 		// Simple Field (fileType)
 		fileType := uint8(m.FileType)
-		_fileTypeErr := io.WriteUint8("fileType", 8, (fileType))
+		_fileTypeErr := writeBuffer.WriteUint8("fileType", 8, (fileType))
 		if _fileTypeErr != nil {
 			return errors.Wrap(_fileTypeErr, "Error serializing 'fileType' field")
 		}
 
 		// Simple Field (elementNumber)
 		elementNumber := uint8(m.ElementNumber)
-		_elementNumberErr := io.WriteUint8("elementNumber", 8, (elementNumber))
+		_elementNumberErr := writeBuffer.WriteUint8("elementNumber", 8, (elementNumber))
 		if _elementNumberErr != nil {
 			return errors.Wrap(_elementNumberErr, "Error serializing 'elementNumber' field")
 		}
 
 		// Simple Field (subElementNumber)
 		subElementNumber := uint8(m.SubElementNumber)
-		_subElementNumberErr := io.WriteUint8("subElementNumber", 8, (subElementNumber))
+		_subElementNumberErr := writeBuffer.WriteUint8("subElementNumber", 8, (subElementNumber))
 		if _subElementNumberErr != nil {
 			return errors.Wrap(_subElementNumberErr, "Error serializing 'subElementNumber' field")
 		}
 
-		if popErr := io.PopContext("DF1RequestProtectedTypedLogicalRead"); popErr != nil {
+		if popErr := writeBuffer.PopContext("DF1RequestProtectedTypedLogicalRead"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *DF1RequestProtectedTypedLogicalRead) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "byteSize":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ByteSize = data
-			case "fileNumber":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.FileNumber = data
-			case "fileType":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.FileType = data
-			case "elementNumber":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ElementNumber = data
-			case "subElementNumber":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.SubElementNumber = data
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *DF1RequestProtectedTypedLogicalRead) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.ByteSize, xml.StartElement{Name: xml.Name{Local: "byteSize"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.FileNumber, xml.StartElement{Name: xml.Name{Local: "fileNumber"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.FileType, xml.StartElement{Name: xml.Name{Local: "fileType"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.ElementNumber, xml.StartElement{Name: xml.Name{Local: "elementNumber"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.SubElementNumber, xml.StartElement{Name: xml.Name{Local: "subElementNumber"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m DF1RequestProtectedTypedLogicalRead) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m DF1RequestProtectedTypedLogicalRead) Box(name string, width int) utils.AsciiBox {
-	boxName := "DF1RequestProtectedTypedLogicalRead"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Simple field (case simple)
-		// uint8 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ByteSize", m.ByteSize, -1))
-		// Simple field (case simple)
-		// uint8 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("FileNumber", m.FileNumber, -1))
-		// Simple field (case simple)
-		// uint8 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("FileType", m.FileType, -1))
-		// Simple field (case simple)
-		// uint8 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ElementNumber", m.ElementNumber, -1))
-		// Simple field (case simple)
-		// uint8 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("SubElementNumber", m.SubElementNumber, -1))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1ResponseMessage.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1ResponseMessage.go
index b0a52ea..bb1eefa 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1ResponseMessage.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1ResponseMessage.go
@@ -20,13 +20,9 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
 	"github.com/rs/zerolog/log"
-	"io"
-	"reflect"
-	"strings"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -45,22 +41,19 @@ type IDF1ResponseMessage interface {
 	CommandCode() uint8
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 type IDF1ResponseMessageParent interface {
-	SerializeParent(io utils.WriteBuffer, child IDF1ResponseMessage, serializeChildFunction func() error) error
+	SerializeParent(writeBuffer utils.WriteBuffer, child IDF1ResponseMessage, serializeChildFunction func() error) error
 	GetTypeName() string
 }
 
 type IDF1ResponseMessageChild interface {
-	Serialize(io utils.WriteBuffer) error
+	Serialize(writeBuffer utils.WriteBuffer) error
 	InitializeParent(parent *DF1ResponseMessage, destinationAddress uint8, sourceAddress uint8, status uint8, transactionCounter uint16)
 	GetTypeName() string
 	IDF1ResponseMessage
-	utils.AsciiBoxer
 }
 
 func NewDF1ResponseMessage(destinationAddress uint8, sourceAddress uint8, status uint8, transactionCounter uint16) *DF1ResponseMessage {
@@ -122,14 +115,14 @@ func (m *DF1ResponseMessage) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func DF1ResponseMessageParse(io utils.ReadBuffer, payloadLength uint16) (*DF1ResponseMessage, error) {
-	if pullErr := io.PullContext("DF1ResponseMessage"); pullErr != nil {
+func DF1ResponseMessageParse(readBuffer utils.ReadBuffer, payloadLength uint16) (*DF1ResponseMessage, error) {
+	if pullErr := readBuffer.PullContext("DF1ResponseMessage"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
 	{
-		reserved, _err := io.ReadUint8("reserved", 8)
+		reserved, _err := readBuffer.ReadUint8("reserved", 8)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'reserved' field")
 		}
@@ -142,20 +135,20 @@ func DF1ResponseMessageParse(io utils.ReadBuffer, payloadLength uint16) (*DF1Res
 	}
 
 	// Simple Field (destinationAddress)
-	destinationAddress, _destinationAddressErr := io.ReadUint8("destinationAddress", 8)
+	destinationAddress, _destinationAddressErr := readBuffer.ReadUint8("destinationAddress", 8)
 	if _destinationAddressErr != nil {
 		return nil, errors.Wrap(_destinationAddressErr, "Error parsing 'destinationAddress' field")
 	}
 
 	// Simple Field (sourceAddress)
-	sourceAddress, _sourceAddressErr := io.ReadUint8("sourceAddress", 8)
+	sourceAddress, _sourceAddressErr := readBuffer.ReadUint8("sourceAddress", 8)
 	if _sourceAddressErr != nil {
 		return nil, errors.Wrap(_sourceAddressErr, "Error parsing 'sourceAddress' field")
 	}
 
 	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
 	{
-		reserved, _err := io.ReadUint8("reserved", 8)
+		reserved, _err := readBuffer.ReadUint8("reserved", 8)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'reserved' field")
 		}
@@ -168,19 +161,19 @@ func DF1ResponseMessageParse(io utils.ReadBuffer, payloadLength uint16) (*DF1Res
 	}
 
 	// Discriminator Field (commandCode) (Used as input to a switch field)
-	commandCode, _commandCodeErr := io.ReadUint8("commandCode", 8)
+	commandCode, _commandCodeErr := readBuffer.ReadUint8("commandCode", 8)
 	if _commandCodeErr != nil {
 		return nil, errors.Wrap(_commandCodeErr, "Error parsing 'commandCode' field")
 	}
 
 	// Simple Field (status)
-	status, _statusErr := io.ReadUint8("status", 8)
+	status, _statusErr := readBuffer.ReadUint8("status", 8)
 	if _statusErr != nil {
 		return nil, errors.Wrap(_statusErr, "Error parsing 'status' field")
 	}
 
 	// Simple Field (transactionCounter)
-	transactionCounter, _transactionCounterErr := io.ReadUint16("transactionCounter", 16)
+	transactionCounter, _transactionCounterErr := readBuffer.ReadUint16("transactionCounter", 16)
 	if _transactionCounterErr != nil {
 		return nil, errors.Wrap(_transactionCounterErr, "Error parsing 'transactionCounter' field")
 	}
@@ -190,7 +183,7 @@ func DF1ResponseMessageParse(io utils.ReadBuffer, payloadLength uint16) (*DF1Res
 	var typeSwitchError error
 	switch {
 	case commandCode == 0x4F: // DF1CommandResponseMessageProtectedTypedLogicalRead
-		_parent, typeSwitchError = DF1CommandResponseMessageProtectedTypedLogicalReadParse(io, payloadLength, status)
+		_parent, typeSwitchError = DF1CommandResponseMessageProtectedTypedLogicalReadParse(readBuffer, payloadLength, status)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -199,7 +192,7 @@ func DF1ResponseMessageParse(io utils.ReadBuffer, payloadLength uint16) (*DF1Res
 		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
 	}
 
-	if closeErr := io.CloseContext("DF1ResponseMessage"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("DF1ResponseMessage"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -208,18 +201,18 @@ func DF1ResponseMessageParse(io utils.ReadBuffer, payloadLength uint16) (*DF1Res
 	return _parent, nil
 }
 
-func (m *DF1ResponseMessage) Serialize(io utils.WriteBuffer) error {
-	return m.Child.Serialize(io)
+func (m *DF1ResponseMessage) Serialize(writeBuffer utils.WriteBuffer) error {
+	return m.Child.Serialize(writeBuffer)
 }
 
-func (m *DF1ResponseMessage) SerializeParent(io utils.WriteBuffer, child IDF1ResponseMessage, serializeChildFunction func() error) error {
-	if pushErr := io.PushContext("DF1ResponseMessage"); pushErr != nil {
+func (m *DF1ResponseMessage) SerializeParent(writeBuffer utils.WriteBuffer, child IDF1ResponseMessage, serializeChildFunction func() error) error {
+	if pushErr := writeBuffer.PushContext("DF1ResponseMessage"); pushErr != nil {
 		return pushErr
 	}
 
 	// Reserved Field (reserved)
 	{
-		_err := io.WriteUint8("reserved", 8, uint8(0x00))
+		_err := writeBuffer.WriteUint8("reserved", 8, uint8(0x00))
 		if _err != nil {
 			return errors.Wrap(_err, "Error serializing 'reserved' field")
 		}
@@ -227,21 +220,21 @@ func (m *DF1ResponseMessage) SerializeParent(io utils.WriteBuffer, child IDF1Res
 
 	// Simple Field (destinationAddress)
 	destinationAddress := uint8(m.DestinationAddress)
-	_destinationAddressErr := io.WriteUint8("destinationAddress", 8, (destinationAddress))
+	_destinationAddressErr := writeBuffer.WriteUint8("destinationAddress", 8, (destinationAddress))
 	if _destinationAddressErr != nil {
 		return errors.Wrap(_destinationAddressErr, "Error serializing 'destinationAddress' field")
 	}
 
 	// Simple Field (sourceAddress)
 	sourceAddress := uint8(m.SourceAddress)
-	_sourceAddressErr := io.WriteUint8("sourceAddress", 8, (sourceAddress))
+	_sourceAddressErr := writeBuffer.WriteUint8("sourceAddress", 8, (sourceAddress))
 	if _sourceAddressErr != nil {
 		return errors.Wrap(_sourceAddressErr, "Error serializing 'sourceAddress' field")
 	}
 
 	// Reserved Field (reserved)
 	{
-		_err := io.WriteUint8("reserved", 8, uint8(0x00))
+		_err := writeBuffer.WriteUint8("reserved", 8, uint8(0x00))
 		if _err != nil {
 			return errors.Wrap(_err, "Error serializing 'reserved' field")
 		}
@@ -249,7 +242,7 @@ func (m *DF1ResponseMessage) SerializeParent(io utils.WriteBuffer, child IDF1Res
 
 	// Discriminator Field (commandCode) (Used as input to a switch field)
 	commandCode := uint8(child.CommandCode())
-	_commandCodeErr := io.WriteUint8("commandCode", 8, (commandCode))
+	_commandCodeErr := writeBuffer.WriteUint8("commandCode", 8, (commandCode))
 
 	if _commandCodeErr != nil {
 		return errors.Wrap(_commandCodeErr, "Error serializing 'commandCode' field")
@@ -257,14 +250,14 @@ func (m *DF1ResponseMessage) SerializeParent(io utils.WriteBuffer, child IDF1Res
 
 	// Simple Field (status)
 	status := uint8(m.Status)
-	_statusErr := io.WriteUint8("status", 8, (status))
+	_statusErr := writeBuffer.WriteUint8("status", 8, (status))
 	if _statusErr != nil {
 		return errors.Wrap(_statusErr, "Error serializing 'status' field")
 	}
 
 	// Simple Field (transactionCounter)
 	transactionCounter := uint16(m.TransactionCounter)
-	_transactionCounterErr := io.WriteUint16("transactionCounter", 16, (transactionCounter))
+	_transactionCounterErr := writeBuffer.WriteUint16("transactionCounter", 16, (transactionCounter))
 	if _transactionCounterErr != nil {
 		return errors.Wrap(_transactionCounterErr, "Error serializing 'transactionCounter' field")
 	}
@@ -275,159 +268,8 @@ func (m *DF1ResponseMessage) SerializeParent(io utils.WriteBuffer, child IDF1Res
 		return errors.Wrap(_typeSwitchErr, "Error serializing sub-type field")
 	}
 
-	if popErr := io.PopContext("DF1ResponseMessage"); popErr != nil {
+	if popErr := writeBuffer.PopContext("DF1ResponseMessage"); popErr != nil {
 		return popErr
 	}
 	return nil
 }
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *DF1ResponseMessage) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	if start.Attr != nil && len(start.Attr) > 0 {
-		switch start.Attr[0].Value {
-		}
-	}
-	for {
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "destinationAddress":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.DestinationAddress = data
-			case "sourceAddress":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.SourceAddress = data
-			case "status":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Status = data
-			case "transactionCounter":
-				var data uint16
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.TransactionCounter = data
-			default:
-				attr := start.Attr
-				if attr == nil || len(attr) <= 0 {
-					// TODO: workaround for bug with nested lists
-					attr = tok.Attr
-				}
-				if attr == nil || len(attr) <= 0 {
-					panic("Couldn't determine class type for childs of DF1ResponseMessage")
-				}
-				switch attr[0].Value {
-				case "org.apache.plc4x.java.ab-eth.readwrite.DF1CommandResponseMessageProtectedTypedLogicalRead":
-					var dt *DF1CommandResponseMessageProtectedTypedLogicalRead
-					if m.Child != nil {
-						dt = m.Child.(*DF1CommandResponseMessageProtectedTypedLogicalRead)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				}
-			}
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *DF1ResponseMessage) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	className := reflect.TypeOf(m.Child).String()
-	className = "org.apache.plc4x.java.ab-eth.readwrite." + className[strings.LastIndex(className, ".")+1:]
-	if err := e.EncodeToken(xml.StartElement{Name: start.Name, Attr: []xml.Attr{
-		{Name: xml.Name{Local: "className"}, Value: className},
-	}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.DestinationAddress, xml.StartElement{Name: xml.Name{Local: "destinationAddress"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.SourceAddress, xml.StartElement{Name: xml.Name{Local: "sourceAddress"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.Status, xml.StartElement{Name: xml.Name{Local: "status"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.TransactionCounter, xml.StartElement{Name: xml.Name{Local: "transactionCounter"}}); err != nil {
-		return err
-	}
-	marshaller, ok := m.Child.(xml.Marshaler)
-	if !ok {
-		return errors.Errorf("child is not castable to Marshaler. Actual type %T", m.Child)
-	}
-	if err := marshaller.MarshalXML(e, start); err != nil {
-		return err
-	}
-	if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m DF1ResponseMessage) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *DF1ResponseMessage) Box(name string, width int) utils.AsciiBox {
-	return m.Child.Box(name, width)
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *DF1ResponseMessage) BoxParent(name string, width int, childBoxer func() []utils.AsciiBox) utils.AsciiBox {
-	boxName := "DF1ResponseMessage"
-	if name != "" {
-		boxName += "/" + name
-	}
-	boxes := make([]utils.AsciiBox, 0)
-	// Reserved Field (reserved)
-	// reserved field can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("reserved", uint8(0x00), -1))
-	// Simple field (case simple)
-	// uint8 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("DestinationAddress", m.DestinationAddress, -1))
-	// Simple field (case simple)
-	// uint8 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("SourceAddress", m.SourceAddress, -1))
-	// Reserved Field (reserved)
-	// reserved field can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("reserved", uint8(0x00), -1))
-	// Discriminator Field (commandCode) (Used as input to a switch field)
-	commandCode := uint8(m.Child.CommandCode())
-	// uint8 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("CommandCode", commandCode, -1))
-	// Simple field (case simple)
-	// uint8 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("Status", m.Status, -1))
-	// Simple field (case simple)
-	// uint16 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("TransactionCounter", m.TransactionCounter, -1))
-	// Switch field (Depending on the discriminator values, passes the boxing to a sub-type)
-	boxes = append(boxes, childBoxer()...)
-	return utils.BoxBox(boxName, utils.AlignBoxes(boxes, width-2), 0)
-}
diff --git a/plc4go/internal/plc4go/ads/readwrite/XmlParserHelper.go b/plc4go/internal/plc4go/ads/readwrite/XmlParserHelper.go
index 554ada5..941d93f 100644
--- a/plc4go/internal/plc4go/ads/readwrite/XmlParserHelper.go
+++ b/plc4go/internal/plc4go/ads/readwrite/XmlParserHelper.go
@@ -20,7 +20,6 @@
 package readwrite
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/ads/readwrite/model"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
@@ -38,12 +37,13 @@ func init() {
 	_ = strconv.Atoi
 	_ = strings.Join
 	_ = utils.Dump
-	_ = xml.NewDecoder
 }
 
 func (m AdsXmlParserHelper) Parse(typeName string, xmlString string, parserArguments ...string) (interface{}, error) {
 	switch typeName {
 	case "AdsMultiRequestItem":
+		// TODO: implement class org.apache.plc4x.plugins.codegenerator.language.mspec.model.definitions.DefaultComplexTypeDefinition
+		_ = model.NewAdsMultiRequestItem
 		return nil, errors.New("AdsMultiRequestItem unmappable")
 	case "AmsTCPPacket":
 		return model.AmsTCPPacketParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
@@ -56,6 +56,8 @@ func (m AdsXmlParserHelper) Parse(typeName string, xmlString string, parserArgum
 	case "AmsSerialAcknowledgeFrame":
 		return model.AmsSerialAcknowledgeFrameParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "AdsData":
+		// TODO: implement class org.apache.plc4x.plugins.codegenerator.language.mspec.model.definitions.DefaultComplexTypeDefinition
+		_ = model.NewAdsData
 		return nil, errors.New("AdsData unmappable")
 	case "AmsNetId":
 		return model.AmsNetIdParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
@@ -68,87 +70,3 @@ func (m AdsXmlParserHelper) Parse(typeName string, xmlString string, parserArgum
 	}
 	return nil, errors.Errorf("Unsupported type %s", typeName)
 }
-
-// Deprecated: will be removed in favor of Parse soon
-func (m AdsXmlParserHelper) ParseOld(typeName string, xmlString string) (interface{}, error) {
-	switch typeName {
-	case "AdsMultiRequestItem":
-		var obj *model.AdsMultiRequestItem
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "AmsTCPPacket":
-		var obj *model.AmsTCPPacket
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "State":
-		var obj *model.State
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "AmsPacket":
-		var obj *model.AmsPacket
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "AmsSerialFrame":
-		var obj *model.AmsSerialFrame
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "AmsSerialAcknowledgeFrame":
-		var obj *model.AmsSerialAcknowledgeFrame
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "AdsData":
-		var obj *model.AdsData
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "AmsNetId":
-		var obj *model.AmsNetId
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "AdsStampHeader":
-		var obj *model.AdsStampHeader
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "AmsSerialResetFrame":
-		var obj *model.AmsSerialResetFrame
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	case "AdsNotificationSample":
-		var obj *model.AdsNotificationSample
-		err := xml.Unmarshal([]byte(xmlString), &obj)
-		if err != nil {
-			return nil, errors.Wrap(err, "error unmarshalling xml")
-		}
-		return obj, nil
-	}
-	return nil, errors.Errorf("Unsupported type %s", typeName)
-}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
index fe287da..c9ce76f 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
@@ -20,11 +20,9 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
 	"github.com/rs/zerolog/log"
-	"io"
 	"math/big"
 )
 
@@ -45,9 +43,7 @@ type AdsAddDeviceNotificationRequest struct {
 type IAdsAddDeviceNotificationRequest interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -136,50 +132,50 @@ func (m *AdsAddDeviceNotificationRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsAddDeviceNotificationRequestParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsAddDeviceNotificationRequest"); pullErr != nil {
+func AdsAddDeviceNotificationRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsAddDeviceNotificationRequest"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (indexGroup)
-	indexGroup, _indexGroupErr := io.ReadUint32("indexGroup", 32)
+	indexGroup, _indexGroupErr := readBuffer.ReadUint32("indexGroup", 32)
 	if _indexGroupErr != nil {
 		return nil, errors.Wrap(_indexGroupErr, "Error parsing 'indexGroup' field")
 	}
 
 	// Simple Field (indexOffset)
-	indexOffset, _indexOffsetErr := io.ReadUint32("indexOffset", 32)
+	indexOffset, _indexOffsetErr := readBuffer.ReadUint32("indexOffset", 32)
 	if _indexOffsetErr != nil {
 		return nil, errors.Wrap(_indexOffsetErr, "Error parsing 'indexOffset' field")
 	}
 
 	// Simple Field (length)
-	length, _lengthErr := io.ReadUint32("length", 32)
+	length, _lengthErr := readBuffer.ReadUint32("length", 32)
 	if _lengthErr != nil {
 		return nil, errors.Wrap(_lengthErr, "Error parsing 'length' field")
 	}
 
 	// Simple Field (transmissionMode)
-	transmissionMode, _transmissionModeErr := io.ReadUint32("transmissionMode", 32)
+	transmissionMode, _transmissionModeErr := readBuffer.ReadUint32("transmissionMode", 32)
 	if _transmissionModeErr != nil {
 		return nil, errors.Wrap(_transmissionModeErr, "Error parsing 'transmissionMode' field")
 	}
 
 	// Simple Field (maxDelay)
-	maxDelay, _maxDelayErr := io.ReadUint32("maxDelay", 32)
+	maxDelay, _maxDelayErr := readBuffer.ReadUint32("maxDelay", 32)
 	if _maxDelayErr != nil {
 		return nil, errors.Wrap(_maxDelayErr, "Error parsing 'maxDelay' field")
 	}
 
 	// Simple Field (cycleTime)
-	cycleTime, _cycleTimeErr := io.ReadUint32("cycleTime", 32)
+	cycleTime, _cycleTimeErr := readBuffer.ReadUint32("cycleTime", 32)
 	if _cycleTimeErr != nil {
 		return nil, errors.Wrap(_cycleTimeErr, "Error parsing 'cycleTime' field")
 	}
 
 	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
 	{
-		reserved, _err := io.ReadBigInt("reserved", 128)
+		reserved, _err := readBuffer.ReadBigInt("reserved", 128)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'reserved' field")
 		}
@@ -191,7 +187,7 @@ func AdsAddDeviceNotificationRequestParse(io utils.ReadBuffer) (*AdsData, error)
 		}
 	}
 
-	if closeErr := io.CloseContext("AdsAddDeviceNotificationRequest"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsAddDeviceNotificationRequest"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -209,187 +205,66 @@ func AdsAddDeviceNotificationRequestParse(io utils.ReadBuffer) (*AdsData, error)
 	return _child.Parent, nil
 }
 
-func (m *AdsAddDeviceNotificationRequest) Serialize(io utils.WriteBuffer) error {
+func (m *AdsAddDeviceNotificationRequest) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsAddDeviceNotificationRequest"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsAddDeviceNotificationRequest"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (indexGroup)
 		indexGroup := uint32(m.IndexGroup)
-		_indexGroupErr := io.WriteUint32("indexGroup", 32, (indexGroup))
+		_indexGroupErr := writeBuffer.WriteUint32("indexGroup", 32, (indexGroup))
 		if _indexGroupErr != nil {
 			return errors.Wrap(_indexGroupErr, "Error serializing 'indexGroup' field")
 		}
 
 		// Simple Field (indexOffset)
 		indexOffset := uint32(m.IndexOffset)
-		_indexOffsetErr := io.WriteUint32("indexOffset", 32, (indexOffset))
+		_indexOffsetErr := writeBuffer.WriteUint32("indexOffset", 32, (indexOffset))
 		if _indexOffsetErr != nil {
 			return errors.Wrap(_indexOffsetErr, "Error serializing 'indexOffset' field")
 		}
 
 		// Simple Field (length)
 		length := uint32(m.Length)
-		_lengthErr := io.WriteUint32("length", 32, (length))
+		_lengthErr := writeBuffer.WriteUint32("length", 32, (length))
 		if _lengthErr != nil {
 			return errors.Wrap(_lengthErr, "Error serializing 'length' field")
 		}
 
 		// Simple Field (transmissionMode)
 		transmissionMode := uint32(m.TransmissionMode)
-		_transmissionModeErr := io.WriteUint32("transmissionMode", 32, (transmissionMode))
+		_transmissionModeErr := writeBuffer.WriteUint32("transmissionMode", 32, (transmissionMode))
 		if _transmissionModeErr != nil {
 			return errors.Wrap(_transmissionModeErr, "Error serializing 'transmissionMode' field")
 		}
 
 		// Simple Field (maxDelay)
 		maxDelay := uint32(m.MaxDelay)
-		_maxDelayErr := io.WriteUint32("maxDelay", 32, (maxDelay))
+		_maxDelayErr := writeBuffer.WriteUint32("maxDelay", 32, (maxDelay))
 		if _maxDelayErr != nil {
 			return errors.Wrap(_maxDelayErr, "Error serializing 'maxDelay' field")
 		}
 
 		// Simple Field (cycleTime)
 		cycleTime := uint32(m.CycleTime)
-		_cycleTimeErr := io.WriteUint32("cycleTime", 32, (cycleTime))
+		_cycleTimeErr := writeBuffer.WriteUint32("cycleTime", 32, (cycleTime))
 		if _cycleTimeErr != nil {
 			return errors.Wrap(_cycleTimeErr, "Error serializing 'cycleTime' field")
 		}
 
 		// Reserved Field (reserved)
 		{
-			_err := io.WriteBigInt("reserved", 128, big.NewInt(0x0000))
+			_err := writeBuffer.WriteBigInt("reserved", 128, big.NewInt(0x0000))
 			if _err != nil {
 				return errors.Wrap(_err, "Error serializing 'reserved' field")
 			}
 		}
 
-		if popErr := io.PopContext("AdsAddDeviceNotificationRequest"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsAddDeviceNotificationRequest"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsAddDeviceNotificationRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "indexGroup":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.IndexGroup = data
-			case "indexOffset":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.IndexOffset = data
-			case "length":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Length = data
-			case "transmissionMode":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.TransmissionMode = data
-			case "maxDelay":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.MaxDelay = data
-			case "cycleTime":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.CycleTime = data
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsAddDeviceNotificationRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.IndexGroup, xml.StartElement{Name: xml.Name{Local: "indexGroup"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.IndexOffset, xml.StartElement{Name: xml.Name{Local: "indexOffset"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.Length, xml.StartElement{Name: xml.Name{Local: "length"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.TransmissionMode, xml.StartElement{Name: xml.Name{Local: "transmissionMode"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.MaxDelay, xml.StartElement{Name: xml.Name{Local: "maxDelay"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.CycleTime, xml.StartElement{Name: xml.Name{Local: "cycleTime"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsAddDeviceNotificationRequest) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsAddDeviceNotificationRequest) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsAddDeviceNotificationRequest"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("IndexGroup", m.IndexGroup, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("IndexOffset", m.IndexOffset, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("Length", m.Length, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("TransmissionMode", m.TransmissionMode, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("MaxDelay", m.MaxDelay, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("CycleTime", m.CycleTime, -1))
-		// Reserved Field (reserved)
-		// reserved field can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("reserved", big.NewInt(0x0000), -1))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
index 55ffc88..34120a0 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -39,9 +37,7 @@ type AdsAddDeviceNotificationResponse struct {
 type IAdsAddDeviceNotificationResponse interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -111,31 +107,31 @@ func (m *AdsAddDeviceNotificationResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsAddDeviceNotificationResponseParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsAddDeviceNotificationResponse"); pullErr != nil {
+func AdsAddDeviceNotificationResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsAddDeviceNotificationResponse"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if pullErr := io.PullContext("result"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("result"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (result)
-	result, _resultErr := ReturnCodeParse(io)
+	result, _resultErr := ReturnCodeParse(readBuffer)
 	if _resultErr != nil {
 		return nil, errors.Wrap(_resultErr, "Error parsing 'result' field")
 	}
-	if closeErr := io.CloseContext("result"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("result"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Simple Field (notificationHandle)
-	notificationHandle, _notificationHandleErr := io.ReadUint32("notificationHandle", 32)
+	notificationHandle, _notificationHandleErr := readBuffer.ReadUint32("notificationHandle", 32)
 	if _notificationHandleErr != nil {
 		return nil, errors.Wrap(_notificationHandleErr, "Error parsing 'notificationHandle' field")
 	}
 
-	if closeErr := io.CloseContext("AdsAddDeviceNotificationResponse"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsAddDeviceNotificationResponse"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -149,18 +145,18 @@ func AdsAddDeviceNotificationResponseParse(io utils.ReadBuffer) (*AdsData, error
 	return _child.Parent, nil
 }
 
-func (m *AdsAddDeviceNotificationResponse) Serialize(io utils.WriteBuffer) error {
+func (m *AdsAddDeviceNotificationResponse) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsAddDeviceNotificationResponse"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsAddDeviceNotificationResponse"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (result)
-		if pushErr := io.PushContext("result"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("result"); pushErr != nil {
 			return pushErr
 		}
-		_resultErr := m.Result.Serialize(io)
-		if popErr := io.PopContext("result"); popErr != nil {
+		_resultErr := m.Result.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("result"); popErr != nil {
 			return popErr
 		}
 		if _resultErr != nil {
@@ -169,84 +165,15 @@ func (m *AdsAddDeviceNotificationResponse) Serialize(io utils.WriteBuffer) error
 
 		// Simple Field (notificationHandle)
 		notificationHandle := uint32(m.NotificationHandle)
-		_notificationHandleErr := io.WriteUint32("notificationHandle", 32, (notificationHandle))
+		_notificationHandleErr := writeBuffer.WriteUint32("notificationHandle", 32, (notificationHandle))
 		if _notificationHandleErr != nil {
 			return errors.Wrap(_notificationHandleErr, "Error serializing 'notificationHandle' field")
 		}
 
-		if popErr := io.PopContext("AdsAddDeviceNotificationResponse"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsAddDeviceNotificationResponse"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsAddDeviceNotificationResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "result":
-				var data ReturnCode
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Result = data
-			case "notificationHandle":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.NotificationHandle = data
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsAddDeviceNotificationResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.Result, xml.StartElement{Name: xml.Name{Local: "result"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.NotificationHandle, xml.StartElement{Name: xml.Name{Local: "notificationHandle"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsAddDeviceNotificationResponse) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsAddDeviceNotificationResponse) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsAddDeviceNotificationResponse"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Complex field (case complex)
-		boxes = append(boxes, m.Result.Box("result", width-2))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("NotificationHandle", m.NotificationHandle, -1))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
index 8f67e67..184ec49 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
@@ -20,12 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
-	"reflect"
-	"strings"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -41,22 +37,19 @@ type IAdsData interface {
 	Response() bool
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 type IAdsDataParent interface {
-	SerializeParent(io utils.WriteBuffer, child IAdsData, serializeChildFunction func() error) error
+	SerializeParent(writeBuffer utils.WriteBuffer, child IAdsData, serializeChildFunction func() error) error
 	GetTypeName() string
 }
 
 type IAdsDataChild interface {
-	Serialize(io utils.WriteBuffer) error
+	Serialize(writeBuffer utils.WriteBuffer) error
 	InitializeParent(parent *AdsData)
 	GetTypeName() string
 	IAdsData
-	utils.AsciiBoxer
 }
 
 func NewAdsData() *AdsData {
@@ -98,8 +91,8 @@ func (m *AdsData) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsDataParse(io utils.ReadBuffer, commandId *CommandId, response bool) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsData"); pullErr != nil {
+func AdsDataParse(readBuffer utils.ReadBuffer, commandId *CommandId, response bool) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsData"); pullErr != nil {
 		return nil, pullErr
 	}
 
@@ -108,45 +101,45 @@ func AdsDataParse(io utils.ReadBuffer, commandId *CommandId, response bool) (*Ad
 	var typeSwitchError error
 	switch {
 	case *commandId == CommandId_INVALID && response == false: // AdsInvalidRequest
-		_parent, typeSwitchError = AdsInvalidRequestParse(io)
+		_parent, typeSwitchError = AdsInvalidRequestParse(readBuffer)
 	case *commandId == CommandId_INVALID && response == true: // AdsInvalidResponse
-		_parent, typeSwitchError = AdsInvalidResponseParse(io)
+		_parent, typeSwitchError = AdsInvalidResponseParse(readBuffer)
 	case *commandId == CommandId_ADS_READ_DEVICE_INFO && response == false: // AdsReadDeviceInfoRequest
-		_parent, typeSwitchError = AdsReadDeviceInfoRequestParse(io)
+		_parent, typeSwitchError = AdsReadDeviceInfoRequestParse(readBuffer)
 	case *commandId == CommandId_ADS_READ_DEVICE_INFO && response == true: // AdsReadDeviceInfoResponse
-		_parent, typeSwitchError = AdsReadDeviceInfoResponseParse(io)
+		_parent, typeSwitchError = AdsReadDeviceInfoResponseParse(readBuffer)
 	case *commandId == CommandId_ADS_READ && response == false: // AdsReadRequest
-		_parent, typeSwitchError = AdsReadRequestParse(io)
+		_parent, typeSwitchError = AdsReadRequestParse(readBuffer)
 	case *commandId == CommandId_ADS_READ && response == true: // AdsReadResponse
-		_parent, typeSwitchError = AdsReadResponseParse(io)
+		_parent, typeSwitchError = AdsReadResponseParse(readBuffer)
 	case *commandId == CommandId_ADS_WRITE && response == false: // AdsWriteRequest
-		_parent, typeSwitchError = AdsWriteRequestParse(io)
+		_parent, typeSwitchError = AdsWriteRequestParse(readBuffer)
 	case *commandId == CommandId_ADS_WRITE && response == true: // AdsWriteResponse
-		_parent, typeSwitchError = AdsWriteResponseParse(io)
+		_parent, typeSwitchError = AdsWriteResponseParse(readBuffer)
 	case *commandId == CommandId_ADS_READ_STATE && response == false: // AdsReadStateRequest
-		_parent, typeSwitchError = AdsReadStateRequestParse(io)
+		_parent, typeSwitchError = AdsReadStateRequestParse(readBuffer)
 	case *commandId == CommandId_ADS_READ_STATE && response == true: // AdsReadStateResponse
-		_parent, typeSwitchError = AdsReadStateResponseParse(io)
+		_parent, typeSwitchError = AdsReadStateResponseParse(readBuffer)
 	case *commandId == CommandId_ADS_WRITE_CONTROL && response == false: // AdsWriteControlRequest
-		_parent, typeSwitchError = AdsWriteControlRequestParse(io)
+		_parent, typeSwitchError = AdsWriteControlRequestParse(readBuffer)
 	case *commandId == CommandId_ADS_WRITE_CONTROL && response == true: // AdsWriteControlResponse
-		_parent, typeSwitchError = AdsWriteControlResponseParse(io)
+		_parent, typeSwitchError = AdsWriteControlResponseParse(readBuffer)
 	case *commandId == CommandId_ADS_ADD_DEVICE_NOTIFICATION && response == false: // AdsAddDeviceNotificationRequest
-		_parent, typeSwitchError = AdsAddDeviceNotificationRequestParse(io)
+		_parent, typeSwitchError = AdsAddDeviceNotificationRequestParse(readBuffer)
 	case *commandId == CommandId_ADS_ADD_DEVICE_NOTIFICATION && response == true: // AdsAddDeviceNotificationResponse
-		_parent, typeSwitchError = AdsAddDeviceNotificationResponseParse(io)
+		_parent, typeSwitchError = AdsAddDeviceNotificationResponseParse(readBuffer)
 	case *commandId == CommandId_ADS_DELETE_DEVICE_NOTIFICATION && response == false: // AdsDeleteDeviceNotificationRequest
-		_parent, typeSwitchError = AdsDeleteDeviceNotificationRequestParse(io)
+		_parent, typeSwitchError = AdsDeleteDeviceNotificationRequestParse(readBuffer)
 	case *commandId == CommandId_ADS_DELETE_DEVICE_NOTIFICATION && response == true: // AdsDeleteDeviceNotificationResponse
-		_parent, typeSwitchError = AdsDeleteDeviceNotificationResponseParse(io)
+		_parent, typeSwitchError = AdsDeleteDeviceNotificationResponseParse(readBuffer)
 	case *commandId == CommandId_ADS_DEVICE_NOTIFICATION && response == false: // AdsDeviceNotificationRequest
-		_parent, typeSwitchError = AdsDeviceNotificationRequestParse(io)
+		_parent, typeSwitchError = AdsDeviceNotificationRequestParse(readBuffer)
 	case *commandId == CommandId_ADS_DEVICE_NOTIFICATION && response == true: // AdsDeviceNotificationResponse
-		_parent, typeSwitchError = AdsDeviceNotificationResponseParse(io)
+		_parent, typeSwitchError = AdsDeviceNotificationResponseParse(readBuffer)
 	case *commandId == CommandId_ADS_READ_WRITE && response == false: // AdsReadWriteRequest
-		_parent, typeSwitchError = AdsReadWriteRequestParse(io)
+		_parent, typeSwitchError = AdsReadWriteRequestParse(readBuffer)
 	case *commandId == CommandId_ADS_READ_WRITE && response == true: // AdsReadWriteResponse
-		_parent, typeSwitchError = AdsReadWriteResponseParse(io)
+		_parent, typeSwitchError = AdsReadWriteResponseParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -155,7 +148,7 @@ func AdsDataParse(io utils.ReadBuffer, commandId *CommandId, response bool) (*Ad
 		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
 	}
 
-	if closeErr := io.CloseContext("AdsData"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsData"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -164,12 +157,12 @@ func AdsDataParse(io utils.ReadBuffer, commandId *CommandId, response bool) (*Ad
 	return _parent, nil
 }
 
-func (m *AdsData) Serialize(io utils.WriteBuffer) error {
-	return m.Child.Serialize(io)
+func (m *AdsData) Serialize(writeBuffer utils.WriteBuffer) error {
+	return m.Child.Serialize(writeBuffer)
 }
 
-func (m *AdsData) SerializeParent(io utils.WriteBuffer, child IAdsData, serializeChildFunction func() error) error {
-	if pushErr := io.PushContext("AdsData"); pushErr != nil {
+func (m *AdsData) SerializeParent(writeBuffer utils.WriteBuffer, child IAdsData, serializeChildFunction func() error) error {
+	if pushErr := writeBuffer.PushContext("AdsData"); pushErr != nil {
 		return pushErr
 	}
 
@@ -179,364 +172,8 @@ func (m *AdsData) SerializeParent(io utils.WriteBuffer, child IAdsData, serializ
 		return errors.Wrap(_typeSwitchErr, "Error serializing sub-type field")
 	}
 
-	if popErr := io.PopContext("AdsData"); popErr != nil {
+	if popErr := writeBuffer.PopContext("AdsData"); popErr != nil {
 		return popErr
 	}
 	return nil
 }
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsData) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	if start.Attr != nil && len(start.Attr) > 0 {
-		switch start.Attr[0].Value {
-		// AdsInvalidRequest needs special treatment as it has no fields
-		case "org.apache.plc4x.java.ads.readwrite.AdsInvalidRequest":
-			if m.Child == nil {
-				m.Child = &AdsInvalidRequest{
-					Parent: m,
-				}
-			}
-		// AdsInvalidResponse needs special treatment as it has no fields
-		case "org.apache.plc4x.java.ads.readwrite.AdsInvalidResponse":
-			if m.Child == nil {
-				m.Child = &AdsInvalidResponse{
-					Parent: m,
-				}
-			}
-		// AdsReadDeviceInfoRequest needs special treatment as it has no fields
-		case "org.apache.plc4x.java.ads.readwrite.AdsReadDeviceInfoRequest":
-			if m.Child == nil {
-				m.Child = &AdsReadDeviceInfoRequest{
-					Parent: m,
-				}
-			}
-		// AdsReadStateRequest needs special treatment as it has no fields
-		case "org.apache.plc4x.java.ads.readwrite.AdsReadStateRequest":
-			if m.Child == nil {
-				m.Child = &AdsReadStateRequest{
-					Parent: m,
-				}
-			}
-		// AdsDeviceNotificationResponse needs special treatment as it has no fields
-		case "org.apache.plc4x.java.ads.readwrite.AdsDeviceNotificationResponse":
-			if m.Child == nil {
-				m.Child = &AdsDeviceNotificationResponse{
-					Parent: m,
-				}
-			}
-		}
-	}
-	for {
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			default:
-				attr := start.Attr
-				if attr == nil || len(attr) <= 0 {
-					// TODO: workaround for bug with nested lists
-					attr = tok.Attr
-				}
-				if attr == nil || len(attr) <= 0 {
-					panic("Couldn't determine class type for childs of AdsData")
-				}
-				switch attr[0].Value {
-				case "org.apache.plc4x.java.ads.readwrite.AdsInvalidRequest":
-					var dt *AdsInvalidRequest
-					if m.Child != nil {
-						dt = m.Child.(*AdsInvalidRequest)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsInvalidResponse":
-					var dt *AdsInvalidResponse
-					if m.Child != nil {
-						dt = m.Child.(*AdsInvalidResponse)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsReadDeviceInfoRequest":
-					var dt *AdsReadDeviceInfoRequest
-					if m.Child != nil {
-						dt = m.Child.(*AdsReadDeviceInfoRequest)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsReadDeviceInfoResponse":
-					var dt *AdsReadDeviceInfoResponse
-					if m.Child != nil {
-						dt = m.Child.(*AdsReadDeviceInfoResponse)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsReadRequest":
-					var dt *AdsReadRequest
-					if m.Child != nil {
-						dt = m.Child.(*AdsReadRequest)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsReadResponse":
-					var dt *AdsReadResponse
-					if m.Child != nil {
-						dt = m.Child.(*AdsReadResponse)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsWriteRequest":
-					var dt *AdsWriteRequest
-					if m.Child != nil {
-						dt = m.Child.(*AdsWriteRequest)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsWriteResponse":
-					var dt *AdsWriteResponse
-					if m.Child != nil {
-						dt = m.Child.(*AdsWriteResponse)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsReadStateRequest":
-					var dt *AdsReadStateRequest
-					if m.Child != nil {
-						dt = m.Child.(*AdsReadStateRequest)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsReadStateResponse":
-					var dt *AdsReadStateResponse
-					if m.Child != nil {
-						dt = m.Child.(*AdsReadStateResponse)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsWriteControlRequest":
-					var dt *AdsWriteControlRequest
-					if m.Child != nil {
-						dt = m.Child.(*AdsWriteControlRequest)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsWriteControlResponse":
-					var dt *AdsWriteControlResponse
-					if m.Child != nil {
-						dt = m.Child.(*AdsWriteControlResponse)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsAddDeviceNotificationRequest":
-					var dt *AdsAddDeviceNotificationRequest
-					if m.Child != nil {
-						dt = m.Child.(*AdsAddDeviceNotificationRequest)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsAddDeviceNotificationResponse":
-					var dt *AdsAddDeviceNotificationResponse
-					if m.Child != nil {
-						dt = m.Child.(*AdsAddDeviceNotificationResponse)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsDeleteDeviceNotificationRequest":
-					var dt *AdsDeleteDeviceNotificationRequest
-					if m.Child != nil {
-						dt = m.Child.(*AdsDeleteDeviceNotificationRequest)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsDeleteDeviceNotificationResponse":
-					var dt *AdsDeleteDeviceNotificationResponse
-					if m.Child != nil {
-						dt = m.Child.(*AdsDeleteDeviceNotificationResponse)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsDeviceNotificationRequest":
-					var dt *AdsDeviceNotificationRequest
-					if m.Child != nil {
-						dt = m.Child.(*AdsDeviceNotificationRequest)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsDeviceNotificationResponse":
-					var dt *AdsDeviceNotificationResponse
-					if m.Child != nil {
-						dt = m.Child.(*AdsDeviceNotificationResponse)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsReadWriteRequest":
-					var dt *AdsReadWriteRequest
-					if m.Child != nil {
-						dt = m.Child.(*AdsReadWriteRequest)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsReadWriteResponse":
-					var dt *AdsReadWriteResponse
-					if m.Child != nil {
-						dt = m.Child.(*AdsReadWriteResponse)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				}
-			}
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsData) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	className := reflect.TypeOf(m.Child).String()
-	className = "org.apache.plc4x.java.ads.readwrite." + className[strings.LastIndex(className, ".")+1:]
-	if err := e.EncodeToken(xml.StartElement{Name: start.Name, Attr: []xml.Attr{
-		{Name: xml.Name{Local: "className"}, Value: className},
-	}}); err != nil {
-		return err
-	}
-	marshaller, ok := m.Child.(xml.Marshaler)
-	if !ok {
-		return errors.Errorf("child is not castable to Marshaler. Actual type %T", m.Child)
-	}
-	if err := marshaller.MarshalXML(e, start); err != nil {
-		return err
-	}
-	if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsData) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *AdsData) Box(name string, width int) utils.AsciiBox {
-	return m.Child.Box(name, width)
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *AdsData) BoxParent(name string, width int, childBoxer func() []utils.AsciiBox) utils.AsciiBox {
-	boxName := "AdsData"
-	if name != "" {
-		boxName += "/" + name
-	}
-	boxes := make([]utils.AsciiBox, 0)
-	// Switch field (Depending on the discriminator values, passes the boxing to a sub-type)
-	boxes = append(boxes, childBoxer()...)
-	return utils.BoxBox(boxName, utils.AlignBoxes(boxes, width-2), 0)
-}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDataType.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDataType.go
index 985ce81..1ce143a 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDataType.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDataType.go
@@ -21,7 +21,6 @@ package model
 
 import (
 	"encoding/xml"
-	"fmt"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"io"
 )
@@ -33,9 +32,7 @@ type AdsDataType int8
 type IAdsDataType interface {
 	NumBytes() uint16
 	DataFormatName() string
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 const (
@@ -655,20 +652,18 @@ func (m AdsDataType) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsDataTypeParse(io utils.ReadBuffer) (AdsDataType, error) {
-	val, err := io.ReadInt8("AdsDataType", 8)
+func AdsDataTypeParse(readBuffer utils.ReadBuffer) (AdsDataType, error) {
+	val, err := readBuffer.ReadInt8("AdsDataType", 8)
 	if err != nil {
 		return 0, nil
 	}
 	return AdsDataTypeByValue(val), nil
 }
 
-func (e AdsDataType) Serialize(io utils.WriteBuffer) error {
-	err := io.WriteInt8("AdsDataType", 8, int8(e), utils.WithAdditionalStringRepresentation(e.name()))
-	return err
+func (e AdsDataType) Serialize(writeBuffer utils.WriteBuffer) error {
+	return writeBuffer.WriteInt8("AdsDataType", 8, int8(e), utils.WithAdditionalStringRepresentation(e.name()))
 }
 
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
 func (m *AdsDataType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
 	var token xml.Token
 	var err error
@@ -688,7 +683,6 @@ func (m *AdsDataType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
 	}
 }
 
-// Deprecated: the utils.WriteBufferReadBased should be used instead
 func (m AdsDataType) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
 	if err := e.EncodeElement(m.String(), start); err != nil {
 		return err
@@ -785,12 +779,3 @@ func (e AdsDataType) name() string {
 func (e AdsDataType) String() string {
 	return e.name()
 }
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsDataType) Box(s string, i int) utils.AsciiBox {
-	boxName := "AdsDataType"
-	if s != "" {
-		boxName += "/" + s
-	}
-	return utils.BoxString(boxName, fmt.Sprintf("%#0*x %s", 2, int8(m), m.name()), -1)
-}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
index 2c1ee8b..673cca7 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -38,9 +36,7 @@ type AdsDeleteDeviceNotificationRequest struct {
 type IAdsDeleteDeviceNotificationRequest interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -106,18 +102,18 @@ func (m *AdsDeleteDeviceNotificationRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsDeleteDeviceNotificationRequestParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsDeleteDeviceNotificationRequest"); pullErr != nil {
+func AdsDeleteDeviceNotificationRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsDeleteDeviceNotificationRequest"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (notificationHandle)
-	notificationHandle, _notificationHandleErr := io.ReadUint32("notificationHandle", 32)
+	notificationHandle, _notificationHandleErr := readBuffer.ReadUint32("notificationHandle", 32)
 	if _notificationHandleErr != nil {
 		return nil, errors.Wrap(_notificationHandleErr, "Error parsing 'notificationHandle' field")
 	}
 
-	if closeErr := io.CloseContext("AdsDeleteDeviceNotificationRequest"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsDeleteDeviceNotificationRequest"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -130,81 +126,23 @@ func AdsDeleteDeviceNotificationRequestParse(io utils.ReadBuffer) (*AdsData, err
 	return _child.Parent, nil
 }
 
-func (m *AdsDeleteDeviceNotificationRequest) Serialize(io utils.WriteBuffer) error {
+func (m *AdsDeleteDeviceNotificationRequest) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsDeleteDeviceNotificationRequest"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsDeleteDeviceNotificationRequest"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (notificationHandle)
 		notificationHandle := uint32(m.NotificationHandle)
-		_notificationHandleErr := io.WriteUint32("notificationHandle", 32, (notificationHandle))
+		_notificationHandleErr := writeBuffer.WriteUint32("notificationHandle", 32, (notificationHandle))
 		if _notificationHandleErr != nil {
 			return errors.Wrap(_notificationHandleErr, "Error serializing 'notificationHandle' field")
 		}
 
-		if popErr := io.PopContext("AdsDeleteDeviceNotificationRequest"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsDeleteDeviceNotificationRequest"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsDeleteDeviceNotificationRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "notificationHandle":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.NotificationHandle = data
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsDeleteDeviceNotificationRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.NotificationHandle, xml.StartElement{Name: xml.Name{Local: "notificationHandle"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsDeleteDeviceNotificationRequest) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsDeleteDeviceNotificationRequest) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsDeleteDeviceNotificationRequest"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("NotificationHandle", m.NotificationHandle, -1))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
index b8772dd..0379f72 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -38,9 +36,7 @@ type AdsDeleteDeviceNotificationResponse struct {
 type IAdsDeleteDeviceNotificationResponse interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -106,25 +102,25 @@ func (m *AdsDeleteDeviceNotificationResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsDeleteDeviceNotificationResponseParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsDeleteDeviceNotificationResponse"); pullErr != nil {
+func AdsDeleteDeviceNotificationResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsDeleteDeviceNotificationResponse"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if pullErr := io.PullContext("result"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("result"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (result)
-	result, _resultErr := ReturnCodeParse(io)
+	result, _resultErr := ReturnCodeParse(readBuffer)
 	if _resultErr != nil {
 		return nil, errors.Wrap(_resultErr, "Error parsing 'result' field")
 	}
-	if closeErr := io.CloseContext("result"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("result"); closeErr != nil {
 		return nil, closeErr
 	}
 
-	if closeErr := io.CloseContext("AdsDeleteDeviceNotificationResponse"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsDeleteDeviceNotificationResponse"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -137,85 +133,28 @@ func AdsDeleteDeviceNotificationResponseParse(io utils.ReadBuffer) (*AdsData, er
 	return _child.Parent, nil
 }
 
-func (m *AdsDeleteDeviceNotificationResponse) Serialize(io utils.WriteBuffer) error {
+func (m *AdsDeleteDeviceNotificationResponse) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsDeleteDeviceNotificationResponse"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsDeleteDeviceNotificationResponse"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (result)
-		if pushErr := io.PushContext("result"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("result"); pushErr != nil {
 			return pushErr
 		}
-		_resultErr := m.Result.Serialize(io)
-		if popErr := io.PopContext("result"); popErr != nil {
+		_resultErr := m.Result.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("result"); popErr != nil {
 			return popErr
 		}
 		if _resultErr != nil {
 			return errors.Wrap(_resultErr, "Error serializing 'result' field")
 		}
 
-		if popErr := io.PopContext("AdsDeleteDeviceNotificationResponse"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsDeleteDeviceNotificationResponse"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsDeleteDeviceNotificationResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "result":
-				var data ReturnCode
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Result = data
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsDeleteDeviceNotificationResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.Result, xml.StartElement{Name: xml.Name{Local: "result"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsDeleteDeviceNotificationResponse) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsDeleteDeviceNotificationResponse) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsDeleteDeviceNotificationResponse"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Complex field (case complex)
-		boxes = append(boxes, m.Result.Box("result", width-2))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
index 5dd3e97..ee07802 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -40,9 +38,7 @@ type AdsDeviceNotificationRequest struct {
 type IAdsDeviceNotificationRequest interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -121,41 +117,41 @@ func (m *AdsDeviceNotificationRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsDeviceNotificationRequestParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsDeviceNotificationRequest"); pullErr != nil {
+func AdsDeviceNotificationRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsDeviceNotificationRequest"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (length)
-	length, _lengthErr := io.ReadUint32("length", 32)
+	length, _lengthErr := readBuffer.ReadUint32("length", 32)
 	if _lengthErr != nil {
 		return nil, errors.Wrap(_lengthErr, "Error parsing 'length' field")
 	}
 
 	// Simple Field (stamps)
-	stamps, _stampsErr := io.ReadUint32("stamps", 32)
+	stamps, _stampsErr := readBuffer.ReadUint32("stamps", 32)
 	if _stampsErr != nil {
 		return nil, errors.Wrap(_stampsErr, "Error parsing 'stamps' field")
 	}
 
 	// Array field (adsStampHeaders)
-	if pullErr := io.PullContext("adsStampHeaders", utils.WithRenderAsList(true)); pullErr != nil {
+	if pullErr := readBuffer.PullContext("adsStampHeaders", utils.WithRenderAsList(true)); pullErr != nil {
 		return nil, pullErr
 	}
 	// Count array
 	adsStampHeaders := make([]*AdsStampHeader, stamps)
 	for curItem := uint16(0); curItem < uint16(stamps); curItem++ {
-		_item, _err := AdsStampHeaderParse(io)
+		_item, _err := AdsStampHeaderParse(readBuffer)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'adsStampHeaders' field")
 		}
 		adsStampHeaders[curItem] = _item
 	}
-	if closeErr := io.CloseContext("adsStampHeaders", utils.WithRenderAsList(true)); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("adsStampHeaders", utils.WithRenderAsList(true)); closeErr != nil {
 		return nil, closeErr
 	}
 
-	if closeErr := io.CloseContext("AdsDeviceNotificationRequest"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsDeviceNotificationRequest"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -170,142 +166,46 @@ func AdsDeviceNotificationRequestParse(io utils.ReadBuffer) (*AdsData, error) {
 	return _child.Parent, nil
 }
 
-func (m *AdsDeviceNotificationRequest) Serialize(io utils.WriteBuffer) error {
+func (m *AdsDeviceNotificationRequest) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsDeviceNotificationRequest"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsDeviceNotificationRequest"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (length)
 		length := uint32(m.Length)
-		_lengthErr := io.WriteUint32("length", 32, (length))
+		_lengthErr := writeBuffer.WriteUint32("length", 32, (length))
 		if _lengthErr != nil {
 			return errors.Wrap(_lengthErr, "Error serializing 'length' field")
 		}
 
 		// Simple Field (stamps)
 		stamps := uint32(m.Stamps)
-		_stampsErr := io.WriteUint32("stamps", 32, (stamps))
+		_stampsErr := writeBuffer.WriteUint32("stamps", 32, (stamps))
 		if _stampsErr != nil {
 			return errors.Wrap(_stampsErr, "Error serializing 'stamps' field")
 		}
 
 		// Array Field (adsStampHeaders)
 		if m.AdsStampHeaders != nil {
-			if pushErr := io.PushContext("adsStampHeaders", utils.WithRenderAsList(true)); pushErr != nil {
+			if pushErr := writeBuffer.PushContext("adsStampHeaders", utils.WithRenderAsList(true)); pushErr != nil {
 				return pushErr
 			}
 			for _, _element := range m.AdsStampHeaders {
-				_elementErr := _element.Serialize(io)
+				_elementErr := _element.Serialize(writeBuffer)
 				if _elementErr != nil {
 					return errors.Wrap(_elementErr, "Error serializing 'adsStampHeaders' field")
 				}
 			}
-			if popErr := io.PopContext("adsStampHeaders", utils.WithRenderAsList(true)); popErr != nil {
+			if popErr := writeBuffer.PopContext("adsStampHeaders", utils.WithRenderAsList(true)); popErr != nil {
 				return popErr
 			}
 		}
 
-		if popErr := io.PopContext("AdsDeviceNotificationRequest"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsDeviceNotificationRequest"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsDeviceNotificationRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "length":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Length = data
-			case "stamps":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Stamps = data
-			case "adsStampHeaders":
-				var data []*AdsStampHeader
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.AdsStampHeaders = data
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsDeviceNotificationRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.Length, xml.StartElement{Name: xml.Name{Local: "length"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.Stamps, xml.StartElement{Name: xml.Name{Local: "stamps"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "adsStampHeaders"}}); err != nil {
-		return err
-	}
-	for _, arrayElement := range m.AdsStampHeaders {
-		if err := e.EncodeElement(arrayElement, xml.StartElement{Name: xml.Name{Local: "adsStampHeaders"}}); err != nil {
-			return err
-		}
-	}
-	if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "adsStampHeaders"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsDeviceNotificationRequest) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsDeviceNotificationRequest) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsDeviceNotificationRequest"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("Length", m.Length, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("Stamps", m.Stamps, -1))
-		// Array Field (adsStampHeaders)
-		if m.AdsStampHeaders != nil {
-			// Complex array base type
-			arrayBoxes := make([]utils.AsciiBox, 0)
-			for _, _element := range m.AdsStampHeaders {
-				arrayBoxes = append(arrayBoxes, utils.BoxAnything("", _element, width-2))
-			}
-			boxes = append(boxes, utils.BoxBox("AdsStampHeaders", utils.AlignBoxes(arrayBoxes, width-4), 0))
-		}
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
index 78c430b..ca99e3e 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
@@ -20,9 +20,7 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -36,9 +34,7 @@ type AdsDeviceNotificationResponse struct {
 type IAdsDeviceNotificationResponse interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -100,12 +96,12 @@ func (m *AdsDeviceNotificationResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsDeviceNotificationResponseParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsDeviceNotificationResponse"); pullErr != nil {
+func AdsDeviceNotificationResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsDeviceNotificationResponse"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if closeErr := io.CloseContext("AdsDeviceNotificationResponse"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsDeviceNotificationResponse"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -117,62 +113,16 @@ func AdsDeviceNotificationResponseParse(io utils.ReadBuffer) (*AdsData, error) {
 	return _child.Parent, nil
 }
 
-func (m *AdsDeviceNotificationResponse) Serialize(io utils.WriteBuffer) error {
+func (m *AdsDeviceNotificationResponse) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsDeviceNotificationResponse"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsDeviceNotificationResponse"); pushErr != nil {
 			return pushErr
 		}
 
-		if popErr := io.PopContext("AdsDeviceNotificationResponse"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsDeviceNotificationResponse"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsDeviceNotificationResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsDeviceNotificationResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	return nil
-}
-
-func (m AdsDeviceNotificationResponse) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsDeviceNotificationResponse) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsDeviceNotificationResponse"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
index 277e6e6..243dcbc 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
@@ -20,9 +20,7 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -36,9 +34,7 @@ type AdsInvalidRequest struct {
 type IAdsInvalidRequest interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -100,12 +96,12 @@ func (m *AdsInvalidRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsInvalidRequestParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsInvalidRequest"); pullErr != nil {
+func AdsInvalidRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsInvalidRequest"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if closeErr := io.CloseContext("AdsInvalidRequest"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsInvalidRequest"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -117,62 +113,16 @@ func AdsInvalidRequestParse(io utils.ReadBuffer) (*AdsData, error) {
 	return _child.Parent, nil
 }
 
-func (m *AdsInvalidRequest) Serialize(io utils.WriteBuffer) error {
+func (m *AdsInvalidRequest) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsInvalidRequest"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsInvalidRequest"); pushErr != nil {
 			return pushErr
 		}
 
-		if popErr := io.PopContext("AdsInvalidRequest"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsInvalidRequest"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsInvalidRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsInvalidRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	return nil
-}
-
-func (m AdsInvalidRequest) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsInvalidRequest) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsInvalidRequest"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
index caea4a7..89e8d34 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
@@ -20,9 +20,7 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -36,9 +34,7 @@ type AdsInvalidResponse struct {
 type IAdsInvalidResponse interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -100,12 +96,12 @@ func (m *AdsInvalidResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsInvalidResponseParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsInvalidResponse"); pullErr != nil {
+func AdsInvalidResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsInvalidResponse"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if closeErr := io.CloseContext("AdsInvalidResponse"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsInvalidResponse"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -117,62 +113,16 @@ func AdsInvalidResponseParse(io utils.ReadBuffer) (*AdsData, error) {
 	return _child.Parent, nil
 }
 
-func (m *AdsInvalidResponse) Serialize(io utils.WriteBuffer) error {
+func (m *AdsInvalidResponse) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsInvalidResponse"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsInvalidResponse"); pushErr != nil {
 			return pushErr
 		}
 
-		if popErr := io.PopContext("AdsInvalidResponse"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsInvalidResponse"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsInvalidResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsInvalidResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	return nil
-}
-
-func (m AdsInvalidResponse) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsInvalidResponse) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsInvalidResponse"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
index d5b268f..f058809 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
@@ -20,12 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
-	"reflect"
-	"strings"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -40,22 +36,19 @@ type IAdsMultiRequestItem interface {
 	IndexGroup() uint32
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 type IAdsMultiRequestItemParent interface {
-	SerializeParent(io utils.WriteBuffer, child IAdsMultiRequestItem, serializeChildFunction func() error) error
+	SerializeParent(writeBuffer utils.WriteBuffer, child IAdsMultiRequestItem, serializeChildFunction func() error) error
 	GetTypeName() string
 }
 
 type IAdsMultiRequestItemChild interface {
-	Serialize(io utils.WriteBuffer) error
+	Serialize(writeBuffer utils.WriteBuffer) error
 	InitializeParent(parent *AdsMultiRequestItem)
 	GetTypeName() string
 	IAdsMultiRequestItem
-	utils.AsciiBoxer
 }
 
 func NewAdsMultiRequestItem() *AdsMultiRequestItem {
@@ -97,8 +90,8 @@ func (m *AdsMultiRequestItem) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsMultiRequestItemParse(io utils.ReadBuffer, indexGroup uint32) (*AdsMultiRequestItem, error) {
-	if pullErr := io.PullContext("AdsMultiRequestItem"); pullErr != nil {
+func AdsMultiRequestItemParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*AdsMultiRequestItem, error) {
+	if pullErr := readBuffer.PullContext("AdsMultiRequestItem"); pullErr != nil {
 		return nil, pullErr
 	}
 
@@ -107,11 +100,11 @@ func AdsMultiRequestItemParse(io utils.ReadBuffer, indexGroup uint32) (*AdsMulti
 	var typeSwitchError error
 	switch {
 	case indexGroup == 61568: // AdsMultiRequestItemRead
-		_parent, typeSwitchError = AdsMultiRequestItemReadParse(io)
+		_parent, typeSwitchError = AdsMultiRequestItemReadParse(readBuffer)
 	case indexGroup == 61569: // AdsMultiRequestItemWrite
-		_parent, typeSwitchError = AdsMultiRequestItemWriteParse(io)
+		_parent, typeSwitchError = AdsMultiRequestItemWriteParse(readBuffer)
 	case indexGroup == 61570: // AdsMultiRequestItemReadWrite
-		_parent, typeSwitchError = AdsMultiRequestItemReadWriteParse(io)
+		_parent, typeSwitchError = AdsMultiRequestItemReadWriteParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -120,7 +113,7 @@ func AdsMultiRequestItemParse(io utils.ReadBuffer, indexGroup uint32) (*AdsMulti
 		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
 	}
 
-	if closeErr := io.CloseContext("AdsMultiRequestItem"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsMultiRequestItem"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -129,12 +122,12 @@ func AdsMultiRequestItemParse(io utils.ReadBuffer, indexGroup uint32) (*AdsMulti
 	return _parent, nil
 }
 
-func (m *AdsMultiRequestItem) Serialize(io utils.WriteBuffer) error {
-	return m.Child.Serialize(io)
+func (m *AdsMultiRequestItem) Serialize(writeBuffer utils.WriteBuffer) error {
+	return m.Child.Serialize(writeBuffer)
 }
 
-func (m *AdsMultiRequestItem) SerializeParent(io utils.WriteBuffer, child IAdsMultiRequestItem, serializeChildFunction func() error) error {
-	if pushErr := io.PushContext("AdsMultiRequestItem"); pushErr != nil {
+func (m *AdsMultiRequestItem) SerializeParent(writeBuffer utils.WriteBuffer, child IAdsMultiRequestItem, serializeChildFunction func() error) error {
+	if pushErr := writeBuffer.PushContext("AdsMultiRequestItem"); pushErr != nil {
 		return pushErr
 	}
 
@@ -144,125 +137,8 @@ func (m *AdsMultiRequestItem) SerializeParent(io utils.WriteBuffer, child IAdsMu
 		return errors.Wrap(_typeSwitchErr, "Error serializing sub-type field")
 	}
 
-	if popErr := io.PopContext("AdsMultiRequestItem"); popErr != nil {
+	if popErr := writeBuffer.PopContext("AdsMultiRequestItem"); popErr != nil {
 		return popErr
 	}
 	return nil
 }
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsMultiRequestItem) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	if start.Attr != nil && len(start.Attr) > 0 {
-		switch start.Attr[0].Value {
-		}
-	}
-	for {
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			default:
-				attr := start.Attr
-				if attr == nil || len(attr) <= 0 {
-					// TODO: workaround for bug with nested lists
-					attr = tok.Attr
-				}
-				if attr == nil || len(attr) <= 0 {
-					panic("Couldn't determine class type for childs of AdsMultiRequestItem")
-				}
-				switch attr[0].Value {
-				case "org.apache.plc4x.java.ads.readwrite.AdsMultiRequestItemRead":
-					var dt *AdsMultiRequestItemRead
-					if m.Child != nil {
-						dt = m.Child.(*AdsMultiRequestItemRead)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsMultiRequestItemWrite":
-					var dt *AdsMultiRequestItemWrite
-					if m.Child != nil {
-						dt = m.Child.(*AdsMultiRequestItemWrite)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				case "org.apache.plc4x.java.ads.readwrite.AdsMultiRequestItemReadWrite":
-					var dt *AdsMultiRequestItemReadWrite
-					if m.Child != nil {
-						dt = m.Child.(*AdsMultiRequestItemReadWrite)
-					}
-					if err := d.DecodeElement(&dt, &tok); err != nil {
-						return err
-					}
-					if m.Child == nil {
-						dt.Parent = m
-						m.Child = dt
-					}
-				}
-			}
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsMultiRequestItem) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	className := reflect.TypeOf(m.Child).String()
-	className = "org.apache.plc4x.java.ads.readwrite." + className[strings.LastIndex(className, ".")+1:]
-	if err := e.EncodeToken(xml.StartElement{Name: start.Name, Attr: []xml.Attr{
-		{Name: xml.Name{Local: "className"}, Value: className},
-	}}); err != nil {
-		return err
-	}
-	marshaller, ok := m.Child.(xml.Marshaler)
-	if !ok {
-		return errors.Errorf("child is not castable to Marshaler. Actual type %T", m.Child)
-	}
-	if err := marshaller.MarshalXML(e, start); err != nil {
-		return err
-	}
-	if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsMultiRequestItem) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *AdsMultiRequestItem) Box(name string, width int) utils.AsciiBox {
-	return m.Child.Box(name, width)
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m *AdsMultiRequestItem) BoxParent(name string, width int, childBoxer func() []utils.AsciiBox) utils.AsciiBox {
-	boxName := "AdsMultiRequestItem"
-	if name != "" {
-		boxName += "/" + name
-	}
-	boxes := make([]utils.AsciiBox, 0)
-	// Switch field (Depending on the discriminator values, passes the boxing to a sub-type)
-	boxes = append(boxes, childBoxer()...)
-	return utils.BoxBox(boxName, utils.AlignBoxes(boxes, width-2), 0)
-}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
index 09ec9fd..57b56c3 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -40,9 +38,7 @@ type AdsMultiRequestItemRead struct {
 type IAdsMultiRequestItemRead interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -112,30 +108,30 @@ func (m *AdsMultiRequestItemRead) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsMultiRequestItemReadParse(io utils.ReadBuffer) (*AdsMultiRequestItem, error) {
-	if pullErr := io.PullContext("AdsMultiRequestItemRead"); pullErr != nil {
+func AdsMultiRequestItemReadParse(readBuffer utils.ReadBuffer) (*AdsMultiRequestItem, error) {
+	if pullErr := readBuffer.PullContext("AdsMultiRequestItemRead"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (itemIndexGroup)
-	itemIndexGroup, _itemIndexGroupErr := io.ReadUint32("itemIndexGroup", 32)
+	itemIndexGroup, _itemIndexGroupErr := readBuffer.ReadUint32("itemIndexGroup", 32)
 	if _itemIndexGroupErr != nil {
 		return nil, errors.Wrap(_itemIndexGroupErr, "Error parsing 'itemIndexGroup' field")
 	}
 
 	// Simple Field (itemIndexOffset)
-	itemIndexOffset, _itemIndexOffsetErr := io.ReadUint32("itemIndexOffset", 32)
+	itemIndexOffset, _itemIndexOffsetErr := readBuffer.ReadUint32("itemIndexOffset", 32)
 	if _itemIndexOffsetErr != nil {
 		return nil, errors.Wrap(_itemIndexOffsetErr, "Error parsing 'itemIndexOffset' field")
 	}
 
 	// Simple Field (itemReadLength)
-	itemReadLength, _itemReadLengthErr := io.ReadUint32("itemReadLength", 32)
+	itemReadLength, _itemReadLengthErr := readBuffer.ReadUint32("itemReadLength", 32)
 	if _itemReadLengthErr != nil {
 		return nil, errors.Wrap(_itemReadLengthErr, "Error parsing 'itemReadLength' field")
 	}
 
-	if closeErr := io.CloseContext("AdsMultiRequestItemRead"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsMultiRequestItemRead"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -150,119 +146,37 @@ func AdsMultiRequestItemReadParse(io utils.ReadBuffer) (*AdsMultiRequestItem, er
 	return _child.Parent, nil
 }
 
-func (m *AdsMultiRequestItemRead) Serialize(io utils.WriteBuffer) error {
+func (m *AdsMultiRequestItemRead) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsMultiRequestItemRead"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsMultiRequestItemRead"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (itemIndexGroup)
 		itemIndexGroup := uint32(m.ItemIndexGroup)
-		_itemIndexGroupErr := io.WriteUint32("itemIndexGroup", 32, (itemIndexGroup))
+		_itemIndexGroupErr := writeBuffer.WriteUint32("itemIndexGroup", 32, (itemIndexGroup))
 		if _itemIndexGroupErr != nil {
 			return errors.Wrap(_itemIndexGroupErr, "Error serializing 'itemIndexGroup' field")
 		}
 
 		// Simple Field (itemIndexOffset)
 		itemIndexOffset := uint32(m.ItemIndexOffset)
-		_itemIndexOffsetErr := io.WriteUint32("itemIndexOffset", 32, (itemIndexOffset))
+		_itemIndexOffsetErr := writeBuffer.WriteUint32("itemIndexOffset", 32, (itemIndexOffset))
 		if _itemIndexOffsetErr != nil {
 			return errors.Wrap(_itemIndexOffsetErr, "Error serializing 'itemIndexOffset' field")
 		}
 
 		// Simple Field (itemReadLength)
 		itemReadLength := uint32(m.ItemReadLength)
-		_itemReadLengthErr := io.WriteUint32("itemReadLength", 32, (itemReadLength))
+		_itemReadLengthErr := writeBuffer.WriteUint32("itemReadLength", 32, (itemReadLength))
 		if _itemReadLengthErr != nil {
 			return errors.Wrap(_itemReadLengthErr, "Error serializing 'itemReadLength' field")
 		}
 
-		if popErr := io.PopContext("AdsMultiRequestItemRead"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsMultiRequestItemRead"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsMultiRequestItemRead) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "itemIndexGroup":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ItemIndexGroup = data
-			case "itemIndexOffset":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ItemIndexOffset = data
-			case "itemReadLength":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ItemReadLength = data
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsMultiRequestItemRead) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.ItemIndexGroup, xml.StartElement{Name: xml.Name{Local: "itemIndexGroup"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.ItemIndexOffset, xml.StartElement{Name: xml.Name{Local: "itemIndexOffset"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.ItemReadLength, xml.StartElement{Name: xml.Name{Local: "itemReadLength"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsMultiRequestItemRead) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsMultiRequestItemRead) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsMultiRequestItemRead"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ItemIndexGroup", m.ItemIndexGroup, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ItemIndexOffset", m.ItemIndexOffset, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ItemReadLength", m.ItemReadLength, -1))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
index 1005728..2c54f51 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -41,9 +39,7 @@ type AdsMultiRequestItemReadWrite struct {
 type IAdsMultiRequestItemReadWrite interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -117,36 +113,36 @@ func (m *AdsMultiRequestItemReadWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsMultiRequestItemReadWriteParse(io utils.ReadBuffer) (*AdsMultiRequestItem, error) {
-	if pullErr := io.PullContext("AdsMultiRequestItemReadWrite"); pullErr != nil {
+func AdsMultiRequestItemReadWriteParse(readBuffer utils.ReadBuffer) (*AdsMultiRequestItem, error) {
+	if pullErr := readBuffer.PullContext("AdsMultiRequestItemReadWrite"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (itemIndexGroup)
-	itemIndexGroup, _itemIndexGroupErr := io.ReadUint32("itemIndexGroup", 32)
+	itemIndexGroup, _itemIndexGroupErr := readBuffer.ReadUint32("itemIndexGroup", 32)
 	if _itemIndexGroupErr != nil {
 		return nil, errors.Wrap(_itemIndexGroupErr, "Error parsing 'itemIndexGroup' field")
 	}
 
 	// Simple Field (itemIndexOffset)
-	itemIndexOffset, _itemIndexOffsetErr := io.ReadUint32("itemIndexOffset", 32)
+	itemIndexOffset, _itemIndexOffsetErr := readBuffer.ReadUint32("itemIndexOffset", 32)
 	if _itemIndexOffsetErr != nil {
 		return nil, errors.Wrap(_itemIndexOffsetErr, "Error parsing 'itemIndexOffset' field")
 	}
 
 	// Simple Field (itemReadLength)
-	itemReadLength, _itemReadLengthErr := io.ReadUint32("itemReadLength", 32)
+	itemReadLength, _itemReadLengthErr := readBuffer.ReadUint32("itemReadLength", 32)
 	if _itemReadLengthErr != nil {
 		return nil, errors.Wrap(_itemReadLengthErr, "Error parsing 'itemReadLength' field")
 	}
 
 	// Simple Field (itemWriteLength)
-	itemWriteLength, _itemWriteLengthErr := io.ReadUint32("itemWriteLength", 32)
+	itemWriteLength, _itemWriteLengthErr := readBuffer.ReadUint32("itemWriteLength", 32)
 	if _itemWriteLengthErr != nil {
 		return nil, errors.Wrap(_itemWriteLengthErr, "Error parsing 'itemWriteLength' field")
 	}
 
-	if closeErr := io.CloseContext("AdsMultiRequestItemReadWrite"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsMultiRequestItemReadWrite"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -162,138 +158,44 @@ func AdsMultiRequestItemReadWriteParse(io utils.ReadBuffer) (*AdsMultiRequestIte
 	return _child.Parent, nil
 }
 
-func (m *AdsMultiRequestItemReadWrite) Serialize(io utils.WriteBuffer) error {
+func (m *AdsMultiRequestItemReadWrite) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsMultiRequestItemReadWrite"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsMultiRequestItemReadWrite"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (itemIndexGroup)
 		itemIndexGroup := uint32(m.ItemIndexGroup)
-		_itemIndexGroupErr := io.WriteUint32("itemIndexGroup", 32, (itemIndexGroup))
+		_itemIndexGroupErr := writeBuffer.WriteUint32("itemIndexGroup", 32, (itemIndexGroup))
 		if _itemIndexGroupErr != nil {
 			return errors.Wrap(_itemIndexGroupErr, "Error serializing 'itemIndexGroup' field")
 		}
 
 		// Simple Field (itemIndexOffset)
 		itemIndexOffset := uint32(m.ItemIndexOffset)
-		_itemIndexOffsetErr := io.WriteUint32("itemIndexOffset", 32, (itemIndexOffset))
+		_itemIndexOffsetErr := writeBuffer.WriteUint32("itemIndexOffset", 32, (itemIndexOffset))
 		if _itemIndexOffsetErr != nil {
 			return errors.Wrap(_itemIndexOffsetErr, "Error serializing 'itemIndexOffset' field")
 		}
 
 		// Simple Field (itemReadLength)
 		itemReadLength := uint32(m.ItemReadLength)
-		_itemReadLengthErr := io.WriteUint32("itemReadLength", 32, (itemReadLength))
+		_itemReadLengthErr := writeBuffer.WriteUint32("itemReadLength", 32, (itemReadLength))
 		if _itemReadLengthErr != nil {
 			return errors.Wrap(_itemReadLengthErr, "Error serializing 'itemReadLength' field")
 		}
 
 		// Simple Field (itemWriteLength)
 		itemWriteLength := uint32(m.ItemWriteLength)
-		_itemWriteLengthErr := io.WriteUint32("itemWriteLength", 32, (itemWriteLength))
+		_itemWriteLengthErr := writeBuffer.WriteUint32("itemWriteLength", 32, (itemWriteLength))
 		if _itemWriteLengthErr != nil {
 			return errors.Wrap(_itemWriteLengthErr, "Error serializing 'itemWriteLength' field")
 		}
 
-		if popErr := io.PopContext("AdsMultiRequestItemReadWrite"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsMultiRequestItemReadWrite"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsMultiRequestItemReadWrite) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "itemIndexGroup":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ItemIndexGroup = data
-			case "itemIndexOffset":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ItemIndexOffset = data
-			case "itemReadLength":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ItemReadLength = data
-			case "itemWriteLength":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ItemWriteLength = data
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsMultiRequestItemReadWrite) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.ItemIndexGroup, xml.StartElement{Name: xml.Name{Local: "itemIndexGroup"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.ItemIndexOffset, xml.StartElement{Name: xml.Name{Local: "itemIndexOffset"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.ItemReadLength, xml.StartElement{Name: xml.Name{Local: "itemReadLength"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.ItemWriteLength, xml.StartElement{Name: xml.Name{Local: "itemWriteLength"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsMultiRequestItemReadWrite) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsMultiRequestItemReadWrite) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsMultiRequestItemReadWrite"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ItemIndexGroup", m.ItemIndexGroup, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ItemIndexOffset", m.ItemIndexOffset, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ItemReadLength", m.ItemReadLength, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ItemWriteLength", m.ItemWriteLength, -1))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
index 73b0038..9d3379a 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -40,9 +38,7 @@ type AdsMultiRequestItemWrite struct {
 type IAdsMultiRequestItemWrite interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -112,30 +108,30 @@ func (m *AdsMultiRequestItemWrite) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsMultiRequestItemWriteParse(io utils.ReadBuffer) (*AdsMultiRequestItem, error) {
-	if pullErr := io.PullContext("AdsMultiRequestItemWrite"); pullErr != nil {
+func AdsMultiRequestItemWriteParse(readBuffer utils.ReadBuffer) (*AdsMultiRequestItem, error) {
+	if pullErr := readBuffer.PullContext("AdsMultiRequestItemWrite"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (itemIndexGroup)
-	itemIndexGroup, _itemIndexGroupErr := io.ReadUint32("itemIndexGroup", 32)
+	itemIndexGroup, _itemIndexGroupErr := readBuffer.ReadUint32("itemIndexGroup", 32)
 	if _itemIndexGroupErr != nil {
 		return nil, errors.Wrap(_itemIndexGroupErr, "Error parsing 'itemIndexGroup' field")
 	}
 
 	// Simple Field (itemIndexOffset)
-	itemIndexOffset, _itemIndexOffsetErr := io.ReadUint32("itemIndexOffset", 32)
+	itemIndexOffset, _itemIndexOffsetErr := readBuffer.ReadUint32("itemIndexOffset", 32)
 	if _itemIndexOffsetErr != nil {
 		return nil, errors.Wrap(_itemIndexOffsetErr, "Error parsing 'itemIndexOffset' field")
 	}
 
 	// Simple Field (itemWriteLength)
-	itemWriteLength, _itemWriteLengthErr := io.ReadUint32("itemWriteLength", 32)
+	itemWriteLength, _itemWriteLengthErr := readBuffer.ReadUint32("itemWriteLength", 32)
 	if _itemWriteLengthErr != nil {
 		return nil, errors.Wrap(_itemWriteLengthErr, "Error parsing 'itemWriteLength' field")
 	}
 
-	if closeErr := io.CloseContext("AdsMultiRequestItemWrite"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsMultiRequestItemWrite"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -150,119 +146,37 @@ func AdsMultiRequestItemWriteParse(io utils.ReadBuffer) (*AdsMultiRequestItem, e
 	return _child.Parent, nil
 }
 
-func (m *AdsMultiRequestItemWrite) Serialize(io utils.WriteBuffer) error {
+func (m *AdsMultiRequestItemWrite) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsMultiRequestItemWrite"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsMultiRequestItemWrite"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (itemIndexGroup)
 		itemIndexGroup := uint32(m.ItemIndexGroup)
-		_itemIndexGroupErr := io.WriteUint32("itemIndexGroup", 32, (itemIndexGroup))
+		_itemIndexGroupErr := writeBuffer.WriteUint32("itemIndexGroup", 32, (itemIndexGroup))
 		if _itemIndexGroupErr != nil {
 			return errors.Wrap(_itemIndexGroupErr, "Error serializing 'itemIndexGroup' field")
 		}
 
 		// Simple Field (itemIndexOffset)
 		itemIndexOffset := uint32(m.ItemIndexOffset)
-		_itemIndexOffsetErr := io.WriteUint32("itemIndexOffset", 32, (itemIndexOffset))
+		_itemIndexOffsetErr := writeBuffer.WriteUint32("itemIndexOffset", 32, (itemIndexOffset))
 		if _itemIndexOffsetErr != nil {
 			return errors.Wrap(_itemIndexOffsetErr, "Error serializing 'itemIndexOffset' field")
 		}
 
 		// Simple Field (itemWriteLength)
 		itemWriteLength := uint32(m.ItemWriteLength)
-		_itemWriteLengthErr := io.WriteUint32("itemWriteLength", 32, (itemWriteLength))
+		_itemWriteLengthErr := writeBuffer.WriteUint32("itemWriteLength", 32, (itemWriteLength))
 		if _itemWriteLengthErr != nil {
 			return errors.Wrap(_itemWriteLengthErr, "Error serializing 'itemWriteLength' field")
 		}
 
-		if popErr := io.PopContext("AdsMultiRequestItemWrite"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsMultiRequestItemWrite"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsMultiRequestItemWrite) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "itemIndexGroup":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ItemIndexGroup = data
-			case "itemIndexOffset":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ItemIndexOffset = data
-			case "itemWriteLength":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ItemWriteLength = data
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsMultiRequestItemWrite) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.ItemIndexGroup, xml.StartElement{Name: xml.Name{Local: "itemIndexGroup"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.ItemIndexOffset, xml.StartElement{Name: xml.Name{Local: "itemIndexOffset"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.ItemWriteLength, xml.StartElement{Name: xml.Name{Local: "itemWriteLength"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsMultiRequestItemWrite) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsMultiRequestItemWrite) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsMultiRequestItemWrite"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ItemIndexGroup", m.ItemIndexGroup, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ItemIndexOffset", m.ItemIndexOffset, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ItemWriteLength", m.ItemWriteLength, -1))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsNotificationSample.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsNotificationSample.go
index 06f57b2..588f7b7 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsNotificationSample.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsNotificationSample.go
@@ -20,12 +20,8 @@
 package model
 
 import (
-	"encoding/hex"
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
-	"strings"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -41,9 +37,7 @@ type AdsNotificationSample struct {
 type IAdsNotificationSample interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 func NewAdsNotificationSample(notificationHandle uint32, sampleSize uint32, data []int8) *AdsNotificationSample {
@@ -92,41 +86,41 @@ func (m *AdsNotificationSample) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsNotificationSampleParse(io utils.ReadBuffer) (*AdsNotificationSample, error) {
-	if pullErr := io.PullContext("AdsNotificationSample"); pullErr != nil {
+func AdsNotificationSampleParse(readBuffer utils.ReadBuffer) (*AdsNotificationSample, error) {
+	if pullErr := readBuffer.PullContext("AdsNotificationSample"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (notificationHandle)
-	notificationHandle, _notificationHandleErr := io.ReadUint32("notificationHandle", 32)
+	notificationHandle, _notificationHandleErr := readBuffer.ReadUint32("notificationHandle", 32)
 	if _notificationHandleErr != nil {
 		return nil, errors.Wrap(_notificationHandleErr, "Error parsing 'notificationHandle' field")
 	}
 
 	// Simple Field (sampleSize)
-	sampleSize, _sampleSizeErr := io.ReadUint32("sampleSize", 32)
+	sampleSize, _sampleSizeErr := readBuffer.ReadUint32("sampleSize", 32)
 	if _sampleSizeErr != nil {
 		return nil, errors.Wrap(_sampleSizeErr, "Error parsing 'sampleSize' field")
 	}
 
 	// Array field (data)
-	if pullErr := io.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
+	if pullErr := readBuffer.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
 		return nil, pullErr
 	}
 	// Count array
 	data := make([]int8, sampleSize)
 	for curItem := uint16(0); curItem < uint16(sampleSize); curItem++ {
-		_item, _err := io.ReadInt8("", 8)
+		_item, _err := readBuffer.ReadInt8("", 8)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'data' field")
 		}
 		data[curItem] = _item
 	}
-	if closeErr := io.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
 		return nil, closeErr
 	}
 
-	if closeErr := io.CloseContext("AdsNotificationSample"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsNotificationSample"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -134,143 +128,43 @@ func AdsNotificationSampleParse(io utils.ReadBuffer) (*AdsNotificationSample, er
 	return NewAdsNotificationSample(notificationHandle, sampleSize, data), nil
 }
 
-func (m *AdsNotificationSample) Serialize(io utils.WriteBuffer) error {
-	if pushErr := io.PushContext("AdsNotificationSample"); pushErr != nil {
+func (m *AdsNotificationSample) Serialize(writeBuffer utils.WriteBuffer) error {
+	if pushErr := writeBuffer.PushContext("AdsNotificationSample"); pushErr != nil {
 		return pushErr
 	}
 
 	// Simple Field (notificationHandle)
 	notificationHandle := uint32(m.NotificationHandle)
-	_notificationHandleErr := io.WriteUint32("notificationHandle", 32, (notificationHandle))
+	_notificationHandleErr := writeBuffer.WriteUint32("notificationHandle", 32, (notificationHandle))
 	if _notificationHandleErr != nil {
 		return errors.Wrap(_notificationHandleErr, "Error serializing 'notificationHandle' field")
 	}
 
 	// Simple Field (sampleSize)
 	sampleSize := uint32(m.SampleSize)
-	_sampleSizeErr := io.WriteUint32("sampleSize", 32, (sampleSize))
+	_sampleSizeErr := writeBuffer.WriteUint32("sampleSize", 32, (sampleSize))
 	if _sampleSizeErr != nil {
 		return errors.Wrap(_sampleSizeErr, "Error serializing 'sampleSize' field")
 	}
 
 	// Array Field (data)
 	if m.Data != nil {
-		if pushErr := io.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
 			return pushErr
 		}
 		for _, _element := range m.Data {
-			_elementErr := io.WriteInt8("", 8, _element)
+			_elementErr := writeBuffer.WriteInt8("", 8, _element)
 			if _elementErr != nil {
 				return errors.Wrap(_elementErr, "Error serializing 'data' field")
 			}
 		}
-		if popErr := io.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
+		if popErr := writeBuffer.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
 			return popErr
 		}
 	}
 
-	if popErr := io.PopContext("AdsNotificationSample"); popErr != nil {
+	if popErr := writeBuffer.PopContext("AdsNotificationSample"); popErr != nil {
 		return popErr
 	}
 	return nil
 }
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsNotificationSample) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	for {
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "notificationHandle":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.NotificationHandle = data
-			case "sampleSize":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.SampleSize = data
-			case "data":
-				var _encoded string
-				if err := d.DecodeElement(&_encoded, &tok); err != nil {
-					return err
-				}
-				_decoded, err := hex.DecodeString(_encoded)
-				_len := len(_decoded)
-				if err != nil {
-					return err
-				}
-				m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
-			}
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsNotificationSample) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	className := "org.apache.plc4x.java.ads.readwrite.AdsNotificationSample"
-	if err := e.EncodeToken(xml.StartElement{Name: start.Name, Attr: []xml.Attr{
-		{Name: xml.Name{Local: "className"}, Value: className},
-	}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.NotificationHandle, xml.StartElement{Name: xml.Name{Local: "notificationHandle"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.SampleSize, xml.StartElement{Name: xml.Name{Local: "sampleSize"}}); err != nil {
-		return err
-	}
-	_encodedData := hex.EncodeToString(utils.Int8ArrayToByteArray(m.Data))
-	_encodedData = strings.ToUpper(_encodedData)
-	if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsNotificationSample) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsNotificationSample) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsNotificationSample"
-	if name != "" {
-		boxName += "/" + name
-	}
-	boxes := make([]utils.AsciiBox, 0)
-	// Simple field (case simple)
-	// uint32 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("NotificationHandle", m.NotificationHandle, -1))
-	// Simple field (case simple)
-	// uint32 can be boxed as anything with the least amount of space
-	boxes = append(boxes, utils.BoxAnything("SampleSize", m.SampleSize, -1))
-	// Array Field (data)
-	if m.Data != nil {
-		// Simple array base type int8 will be rendered one by one
-		arrayBoxes := make([]utils.AsciiBox, 0)
-		for _, _element := range m.Data {
-			arrayBoxes = append(arrayBoxes, utils.BoxAnything("", _element, width-2))
-		}
-		boxes = append(boxes, utils.BoxBox("Data", utils.AlignBoxes(arrayBoxes, width-4), 0))
-	}
-	return utils.BoxBox(boxName, utils.AlignBoxes(boxes, width-2), 0)
-}
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
index 1ed37f1..cfe8019 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
@@ -20,9 +20,7 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -36,9 +34,7 @@ type AdsReadDeviceInfoRequest struct {
 type IAdsReadDeviceInfoRequest interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -100,12 +96,12 @@ func (m *AdsReadDeviceInfoRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadDeviceInfoRequestParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsReadDeviceInfoRequest"); pullErr != nil {
+func AdsReadDeviceInfoRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsReadDeviceInfoRequest"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if closeErr := io.CloseContext("AdsReadDeviceInfoRequest"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsReadDeviceInfoRequest"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -117,62 +113,16 @@ func AdsReadDeviceInfoRequestParse(io utils.ReadBuffer) (*AdsData, error) {
 	return _child.Parent, nil
 }
 
-func (m *AdsReadDeviceInfoRequest) Serialize(io utils.WriteBuffer) error {
+func (m *AdsReadDeviceInfoRequest) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsReadDeviceInfoRequest"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsReadDeviceInfoRequest"); pushErr != nil {
 			return pushErr
 		}
 
-		if popErr := io.PopContext("AdsReadDeviceInfoRequest"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsReadDeviceInfoRequest"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsReadDeviceInfoRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsReadDeviceInfoRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	return nil
-}
-
-func (m AdsReadDeviceInfoRequest) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsReadDeviceInfoRequest) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsReadDeviceInfoRequest"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
index a89532d..a1612a4 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
@@ -20,12 +20,8 @@
 package model
 
 import (
-	"encoding/hex"
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
-	"strings"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -44,9 +40,7 @@ type AdsReadDeviceInfoResponse struct {
 type IAdsReadDeviceInfoResponse interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -130,60 +124,60 @@ func (m *AdsReadDeviceInfoResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadDeviceInfoResponseParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsReadDeviceInfoResponse"); pullErr != nil {
+func AdsReadDeviceInfoResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsReadDeviceInfoResponse"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if pullErr := io.PullContext("result"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("result"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (result)
-	result, _resultErr := ReturnCodeParse(io)
+	result, _resultErr := ReturnCodeParse(readBuffer)
 	if _resultErr != nil {
 		return nil, errors.Wrap(_resultErr, "Error parsing 'result' field")
 	}
-	if closeErr := io.CloseContext("result"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("result"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Simple Field (majorVersion)
-	majorVersion, _majorVersionErr := io.ReadUint8("majorVersion", 8)
+	majorVersion, _majorVersionErr := readBuffer.ReadUint8("majorVersion", 8)
 	if _majorVersionErr != nil {
 		return nil, errors.Wrap(_majorVersionErr, "Error parsing 'majorVersion' field")
 	}
 
 	// Simple Field (minorVersion)
-	minorVersion, _minorVersionErr := io.ReadUint8("minorVersion", 8)
+	minorVersion, _minorVersionErr := readBuffer.ReadUint8("minorVersion", 8)
 	if _minorVersionErr != nil {
 		return nil, errors.Wrap(_minorVersionErr, "Error parsing 'minorVersion' field")
 	}
 
 	// Simple Field (version)
-	version, _versionErr := io.ReadUint16("version", 16)
+	version, _versionErr := readBuffer.ReadUint16("version", 16)
 	if _versionErr != nil {
 		return nil, errors.Wrap(_versionErr, "Error parsing 'version' field")
 	}
 
 	// Array field (device)
-	if pullErr := io.PullContext("device", utils.WithRenderAsList(true)); pullErr != nil {
+	if pullErr := readBuffer.PullContext("device", utils.WithRenderAsList(true)); pullErr != nil {
 		return nil, pullErr
 	}
 	// Count array
 	device := make([]int8, uint16(16))
 	for curItem := uint16(0); curItem < uint16(uint16(16)); curItem++ {
-		_item, _err := io.ReadInt8("", 8)
+		_item, _err := readBuffer.ReadInt8("", 8)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'device' field")
 		}
 		device[curItem] = _item
 	}
-	if closeErr := io.CloseContext("device", utils.WithRenderAsList(true)); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("device", utils.WithRenderAsList(true)); closeErr != nil {
 		return nil, closeErr
 	}
 
-	if closeErr := io.CloseContext("AdsReadDeviceInfoResponse"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsReadDeviceInfoResponse"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -200,18 +194,18 @@ func AdsReadDeviceInfoResponseParse(io utils.ReadBuffer) (*AdsData, error) {
 	return _child.Parent, nil
 }
 
-func (m *AdsReadDeviceInfoResponse) Serialize(io utils.WriteBuffer) error {
+func (m *AdsReadDeviceInfoResponse) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsReadDeviceInfoResponse"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsReadDeviceInfoResponse"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (result)
-		if pushErr := io.PushContext("result"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("result"); pushErr != nil {
 			return pushErr
 		}
-		_resultErr := m.Result.Serialize(io)
-		if popErr := io.PopContext("result"); popErr != nil {
+		_resultErr := m.Result.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("result"); popErr != nil {
 			return popErr
 		}
 		if _resultErr != nil {
@@ -220,163 +214,45 @@ func (m *AdsReadDeviceInfoResponse) Serialize(io utils.WriteBuffer) error {
 
 		// Simple Field (majorVersion)
 		majorVersion := uint8(m.MajorVersion)
-		_majorVersionErr := io.WriteUint8("majorVersion", 8, (majorVersion))
+		_majorVersionErr := writeBuffer.WriteUint8("majorVersion", 8, (majorVersion))
 		if _majorVersionErr != nil {
 			return errors.Wrap(_majorVersionErr, "Error serializing 'majorVersion' field")
 		}
 
 		// Simple Field (minorVersion)
 		minorVersion := uint8(m.MinorVersion)
-		_minorVersionErr := io.WriteUint8("minorVersion", 8, (minorVersion))
+		_minorVersionErr := writeBuffer.WriteUint8("minorVersion", 8, (minorVersion))
 		if _minorVersionErr != nil {
 			return errors.Wrap(_minorVersionErr, "Error serializing 'minorVersion' field")
 		}
 
 		// Simple Field (version)
 		version := uint16(m.Version)
-		_versionErr := io.WriteUint16("version", 16, (version))
+		_versionErr := writeBuffer.WriteUint16("version", 16, (version))
 		if _versionErr != nil {
 			return errors.Wrap(_versionErr, "Error serializing 'version' field")
 		}
 
 		// Array Field (device)
 		if m.Device != nil {
-			if pushErr := io.PushContext("device", utils.WithRenderAsList(true)); pushErr != nil {
+			if pushErr := writeBuffer.PushContext("device", utils.WithRenderAsList(true)); pushErr != nil {
 				return pushErr
 			}
 			for _, _element := range m.Device {
-				_elementErr := io.WriteInt8("", 8, _element)
+				_elementErr := writeBuffer.WriteInt8("", 8, _element)
 				if _elementErr != nil {
 					return errors.Wrap(_elementErr, "Error serializing 'device' field")
 				}
 			}
-			if popErr := io.PopContext("device", utils.WithRenderAsList(true)); popErr != nil {
+			if popErr := writeBuffer.PopContext("device", utils.WithRenderAsList(true)); popErr != nil {
 				return popErr
 			}
 		}
 
-		if popErr := io.PopContext("AdsReadDeviceInfoResponse"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsReadDeviceInfoResponse"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsReadDeviceInfoResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "result":
-				var data ReturnCode
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Result = data
-			case "majorVersion":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.MajorVersion = data
-			case "minorVersion":
-				var data uint8
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.MinorVersion = data
-			case "version":
-				var data uint16
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Version = data
-			case "device":
-				var _encoded string
-				if err := d.DecodeElement(&_encoded, &tok); err != nil {
-					return err
-				}
-				_decoded, err := hex.DecodeString(_encoded)
-				_len := len(_decoded)
-				if err != nil {
-					return err
-				}
-				m.Device = utils.ByteArrayToInt8Array(_decoded[0:_len])
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsReadDeviceInfoResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.Result, xml.StartElement{Name: xml.Name{Local: "result"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.MajorVersion, xml.StartElement{Name: xml.Name{Local: "majorVersion"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.MinorVersion, xml.StartElement{Name: xml.Name{Local: "minorVersion"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.Version, xml.StartElement{Name: xml.Name{Local: "version"}}); err != nil {
-		return err
-	}
-	_encodedDevice := hex.EncodeToString(utils.Int8ArrayToByteArray(m.Device))
-	_encodedDevice = strings.ToUpper(_encodedDevice)
-	if err := e.EncodeElement(_encodedDevice, xml.StartElement{Name: xml.Name{Local: "device"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsReadDeviceInfoResponse) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsReadDeviceInfoResponse) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsReadDeviceInfoResponse"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Complex field (case complex)
-		boxes = append(boxes, m.Result.Box("result", width-2))
-		// Simple field (case simple)
-		// uint8 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("MajorVersion", m.MajorVersion, -1))
-		// Simple field (case simple)
-		// uint8 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("MinorVersion", m.MinorVersion, -1))
-		// Simple field (case simple)
-		// uint16 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("Version", m.Version, -1))
-		// Array Field (device)
-		if m.Device != nil {
-			// Simple array base type int8 will be rendered one by one
-			arrayBoxes := make([]utils.AsciiBox, 0)
-			for _, _element := range m.Device {
-				arrayBoxes = append(arrayBoxes, utils.BoxAnything("", _element, width-2))
-			}
-			boxes = append(boxes, utils.BoxBox("Device", utils.AlignBoxes(arrayBoxes, width-4), 0))
-		}
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
index cf81bfd..ba25b2f 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -40,9 +38,7 @@ type AdsReadRequest struct {
 type IAdsReadRequest interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -116,30 +112,30 @@ func (m *AdsReadRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadRequestParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsReadRequest"); pullErr != nil {
+func AdsReadRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsReadRequest"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (indexGroup)
-	indexGroup, _indexGroupErr := io.ReadUint32("indexGroup", 32)
+	indexGroup, _indexGroupErr := readBuffer.ReadUint32("indexGroup", 32)
 	if _indexGroupErr != nil {
 		return nil, errors.Wrap(_indexGroupErr, "Error parsing 'indexGroup' field")
 	}
 
 	// Simple Field (indexOffset)
-	indexOffset, _indexOffsetErr := io.ReadUint32("indexOffset", 32)
+	indexOffset, _indexOffsetErr := readBuffer.ReadUint32("indexOffset", 32)
 	if _indexOffsetErr != nil {
 		return nil, errors.Wrap(_indexOffsetErr, "Error parsing 'indexOffset' field")
 	}
 
 	// Simple Field (length)
-	length, _lengthErr := io.ReadUint32("length", 32)
+	length, _lengthErr := readBuffer.ReadUint32("length", 32)
 	if _lengthErr != nil {
 		return nil, errors.Wrap(_lengthErr, "Error parsing 'length' field")
 	}
 
-	if closeErr := io.CloseContext("AdsReadRequest"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsReadRequest"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -154,119 +150,37 @@ func AdsReadRequestParse(io utils.ReadBuffer) (*AdsData, error) {
 	return _child.Parent, nil
 }
 
-func (m *AdsReadRequest) Serialize(io utils.WriteBuffer) error {
+func (m *AdsReadRequest) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsReadRequest"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsReadRequest"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (indexGroup)
 		indexGroup := uint32(m.IndexGroup)
-		_indexGroupErr := io.WriteUint32("indexGroup", 32, (indexGroup))
+		_indexGroupErr := writeBuffer.WriteUint32("indexGroup", 32, (indexGroup))
 		if _indexGroupErr != nil {
 			return errors.Wrap(_indexGroupErr, "Error serializing 'indexGroup' field")
 		}
 
 		// Simple Field (indexOffset)
 		indexOffset := uint32(m.IndexOffset)
-		_indexOffsetErr := io.WriteUint32("indexOffset", 32, (indexOffset))
+		_indexOffsetErr := writeBuffer.WriteUint32("indexOffset", 32, (indexOffset))
 		if _indexOffsetErr != nil {
 			return errors.Wrap(_indexOffsetErr, "Error serializing 'indexOffset' field")
 		}
 
 		// Simple Field (length)
 		length := uint32(m.Length)
-		_lengthErr := io.WriteUint32("length", 32, (length))
+		_lengthErr := writeBuffer.WriteUint32("length", 32, (length))
 		if _lengthErr != nil {
 			return errors.Wrap(_lengthErr, "Error serializing 'length' field")
 		}
 
-		if popErr := io.PopContext("AdsReadRequest"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsReadRequest"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsReadRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "indexGroup":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.IndexGroup = data
-			case "indexOffset":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.IndexOffset = data
-			case "length":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Length = data
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsReadRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.IndexGroup, xml.StartElement{Name: xml.Name{Local: "indexGroup"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.IndexOffset, xml.StartElement{Name: xml.Name{Local: "indexOffset"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.Length, xml.StartElement{Name: xml.Name{Local: "length"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsReadRequest) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsReadRequest) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsReadRequest"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("IndexGroup", m.IndexGroup, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("IndexOffset", m.IndexOffset, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("Length", m.Length, -1))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
index 360faf1..d05834c 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
@@ -20,12 +20,8 @@
 package model
 
 import (
-	"encoding/hex"
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
-	"strings"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -41,9 +37,7 @@ type AdsReadResponse struct {
 type IAdsReadResponse interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -118,49 +112,49 @@ func (m *AdsReadResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadResponseParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsReadResponse"); pullErr != nil {
+func AdsReadResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsReadResponse"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if pullErr := io.PullContext("result"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("result"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (result)
-	result, _resultErr := ReturnCodeParse(io)
+	result, _resultErr := ReturnCodeParse(readBuffer)
 	if _resultErr != nil {
 		return nil, errors.Wrap(_resultErr, "Error parsing 'result' field")
 	}
-	if closeErr := io.CloseContext("result"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("result"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Implicit Field (length) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-	length, _lengthErr := io.ReadUint32("length", 32)
+	length, _lengthErr := readBuffer.ReadUint32("length", 32)
 	_ = length
 	if _lengthErr != nil {
 		return nil, errors.Wrap(_lengthErr, "Error parsing 'length' field")
 	}
 
 	// Array field (data)
-	if pullErr := io.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
+	if pullErr := readBuffer.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
 		return nil, pullErr
 	}
 	// Count array
 	data := make([]int8, length)
 	for curItem := uint16(0); curItem < uint16(length); curItem++ {
-		_item, _err := io.ReadInt8("", 8)
+		_item, _err := readBuffer.ReadInt8("", 8)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'data' field")
 		}
 		data[curItem] = _item
 	}
-	if closeErr := io.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
 		return nil, closeErr
 	}
 
-	if closeErr := io.CloseContext("AdsReadResponse"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsReadResponse"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -174,18 +168,18 @@ func AdsReadResponseParse(io utils.ReadBuffer) (*AdsData, error) {
 	return _child.Parent, nil
 }
 
-func (m *AdsReadResponse) Serialize(io utils.WriteBuffer) error {
+func (m *AdsReadResponse) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsReadResponse"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsReadResponse"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (result)
-		if pushErr := io.PushContext("result"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("result"); pushErr != nil {
 			return pushErr
 		}
-		_resultErr := m.Result.Serialize(io)
-		if popErr := io.PopContext("result"); popErr != nil {
+		_resultErr := m.Result.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("result"); popErr != nil {
 			return popErr
 		}
 		if _resultErr != nil {
@@ -194,117 +188,31 @@ func (m *AdsReadResponse) Serialize(io utils.WriteBuffer) error {
 
 		// Implicit Field (length) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 		length := uint32(uint32(len(m.Data)))
-		_lengthErr := io.WriteUint32("length", 32, (length))
+		_lengthErr := writeBuffer.WriteUint32("length", 32, (length))
 		if _lengthErr != nil {
 			return errors.Wrap(_lengthErr, "Error serializing 'length' field")
 		}
 
 		// Array Field (data)
 		if m.Data != nil {
-			if pushErr := io.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
+			if pushErr := writeBuffer.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
 				return pushErr
 			}
 			for _, _element := range m.Data {
-				_elementErr := io.WriteInt8("", 8, _element)
+				_elementErr := writeBuffer.WriteInt8("", 8, _element)
 				if _elementErr != nil {
 					return errors.Wrap(_elementErr, "Error serializing 'data' field")
 				}
 			}
-			if popErr := io.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
+			if popErr := writeBuffer.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
 				return popErr
 			}
 		}
 
-		if popErr := io.PopContext("AdsReadResponse"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsReadResponse"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsReadResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "result":
-				var data ReturnCode
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Result = data
-			case "data":
-				var _encoded string
-				if err := d.DecodeElement(&_encoded, &tok); err != nil {
-					return err
-				}
-				_decoded, err := hex.DecodeString(_encoded)
-				_len := len(_decoded)
-				if err != nil {
-					return err
-				}
-				m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsReadResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.Result, xml.StartElement{Name: xml.Name{Local: "result"}}); err != nil {
-		return err
-	}
-	_encodedData := hex.EncodeToString(utils.Int8ArrayToByteArray(m.Data))
-	_encodedData = strings.ToUpper(_encodedData)
-	if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsReadResponse) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsReadResponse) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsReadResponse"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Complex field (case complex)
-		boxes = append(boxes, m.Result.Box("result", width-2))
-		// Implicit Field (length)
-		length := uint32(uint32(len(m.Data)))
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("Length", length, -1))
-		// Array Field (data)
-		if m.Data != nil {
-			// Simple array base type int8 will be rendered one by one
-			arrayBoxes := make([]utils.AsciiBox, 0)
-			for _, _element := range m.Data {
-				arrayBoxes = append(arrayBoxes, utils.BoxAnything("", _element, width-2))
-			}
-			boxes = append(boxes, utils.BoxBox("Data", utils.AlignBoxes(arrayBoxes, width-4), 0))
-		}
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
index 1674377..b517cf7 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
@@ -20,9 +20,7 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -36,9 +34,7 @@ type AdsReadStateRequest struct {
 type IAdsReadStateRequest interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -100,12 +96,12 @@ func (m *AdsReadStateRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadStateRequestParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsReadStateRequest"); pullErr != nil {
+func AdsReadStateRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsReadStateRequest"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if closeErr := io.CloseContext("AdsReadStateRequest"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsReadStateRequest"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -117,62 +113,16 @@ func AdsReadStateRequestParse(io utils.ReadBuffer) (*AdsData, error) {
 	return _child.Parent, nil
 }
 
-func (m *AdsReadStateRequest) Serialize(io utils.WriteBuffer) error {
+func (m *AdsReadStateRequest) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsReadStateRequest"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsReadStateRequest"); pushErr != nil {
 			return pushErr
 		}
 
-		if popErr := io.PopContext("AdsReadStateRequest"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsReadStateRequest"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsReadStateRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsReadStateRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	return nil
-}
-
-func (m AdsReadStateRequest) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsReadStateRequest) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsReadStateRequest"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
index 39ebfda..880a591 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -40,9 +38,7 @@ type AdsReadStateResponse struct {
 type IAdsReadStateResponse interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -116,37 +112,37 @@ func (m *AdsReadStateResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadStateResponseParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsReadStateResponse"); pullErr != nil {
+func AdsReadStateResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsReadStateResponse"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if pullErr := io.PullContext("result"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("result"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (result)
-	result, _resultErr := ReturnCodeParse(io)
+	result, _resultErr := ReturnCodeParse(readBuffer)
 	if _resultErr != nil {
 		return nil, errors.Wrap(_resultErr, "Error parsing 'result' field")
 	}
-	if closeErr := io.CloseContext("result"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("result"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Simple Field (adsState)
-	adsState, _adsStateErr := io.ReadUint16("adsState", 16)
+	adsState, _adsStateErr := readBuffer.ReadUint16("adsState", 16)
 	if _adsStateErr != nil {
 		return nil, errors.Wrap(_adsStateErr, "Error parsing 'adsState' field")
 	}
 
 	// Simple Field (deviceState)
-	deviceState, _deviceStateErr := io.ReadUint16("deviceState", 16)
+	deviceState, _deviceStateErr := readBuffer.ReadUint16("deviceState", 16)
 	if _deviceStateErr != nil {
 		return nil, errors.Wrap(_deviceStateErr, "Error parsing 'deviceState' field")
 	}
 
-	if closeErr := io.CloseContext("AdsReadStateResponse"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsReadStateResponse"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -161,18 +157,18 @@ func AdsReadStateResponseParse(io utils.ReadBuffer) (*AdsData, error) {
 	return _child.Parent, nil
 }
 
-func (m *AdsReadStateResponse) Serialize(io utils.WriteBuffer) error {
+func (m *AdsReadStateResponse) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsReadStateResponse"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsReadStateResponse"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (result)
-		if pushErr := io.PushContext("result"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("result"); pushErr != nil {
 			return pushErr
 		}
-		_resultErr := m.Result.Serialize(io)
-		if popErr := io.PopContext("result"); popErr != nil {
+		_resultErr := m.Result.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("result"); popErr != nil {
 			return popErr
 		}
 		if _resultErr != nil {
@@ -181,103 +177,22 @@ func (m *AdsReadStateResponse) Serialize(io utils.WriteBuffer) error {
 
 		// Simple Field (adsState)
 		adsState := uint16(m.AdsState)
-		_adsStateErr := io.WriteUint16("adsState", 16, (adsState))
+		_adsStateErr := writeBuffer.WriteUint16("adsState", 16, (adsState))
 		if _adsStateErr != nil {
 			return errors.Wrap(_adsStateErr, "Error serializing 'adsState' field")
 		}
 
 		// Simple Field (deviceState)
 		deviceState := uint16(m.DeviceState)
-		_deviceStateErr := io.WriteUint16("deviceState", 16, (deviceState))
+		_deviceStateErr := writeBuffer.WriteUint16("deviceState", 16, (deviceState))
 		if _deviceStateErr != nil {
 			return errors.Wrap(_deviceStateErr, "Error serializing 'deviceState' field")
 		}
 
-		if popErr := io.PopContext("AdsReadStateResponse"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsReadStateResponse"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsReadStateResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "result":
-				var data ReturnCode
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Result = data
-			case "adsState":
-				var data uint16
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.AdsState = data
-			case "deviceState":
-				var data uint16
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.DeviceState = data
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsReadStateResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.Result, xml.StartElement{Name: xml.Name{Local: "result"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.AdsState, xml.StartElement{Name: xml.Name{Local: "adsState"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.DeviceState, xml.StartElement{Name: xml.Name{Local: "deviceState"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsReadStateResponse) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsReadStateResponse) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsReadStateResponse"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Complex field (case complex)
-		boxes = append(boxes, m.Result.Box("result", width-2))
-		// Simple field (case simple)
-		// uint16 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("AdsState", m.AdsState, -1))
-		// Simple field (case simple)
-		// uint16 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("DeviceState", m.DeviceState, -1))
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
index 3fad0db..c0df38e 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
@@ -20,12 +20,8 @@
 package model
 
 import (
-	"encoding/hex"
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
-	"strings"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -44,9 +40,7 @@ type AdsReadWriteRequest struct {
 type IAdsReadWriteRequest interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -138,71 +132,71 @@ func (m *AdsReadWriteRequest) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadWriteRequestParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsReadWriteRequest"); pullErr != nil {
+func AdsReadWriteRequestParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsReadWriteRequest"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (indexGroup)
-	indexGroup, _indexGroupErr := io.ReadUint32("indexGroup", 32)
+	indexGroup, _indexGroupErr := readBuffer.ReadUint32("indexGroup", 32)
 	if _indexGroupErr != nil {
 		return nil, errors.Wrap(_indexGroupErr, "Error parsing 'indexGroup' field")
 	}
 
 	// Simple Field (indexOffset)
-	indexOffset, _indexOffsetErr := io.ReadUint32("indexOffset", 32)
+	indexOffset, _indexOffsetErr := readBuffer.ReadUint32("indexOffset", 32)
 	if _indexOffsetErr != nil {
 		return nil, errors.Wrap(_indexOffsetErr, "Error parsing 'indexOffset' field")
 	}
 
 	// Simple Field (readLength)
-	readLength, _readLengthErr := io.ReadUint32("readLength", 32)
+	readLength, _readLengthErr := readBuffer.ReadUint32("readLength", 32)
 	if _readLengthErr != nil {
 		return nil, errors.Wrap(_readLengthErr, "Error parsing 'readLength' field")
 	}
 
 	// Implicit Field (writeLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-	writeLength, _writeLengthErr := io.ReadUint32("writeLength", 32)
+	writeLength, _writeLengthErr := readBuffer.ReadUint32("writeLength", 32)
 	_ = writeLength
 	if _writeLengthErr != nil {
 		return nil, errors.Wrap(_writeLengthErr, "Error parsing 'writeLength' field")
 	}
 
 	// Array field (items)
-	if pullErr := io.PullContext("items", utils.WithRenderAsList(true)); pullErr != nil {
+	if pullErr := readBuffer.PullContext("items", utils.WithRenderAsList(true)); pullErr != nil {
 		return nil, pullErr
 	}
 	// Count array
 	items := make([]*AdsMultiRequestItem, utils.InlineIf(bool(bool(bool(bool(bool((indexGroup) == (61568)))) || bool(bool(bool((indexGroup) == (61569))))) || bool(bool(bool((indexGroup) == (61570))))), func() uint16 { return uint16(indexOffset) }, func() uint16 { return uint16(uint16(0)) }))
 	for curItem := uint16(0); curItem < uint16(utils.InlineIf(bool(bool(bool(bool(bool((indexGroup) == (61568)))) || bool(bool(bool((indexGroup) == (61569))))) || bool(bool(bool((indexGroup) == (61570))))), func() uint16 { return uint16(indexOffset) }, func() uint16 { return uint16(uint16(0)) })); curItem++ {
-		_item, _err := AdsMultiRequestItemParse(io, indexGroup)
+		_item, _err := AdsMultiRequestItemParse(readBuffer, indexGroup)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'items' field")
 		}
 		items[curItem] = _item
 	}
-	if closeErr := io.CloseContext("items", utils.WithRenderAsList(true)); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("items", utils.WithRenderAsList(true)); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Array field (data)
-	if pullErr := io.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
+	if pullErr := readBuffer.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
 		return nil, pullErr
 	}
 	// Count array
 	data := make([]int8, uint16(writeLength)-uint16(uint16(uint16(uint16(len(items)))*uint16(uint16(12)))))
 	for curItem := uint16(0); curItem < uint16(uint16(writeLength)-uint16(uint16(uint16(uint16(len(items)))*uint16(uint16(12))))); curItem++ {
-		_item, _err := io.ReadInt8("", 8)
+		_item, _err := readBuffer.ReadInt8("", 8)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'data' field")
 		}
 		data[curItem] = _item
 	}
-	if closeErr := io.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
 		return nil, closeErr
 	}
 
-	if closeErr := io.CloseContext("AdsReadWriteRequest"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsReadWriteRequest"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -219,223 +213,76 @@ func AdsReadWriteRequestParse(io utils.ReadBuffer) (*AdsData, error) {
 	return _child.Parent, nil
 }
 
-func (m *AdsReadWriteRequest) Serialize(io utils.WriteBuffer) error {
+func (m *AdsReadWriteRequest) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsReadWriteRequest"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsReadWriteRequest"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (indexGroup)
 		indexGroup := uint32(m.IndexGroup)
-		_indexGroupErr := io.WriteUint32("indexGroup", 32, (indexGroup))
+		_indexGroupErr := writeBuffer.WriteUint32("indexGroup", 32, (indexGroup))
 		if _indexGroupErr != nil {
 			return errors.Wrap(_indexGroupErr, "Error serializing 'indexGroup' field")
 		}
 
 		// Simple Field (indexOffset)
 		indexOffset := uint32(m.IndexOffset)
-		_indexOffsetErr := io.WriteUint32("indexOffset", 32, (indexOffset))
+		_indexOffsetErr := writeBuffer.WriteUint32("indexOffset", 32, (indexOffset))
 		if _indexOffsetErr != nil {
 			return errors.Wrap(_indexOffsetErr, "Error serializing 'indexOffset' field")
 		}
 
 		// Simple Field (readLength)
 		readLength := uint32(m.ReadLength)
-		_readLengthErr := io.WriteUint32("readLength", 32, (readLength))
+		_readLengthErr := writeBuffer.WriteUint32("readLength", 32, (readLength))
 		if _readLengthErr != nil {
 			return errors.Wrap(_readLengthErr, "Error serializing 'readLength' field")
 		}
 
 		// Implicit Field (writeLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 		writeLength := uint32(uint32(uint32(uint32(uint32(len(m.Items)))*uint32(uint32(utils.InlineIf(bool(bool((m.IndexGroup) == (61570))), func() uint16 { return uint16(uint32(16)) }, func() uint16 { return uint16(uint32(12)) }))))) + uint32(uint32(len(m.Data))))
-		_writeLengthErr := io.WriteUint32("writeLength", 32, (writeLength))
+		_writeLengthErr := writeBuffer.WriteUint32("writeLength", 32, (writeLength))
 		if _writeLengthErr != nil {
 			return errors.Wrap(_writeLengthErr, "Error serializing 'writeLength' field")
 		}
 
 		// Array Field (items)
 		if m.Items != nil {
-			if pushErr := io.PushContext("items", utils.WithRenderAsList(true)); pushErr != nil {
+			if pushErr := writeBuffer.PushContext("items", utils.WithRenderAsList(true)); pushErr != nil {
 				return pushErr
 			}
 			for _, _element := range m.Items {
-				_elementErr := _element.Serialize(io)
+				_elementErr := _element.Serialize(writeBuffer)
 				if _elementErr != nil {
 					return errors.Wrap(_elementErr, "Error serializing 'items' field")
 				}
 			}
-			if popErr := io.PopContext("items", utils.WithRenderAsList(true)); popErr != nil {
+			if popErr := writeBuffer.PopContext("items", utils.WithRenderAsList(true)); popErr != nil {
 				return popErr
 			}
 		}
 
 		// Array Field (data)
 		if m.Data != nil {
-			if pushErr := io.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
+			if pushErr := writeBuffer.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
 				return pushErr
 			}
 			for _, _element := range m.Data {
-				_elementErr := io.WriteInt8("", 8, _element)
+				_elementErr := writeBuffer.WriteInt8("", 8, _element)
 				if _elementErr != nil {
 					return errors.Wrap(_elementErr, "Error serializing 'data' field")
 				}
 			}
-			if popErr := io.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
+			if popErr := writeBuffer.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
 				return popErr
 			}
 		}
 
-		if popErr := io.PopContext("AdsReadWriteRequest"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsReadWriteRequest"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsReadWriteRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "indexGroup":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.IndexGroup = data
-			case "indexOffset":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.IndexOffset = data
-			case "readLength":
-				var data uint32
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.ReadLength = data
-			case "items":
-			arrayLoop:
-				for {
-					token, err = d.Token()
-					switch token.(type) {
-					case xml.StartElement:
-						tok := token.(xml.StartElement)
-						var dt *AdsMultiRequestItem
-						if err := d.DecodeElement(&dt, &tok); err != nil {
-							return err
-						}
-						m.Items = append(m.Items, dt)
-					default:
-						break arrayLoop
-					}
-				}
-			case "data":
-				var _encoded string
-				if err := d.DecodeElement(&_encoded, &tok); err != nil {
-					return err
-				}
-				_decoded, err := hex.DecodeString(_encoded)
-				_len := len(_decoded)
-				if err != nil {
-					return err
-				}
-				m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsReadWriteRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.IndexGroup, xml.StartElement{Name: xml.Name{Local: "indexGroup"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.IndexOffset, xml.StartElement{Name: xml.Name{Local: "indexOffset"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeElement(m.ReadLength, xml.StartElement{Name: xml.Name{Local: "readLength"}}); err != nil {
-		return err
-	}
-	if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "items"}}); err != nil {
-		return err
-	}
-	for _, arrayElement := range m.Items {
-		if err := e.EncodeElement(arrayElement, xml.StartElement{Name: xml.Name{Local: "items"}}); err != nil {
-			return err
-		}
-	}
-	if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "items"}}); err != nil {
-		return err
-	}
-	_encodedData := hex.EncodeToString(utils.Int8ArrayToByteArray(m.Data))
-	_encodedData = strings.ToUpper(_encodedData)
-	if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsReadWriteRequest) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsReadWriteRequest) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsReadWriteRequest"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("IndexGroup", m.IndexGroup, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("IndexOffset", m.IndexOffset, -1))
-		// Simple field (case simple)
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("ReadLength", m.ReadLength, -1))
-		// Implicit Field (writeLength)
-		writeLength := uint32(uint32(uint32(uint32(uint32(len(m.Items)))*uint32(uint32(utils.InlineIf(bool(bool((m.IndexGroup) == (61570))), func() uint16 { return uint16(uint32(16)) }, func() uint16 { return uint16(uint32(12)) }))))) + uint32(uint32(len(m.Data))))
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("WriteLength", writeLength, -1))
-		// Array Field (items)
-		if m.Items != nil {
-			// Complex array base type
-			arrayBoxes := make([]utils.AsciiBox, 0)
-			for _, _element := range m.Items {
-				arrayBoxes = append(arrayBoxes, utils.BoxAnything("", _element, width-2))
-			}
-			boxes = append(boxes, utils.BoxBox("Items", utils.AlignBoxes(arrayBoxes, width-4), 0))
-		}
-		// Array Field (data)
-		if m.Data != nil {
-			// Simple array base type int8 will be rendered one by one
-			arrayBoxes := make([]utils.AsciiBox, 0)
-			for _, _element := range m.Data {
-				arrayBoxes = append(arrayBoxes, utils.BoxAnything("", _element, width-2))
-			}
-			boxes = append(boxes, utils.BoxBox("Data", utils.AlignBoxes(arrayBoxes, width-4), 0))
-		}
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
index c16707d..129ce79 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
@@ -20,12 +20,8 @@
 package model
 
 import (
-	"encoding/hex"
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
-	"strings"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -41,9 +37,7 @@ type AdsReadWriteResponse struct {
 type IAdsReadWriteResponse interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 ///////////////////////////////////////////////////////////
@@ -118,49 +112,49 @@ func (m *AdsReadWriteResponse) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsReadWriteResponseParse(io utils.ReadBuffer) (*AdsData, error) {
-	if pullErr := io.PullContext("AdsReadWriteResponse"); pullErr != nil {
+func AdsReadWriteResponseParse(readBuffer utils.ReadBuffer) (*AdsData, error) {
+	if pullErr := readBuffer.PullContext("AdsReadWriteResponse"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	if pullErr := io.PullContext("result"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("result"); pullErr != nil {
 		return nil, pullErr
 	}
 
 	// Simple Field (result)
-	result, _resultErr := ReturnCodeParse(io)
+	result, _resultErr := ReturnCodeParse(readBuffer)
 	if _resultErr != nil {
 		return nil, errors.Wrap(_resultErr, "Error parsing 'result' field")
 	}
-	if closeErr := io.CloseContext("result"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("result"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Implicit Field (length) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-	length, _lengthErr := io.ReadUint32("length", 32)
+	length, _lengthErr := readBuffer.ReadUint32("length", 32)
 	_ = length
 	if _lengthErr != nil {
 		return nil, errors.Wrap(_lengthErr, "Error parsing 'length' field")
 	}
 
 	// Array field (data)
-	if pullErr := io.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
+	if pullErr := readBuffer.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
 		return nil, pullErr
 	}
 	// Count array
 	data := make([]int8, length)
 	for curItem := uint16(0); curItem < uint16(length); curItem++ {
-		_item, _err := io.ReadInt8("", 8)
+		_item, _err := readBuffer.ReadInt8("", 8)
 		if _err != nil {
 			return nil, errors.Wrap(_err, "Error parsing 'data' field")
 		}
 		data[curItem] = _item
 	}
-	if closeErr := io.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
 		return nil, closeErr
 	}
 
-	if closeErr := io.CloseContext("AdsReadWriteResponse"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("AdsReadWriteResponse"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -174,18 +168,18 @@ func AdsReadWriteResponseParse(io utils.ReadBuffer) (*AdsData, error) {
 	return _child.Parent, nil
 }
 
-func (m *AdsReadWriteResponse) Serialize(io utils.WriteBuffer) error {
+func (m *AdsReadWriteResponse) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := io.PushContext("AdsReadWriteResponse"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("AdsReadWriteResponse"); pushErr != nil {
 			return pushErr
 		}
 
 		// Simple Field (result)
-		if pushErr := io.PushContext("result"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("result"); pushErr != nil {
 			return pushErr
 		}
-		_resultErr := m.Result.Serialize(io)
-		if popErr := io.PopContext("result"); popErr != nil {
+		_resultErr := m.Result.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("result"); popErr != nil {
 			return popErr
 		}
 		if _resultErr != nil {
@@ -194,117 +188,31 @@ func (m *AdsReadWriteResponse) Serialize(io utils.WriteBuffer) error {
 
 		// Implicit Field (length) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
 		length := uint32(uint32(len(m.Data)))
-		_lengthErr := io.WriteUint32("length", 32, (length))
+		_lengthErr := writeBuffer.WriteUint32("length", 32, (length))
 		if _lengthErr != nil {
 			return errors.Wrap(_lengthErr, "Error serializing 'length' field")
 		}
 
 		// Array Field (data)
 		if m.Data != nil {
-			if pushErr := io.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
+			if pushErr := writeBuffer.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
 				return pushErr
 			}
 			for _, _element := range m.Data {
-				_elementErr := io.WriteInt8("", 8, _element)
+				_elementErr := writeBuffer.WriteInt8("", 8, _element)
 				if _elementErr != nil {
 					return errors.Wrap(_elementErr, "Error serializing 'data' field")
 				}
 			}
-			if popErr := io.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
+			if popErr := writeBuffer.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
 				return popErr
 			}
 		}
 
-		if popErr := io.PopContext("AdsReadWriteResponse"); popErr != nil {
+		if popErr := writeBuffer.PopContext("AdsReadWriteResponse"); popErr != nil {
 			return popErr
 		}
 		return nil
 	}
-	return m.Parent.SerializeParent(io, m, ser)
-}
-
-// Deprecated: the utils.ReadBufferWriteBased should be used instead
-func (m *AdsReadWriteResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-	var token xml.Token
-	var err error
-	foundContent := false
-	token = start
-	for {
-		switch token.(type) {
-		case xml.StartElement:
-			foundContent = true
-			tok := token.(xml.StartElement)
-			switch tok.Name.Local {
-			case "result":
-				var data ReturnCode
-				if err := d.DecodeElement(&data, &tok); err != nil {
-					return err
-				}
-				m.Result = data
-			case "data":
-				var _encoded string
-				if err := d.DecodeElement(&_encoded, &tok); err != nil {
-					return err
-				}
-				_decoded, err := hex.DecodeString(_encoded)
-				_len := len(_decoded)
-				if err != nil {
-					return err
-				}
-				m.Data = utils.ByteArrayToInt8Array(_decoded[0:_len])
-			}
-		}
-		token, err = d.Token()
-		if err != nil {
-			if err == io.EOF && foundContent {
-				return nil
-			}
-			return err
-		}
-	}
-}
-
-// Deprecated: the utils.WriteBufferReadBased should be used instead
-func (m *AdsReadWriteResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-	if err := e.EncodeElement(m.Result, xml.StartElement{Name: xml.Name{Local: "result"}}); err != nil {
-		return err
-	}
-	_encodedData := hex.EncodeToString(utils.Int8ArrayToByteArray(m.Data))
-	_encodedData = strings.ToUpper(_encodedData)
-	if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (m AdsReadWriteResponse) String() string {
-	return string(m.Box("", 120))
-}
-
-// Deprecated: the utils.WriteBufferBoxBased should be used instead
-func (m AdsReadWriteResponse) Box(name string, width int) utils.AsciiBox {
-	boxName := "AdsReadWriteResponse"
-	if name != "" {
-		boxName += "/" + name
-	}
-	childBoxer := func() []utils.AsciiBox {
-		boxes := make([]utils.AsciiBox, 0)
-		// Complex field (case complex)
-		boxes = append(boxes, m.Result.Box("result", width-2))
-		// Implicit Field (length)
-		length := uint32(uint32(len(m.Data)))
-		// uint32 can be boxed as anything with the least amount of space
-		boxes = append(boxes, utils.BoxAnything("Length", length, -1))
-		// Array Field (data)
-		if m.Data != nil {
-			// Simple array base type int8 will be rendered one by one
-			arrayBoxes := make([]utils.AsciiBox, 0)
-			for _, _element := range m.Data {
-				arrayBoxes = append(arrayBoxes, utils.BoxAnything("", _element, width-2))
-			}
-			boxes = append(boxes, utils.BoxBox("Data", utils.AlignBoxes(arrayBoxes, width-4), 0))
-		}
-		return boxes
-	}
-	return m.Parent.BoxParent(boxName, width, childBoxer)
+	return m.Parent.SerializeParent(writeBuffer, m, ser)
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsStampHeader.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsStampHeader.go
index e15bebc..1323751 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsStampHeader.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsStampHeader.go
@@ -20,10 +20,8 @@
 package model
 
 import (
-	"encoding/xml"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"io"
 )
 
 // Code generated by build-utils. DO NOT EDIT.
@@ -39,9 +37,7 @@ type AdsStampHeader struct {
 type IAdsStampHeader interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
-	Serialize(io utils.WriteBuffer) error
-	xml.Marshaler
-	xml.Unmarshaler
+	Serialize(writeBuffer utils.WriteBuffer) error
 }
 
 func NewAdsStampHeader(timestamp uint64, samples uint32, adsNotificationSamples []*AdsNotificationSample) *AdsStampHeader {
@@ -93,41 +89,41 @@ func (m *AdsStampHeader) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func AdsStampHeaderParse(io utils.ReadBuffer) (*AdsStampHeader, error) {
-	if pullErr := io.PullContext("AdsStampHeader"); pullErr != nil {
+func AdsStampHeaderParse(readBuffer utils.ReadBuffer) (*AdsStampHeader, error) {
+	if pullErr := readBuffer.PullContext("AdsStampHeader"); pullErr != nil {
... 105279 lines suppressed ...