You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2020/11/09 12:11:48 UTC

[plc4x] branch feature/plc4go updated (c2f500c -> cb235b9)

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

cdutz pushed a change to branch feature/plc4go
in repository https://gitbox.apache.org/repos/asf/plc4x.git.


    from c2f500c  - Changed the code for the xml mashalling and unmarshalling to work with the changed structures - Got the integration-tests workin again
     new ef3dd71  - Deleted the files in model in order to replace them with ones with different case name
     new 937756d  - Renamed some of the KNX type names to be consistent regarding case - Fixed a bug in the KNX driver
     new cd5ddc4  - Continued implementing the Go KNX driver
     new cb235b9  - Implemented the connection establishment of KNX connection and PING operation

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../BaseFreemarkerLanguageTemplateHelper.java      |   2 +-
 .../language/go/GoLanguageTemplateHelper.java      |   8 +-
 .../main/resources/templates/go/enum-template.ftlh |  18 +-
 .../resources/templates/go/model-template.ftlh     |  10 +-
 .../templates/go/parser-factory-template.ftlh      |   6 +-
 .../templates/go/xml-parser-factory-template.ftlh  |   4 +-
 .../knxnetip/ParserSerializerTestsuite.xml         |  42 +--
 plc4go/cmd/main/drivers/bacnetip_test.go           |   4 +-
 plc4go/cmd/main/drivers/knxnetip_test.go           |  99 +++++-
 plc4go/cmd/main/drivers/modbus_test.go             |  10 +-
 plc4go/cmd/main/drivers/s7_test.go                 |   4 +-
 .../cmd/main/drivers/tests/modbus_driver_test.go   |   4 +-
 .../drivers/tests/modbus_parser_serializer_test.go |   2 +-
 plc4go/examples/read/hello_world_plc4go_read.go    |  10 +-
 plc4go/examples/write/hello_world_plc4go_write.go  |  10 +-
 plc4go/go.mod                                      |   2 +-
 plc4go/internal/plc4go/bacnetip/BacnetIpDriver.go  |   2 +-
 .../plc4go/bacnetip/readwrite/ParserHelper.go      |   6 +-
 .../plc4go/bacnetip/readwrite/XmlParserHelper.go   |   4 +-
 .../plc4go/bacnetip/readwrite/model/APDU.go        |  12 +-
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   |  12 +-
 .../bacnetip/readwrite/model/APDUComplexAck.go     |  12 +-
 .../readwrite/model/APDUConfirmedRequest.go        |  12 +-
 .../plc4go/bacnetip/readwrite/model/APDUError.go   |  12 +-
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  |  12 +-
 .../bacnetip/readwrite/model/APDUSegmentAck.go     |  12 +-
 .../bacnetip/readwrite/model/APDUSimpleAck.go      |  12 +-
 .../readwrite/model/APDUUnconfirmedRequest.go      |  12 +-
 .../bacnetip/readwrite/model/ApplicationTag.go     |  13 +-
 .../bacnetip/readwrite/model/BACnetAddress.go      |  12 +-
 .../readwrite/model/BACnetConfirmedServiceACK.go   |  12 +-
 .../BACnetConfirmedServiceACKAtomicReadFile.go     |  12 +-
 .../BACnetConfirmedServiceACKAtomicWriteFile.go    |  12 +-
 ...tConfirmedServiceACKConfirmedPrivateTransfer.go |  12 +-
 .../model/BACnetConfirmedServiceACKCreateObject.go |  12 +-
 .../BACnetConfirmedServiceACKGetAlarmSummary.go    |  12 +-
 ...ACnetConfirmedServiceACKGetEnrollmentSummary.go |  12 +-
 ...BACnetConfirmedServiceACKGetEventInformation.go |  12 +-
 .../model/BACnetConfirmedServiceACKReadProperty.go |  12 +-
 ...ACnetConfirmedServiceACKReadPropertyMultiple.go |  12 +-
 .../model/BACnetConfirmedServiceACKReadRange.go    |  12 +-
 ...BACnetConfirmedServiceACKRemovedAuthenticate.go |  12 +-
 ...rmedServiceACKRemovedReadPropertyConditional.go |  12 +-
 .../model/BACnetConfirmedServiceACKVTData.go       |  12 +-
 .../model/BACnetConfirmedServiceACKVTOpen.go       |  12 +-
 .../model/BACnetConfirmedServiceRequest.go         |  12 +-
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |  12 +-
 .../BACnetConfirmedServiceRequestAddListElement.go |  12 +-
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |  12 +-
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |  12 +-
 ...firmedServiceRequestConfirmedCOVNotification.go |  12 +-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |  12 +-
 ...rmedServiceRequestConfirmedEventNotification.go |  12 +-
 ...firmedServiceRequestConfirmedPrivateTransfer.go |  12 +-
 ...tConfirmedServiceRequestConfirmedTextMessage.go |  12 +-
 .../BACnetConfirmedServiceRequestCreateObject.go   |  12 +-
 .../BACnetConfirmedServiceRequestDeleteObject.go   |  12 +-
 ...rmedServiceRequestDeviceCommunicationControl.go |  12 +-
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |  12 +-
 ...etConfirmedServiceRequestGetEventInformation.go |  12 +-
 ...etConfirmedServiceRequestLifeSafetyOperation.go |  12 +-
 .../BACnetConfirmedServiceRequestReadProperty.go   |  12 +-
 ...tConfirmedServiceRequestReadPropertyMultiple.go |  12 +-
 .../BACnetConfirmedServiceRequestReadRange.go      |  12 +-
 ...netConfirmedServiceRequestReinitializeDevice.go |  12 +-
 ...CnetConfirmedServiceRequestRemoveListElement.go |  12 +-
 ...etConfirmedServiceRequestRemovedAuthenticate.go |  12 +-
 ...ServiceRequestRemovedReadPropertyConditional.go |  12 +-
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |  12 +-
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |  12 +-
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |  12 +-
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |  12 +-
 .../model/BACnetConfirmedServiceRequestVTClose.go  |  12 +-
 .../model/BACnetConfirmedServiceRequestVTData.go   |  12 +-
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |  12 +-
 .../BACnetConfirmedServiceRequestWriteProperty.go  |  12 +-
 ...ConfirmedServiceRequestWritePropertyMultiple.go |  12 +-
 .../plc4go/bacnetip/readwrite/model/BACnetError.go |  12 +-
 .../readwrite/model/BACnetErrorAtomicReadFile.go   |  12 +-
 .../readwrite/model/BACnetErrorAtomicWriteFile.go  |  12 +-
 .../model/BACnetErrorConfirmedPrivateTransfer.go   |  12 +-
 .../readwrite/model/BACnetErrorCreateObject.go     |  12 +-
 .../readwrite/model/BACnetErrorGetAlarmSummary.go  |  12 +-
 .../model/BACnetErrorGetEnrollmentSummary.go       |  12 +-
 .../model/BACnetErrorGetEventInformation.go        |  12 +-
 .../readwrite/model/BACnetErrorReadProperty.go     |  12 +-
 .../model/BACnetErrorReadPropertyMultiple.go       |  12 +-
 .../readwrite/model/BACnetErrorReadRange.go        |  12 +-
 .../model/BACnetErrorRemovedAuthenticate.go        |  12 +-
 .../BACnetErrorRemovedReadPropertyConditional.go   |  12 +-
 .../bacnetip/readwrite/model/BACnetErrorVTData.go  |  12 +-
 .../bacnetip/readwrite/model/BACnetErrorVTOpen.go  |  12 +-
 .../bacnetip/readwrite/model/BACnetNetworkType.go  |  13 +-
 .../bacnetip/readwrite/model/BACnetNodeType.go     |  13 +-
 .../bacnetip/readwrite/model/BACnetNotifyType.go   |  13 +-
 .../bacnetip/readwrite/model/BACnetObjectType.go   |  13 +-
 .../bacnetip/readwrite/model/BACnetServiceAck.go   |  12 +-
 .../model/BACnetServiceAckAtomicReadFile.go        |  12 +-
 .../model/BACnetServiceAckAtomicWriteFile.go       |  12 +-
 .../BACnetServiceAckConfirmedPrivateTransfer.go    |  12 +-
 .../model/BACnetServiceAckCreateObject.go          |  12 +-
 .../model/BACnetServiceAckGetAlarmSummary.go       |  12 +-
 .../model/BACnetServiceAckGetEnrollmentSummary.go  |  12 +-
 .../model/BACnetServiceAckGetEventInformation.go   |  12 +-
 .../model/BACnetServiceAckReadProperty.go          |  12 +-
 .../model/BACnetServiceAckReadPropertyMultiple.go  |  12 +-
 .../readwrite/model/BACnetServiceAckReadRange.go   |  12 +-
 .../model/BACnetServiceAckRemovedAuthenticate.go   |  12 +-
 ...CnetServiceAckRemovedReadPropertyConditional.go |  12 +-
 .../readwrite/model/BACnetServiceAckVTData.go      |  12 +-
 .../readwrite/model/BACnetServiceAckVTOpen.go      |  12 +-
 .../plc4go/bacnetip/readwrite/model/BACnetTag.go   |  12 +-
 .../model/BACnetTagApplicationBitString.go         |  12 +-
 .../readwrite/model/BACnetTagApplicationBoolean.go |  12 +-
 .../model/BACnetTagApplicationCharacterString.go   |  12 +-
 .../readwrite/model/BACnetTagApplicationDate.go    |  12 +-
 .../readwrite/model/BACnetTagApplicationDouble.go  |  12 +-
 .../model/BACnetTagApplicationEnumerated.go        |  12 +-
 .../readwrite/model/BACnetTagApplicationNull.go    |  12 +-
 .../model/BACnetTagApplicationObjectIdentifier.go  |  12 +-
 .../model/BACnetTagApplicationOctetString.go       |  12 +-
 .../readwrite/model/BACnetTagApplicationReal.go    |  12 +-
 .../model/BACnetTagApplicationSignedInteger.go     |  12 +-
 .../readwrite/model/BACnetTagApplicationTime.go    |  12 +-
 .../model/BACnetTagApplicationUnsignedInteger.go   |  12 +-
 .../bacnetip/readwrite/model/BACnetTagContext.go   |  12 +-
 .../readwrite/model/BACnetTagWithContent.go        |  12 +-
 .../model/BACnetUnconfirmedServiceRequest.go       |  12 +-
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |  12 +-
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |  12 +-
 ...UnconfirmedServiceRequestTimeSynchronization.go |  12 +-
 ...onfirmedServiceRequestUTCTimeSynchronization.go |  12 +-
 ...rmedServiceRequestUnconfirmedCOVNotification.go |  12 +-
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |  12 +-
 ...edServiceRequestUnconfirmedEventNotification.go |  12 +-
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go |  12 +-
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |  12 +-
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |  12 +-
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |  12 +-
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |  12 +-
 .../plc4go/bacnetip/readwrite/model/BVLC.go        |  12 +-
 .../model/BVLCDeleteForeignDeviceTableEntry.go     |  12 +-
 .../model/BVLCDistributeBroadcastToNetwork.go      |  12 +-
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |  12 +-
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |  12 +-
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |  12 +-
 .../model/BVLCReadBroadcastDistributionTable.go    |  12 +-
 .../model/BVLCReadBroadcastDistributionTableAck.go |  12 +-
 .../readwrite/model/BVLCReadForeignDeviceTable.go  |  12 +-
 .../model/BVLCReadForeignDeviceTableAck.go         |  12 +-
 .../readwrite/model/BVLCRegisterForeignDevice.go   |  12 +-
 .../plc4go/bacnetip/readwrite/model/BVLCResult.go  |  12 +-
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |  12 +-
 .../model/BVLCWideBroadcastDistributionTable.go    |  12 +-
 .../plc4go/bacnetip/readwrite/model/NLM.go         |  12 +-
 .../readwrite/model/NLMIAmRouterToNetwork.go       |  12 +-
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |  12 +-
 .../plc4go/bacnetip/readwrite/model/NPDU.go        |  12 +-
 .../internal/plc4go/knxnetip/KncNetIpConnection.go | 341 +++++++++++++++++++++
 plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go  |  26 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpField.go   |  50 ++-
 .../plc4go/knxnetip/KnxNetIpFieldHandler.go        |  14 +-
 .../plc4go/knxnetip/KnxNetIpMessageCodec.go        |  37 +--
 .../KnxNetIpValueHandler.go}                       |  21 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go  |  72 +++++
 .../plc4go/knxnetip/readwrite/ParserHelper.go      |  26 +-
 .../plc4go/knxnetip/readwrite/XmlParserHelper.go   |  44 +--
 .../plc4go/knxnetip/readwrite/model/APCI.go        |  13 +-
 .../plc4go/knxnetip/readwrite/model/CEMI.go        |  12 +-
 .../readwrite/model/CEMIAdditionalInformation.go   |  12 +-
 .../CEMIAdditionalInformationBusmonitorInfo.go     |  12 +-
 .../CEMIAdditionalInformationRelativeTimestamp.go  |  12 +-
 .../knxnetip/readwrite/model/CEMIBusmonInd.go      |  12 +-
 .../plc4go/knxnetip/readwrite/model/CEMIDataCon.go |  12 +-
 .../knxnetip/readwrite/model/CEMIDataFrame.go      |  20 +-
 .../plc4go/knxnetip/readwrite/model/CEMIDataInd.go |  12 +-
 .../plc4go/knxnetip/readwrite/model/CEMIDataReq.go |  12 +-
 .../plc4go/knxnetip/readwrite/model/CEMIFrame.go   |  12 +-
 .../knxnetip/readwrite/model/CEMIFrameAck.go       |  12 +-
 .../knxnetip/readwrite/model/CEMIFrameData.go      |  20 +-
 .../knxnetip/readwrite/model/CEMIFrameDataExt.go   |  20 +-
 .../readwrite/model/CEMIFramePollingData.go        |  12 +-
 .../readwrite/model/CEMIFramePollingDataExt.go     |  12 +-
 .../knxnetip/readwrite/model/CEMIMPropReadCon.go   |  12 +-
 .../knxnetip/readwrite/model/CEMIMPropReadReq.go   |  12 +-
 .../knxnetip/readwrite/model/CEMIPollDataCon.go    |  12 +-
 .../knxnetip/readwrite/model/CEMIPollDataReq.go    |  12 +-
 .../knxnetip/readwrite/model/CEMIPriority.go       |  13 +-
 .../plc4go/knxnetip/readwrite/model/CEMIRawCon.go  |  12 +-
 .../plc4go/knxnetip/readwrite/model/CEMIRawInd.go  |  12 +-
 .../plc4go/knxnetip/readwrite/model/CEMIRawReq.go  |  12 +-
 .../knxnetip/readwrite/model/ConnectionRequest.go  |  28 +-
 .../model/ConnectionRequestInformation.go          |  12 +-
 ...ConnectionRequestInformationDeviceManagement.go |  12 +-
 ...ConnectionRequestInformationTunnelConnection.go |  12 +-
 .../knxnetip/readwrite/model/ConnectionResponse.go |  28 +-
 .../readwrite/model/ConnectionResponseDataBlock.go |  12 +-
 .../ConnectionResponseDataBlockDeviceManagement.go |  12 +-
 .../ConnectionResponseDataBlockTunnelConnection.go |  20 +-
 .../readwrite/model/ConnectionStateRequest.go      |  28 +-
 .../readwrite/model/ConnectionStateResponse.go     |  28 +-
 .../knxnetip/readwrite/model/DIBDeviceInfo.go      |  20 +-
 .../knxnetip/readwrite/model/DIBSuppSvcFamilies.go |  12 +-
 .../knxnetip/readwrite/model/DescriptionRequest.go |  28 +-
 .../readwrite/model/DescriptionResponse.go         |  28 +-
 .../readwrite/model/DeviceConfigurationAck.go      |  28 +-
 .../model/DeviceConfigurationAckDataBlock.go       |  12 +-
 .../readwrite/model/DeviceConfigurationRequest.go  |  28 +-
 .../model/DeviceConfigurationRequestDataBlock.go   |  12 +-
 .../knxnetip/readwrite/model/DeviceStatus.go       |  12 +-
 .../knxnetip/readwrite/model/DisconnectRequest.go  |  28 +-
 .../knxnetip/readwrite/model/DisconnectResponse.go |  28 +-
 .../readwrite/model/HPAIControlEndpoint.go         |  12 +-
 .../knxnetip/readwrite/model/HPAIDataEndpoint.go   |  12 +-
 .../readwrite/model/HPAIDiscoveryEndpoint.go       |  12 +-
 .../knxnetip/readwrite/model/HostProtocolCode.go   |  13 +-
 .../plc4go/knxnetip/readwrite/model/IPAddress.go   |  12 +-
 .../model/{KNXAddress.go => KnxAddress.go}         |  42 +--
 .../knxnetip/readwrite/model/KnxDatapoint.go       |   6 +-
 .../knxnetip/readwrite/model/KnxDatapointType.go   |  11 +-
 .../{KNXGroupAddress.go => KnxGroupAddress.go}     |  80 ++---
 ...upAddress2Level.go => KnxGroupAddress2Level.go} |  58 ++--
 ...upAddress3Level.go => KnxGroupAddress3Level.go} |  58 ++--
 ...essFreeLevel.go => KnxGroupAddressFreeLevel.go} |  58 ++--
 .../plc4go/knxnetip/readwrite/model/KnxLayer.go    |  13 +-
 .../knxnetip/readwrite/model/KnxNetIpCore.go       |  12 +-
 .../readwrite/model/KnxNetIpDeviceManagement.go    |  12 +-
 .../{KNXNetIPMessage.go => KnxNetIpMessage.go}     |  62 ++--
 .../knxnetip/readwrite/model/KnxNetIpTunneling.go  |  12 +-
 .../knxnetip/readwrite/model/KnxNetObjectServer.go |  12 +-
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |  12 +-
 .../readwrite/model/KnxNetRemoteLogging.go         |  12 +-
 .../knxnetip/readwrite/model/KnxStaticHelper.go    |  50 ---
 .../plc4go/knxnetip/readwrite/model/MACAddress.go  |  12 +-
 .../model/ProjectInstallationIdentifier.go         |  12 +-
 .../knxnetip/readwrite/model/RelativeTimestamp.go  |  12 +-
 .../knxnetip/readwrite/model/RoutingIndication.go  |  28 +-
 .../knxnetip/readwrite/model/SearchRequest.go      |  28 +-
 .../knxnetip/readwrite/model/SearchResponse.go     |  28 +-
 .../plc4go/knxnetip/readwrite/model/ServiceId.go   |  12 +-
 .../plc4go/knxnetip/readwrite/model/Status.go      |  13 +-
 .../plc4go/knxnetip/readwrite/model/TPCI.go        |  13 +-
 .../knxnetip/readwrite/model/TunnelingRequest.go   |  28 +-
 .../readwrite/model/TunnelingRequestDataBlock.go   |  12 +-
 .../knxnetip/readwrite/model/TunnelingResponse.go  |  28 +-
 .../readwrite/model/TunnelingResponseDataBlock.go  |  12 +-
 .../knxnetip/readwrite/model/UnknownMessage.go     |  28 +-
 plc4go/internal/plc4go/modbus/ModbusConnection.go  |  14 +-
 plc4go/internal/plc4go/modbus/ModbusDriver.go      |  10 +-
 plc4go/internal/plc4go/modbus/ModbusField.go       |   2 +-
 .../internal/plc4go/modbus/ModbusFieldHandler.go   |   6 +-
 .../internal/plc4go/modbus/ModbusMessageCodec.go   |   8 +-
 plc4go/internal/plc4go/modbus/ModbusReader.go      |  14 +-
 .../internal/plc4go/modbus/ModbusValueHandler.go   |   2 +-
 plc4go/internal/plc4go/modbus/ModbusWriter.go      |  12 +-
 .../plc4go/modbus/readwrite/ParserHelper.go        |   6 +-
 .../plc4go/modbus/readwrite/XmlParserHelper.go     |   4 +-
 .../plc4go/modbus/readwrite/model/DataItem.go      |   6 +-
 .../modbus/readwrite/model/ModbusConstants.go      |  12 +-
 .../modbus/readwrite/model/ModbusDataTypeSizes.go  |  11 +-
 .../modbus/readwrite/model/ModbusErrorCode.go      |  13 +-
 .../plc4go/modbus/readwrite/model/ModbusPDU.go     |  12 +-
 .../readwrite/model/ModbusPDUDiagnosticRequest.go  |  12 +-
 .../readwrite/model/ModbusPDUDiagnosticResponse.go |  12 +-
 .../modbus/readwrite/model/ModbusPDUError.go       |  12 +-
 .../model/ModbusPDUGetComEventCounterRequest.go    |  12 +-
 .../model/ModbusPDUGetComEventCounterResponse.go   |  12 +-
 .../model/ModbusPDUGetComEventLogRequest.go        |  12 +-
 .../model/ModbusPDUGetComEventLogResponse.go       |  12 +-
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |  12 +-
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |  12 +-
 .../readwrite/model/ModbusPDUReadCoilsRequest.go   |  12 +-
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |  12 +-
 .../ModbusPDUReadDeviceIdentificationRequest.go    |  12 +-
 .../ModbusPDUReadDeviceIdentificationResponse.go   |  12 +-
 .../model/ModbusPDUReadDiscreteInputsRequest.go    |  12 +-
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |  12 +-
 .../model/ModbusPDUReadExceptionStatusRequest.go   |  12 +-
 .../model/ModbusPDUReadExceptionStatusResponse.go  |  12 +-
 .../model/ModbusPDUReadFifoQueueRequest.go         |  12 +-
 .../model/ModbusPDUReadFifoQueueResponse.go        |  12 +-
 .../model/ModbusPDUReadFileRecordRequest.go        |  12 +-
 .../model/ModbusPDUReadFileRecordRequestItem.go    |  12 +-
 .../model/ModbusPDUReadFileRecordResponse.go       |  12 +-
 .../model/ModbusPDUReadFileRecordResponseItem.go   |  12 +-
 .../model/ModbusPDUReadHoldingRegistersRequest.go  |  12 +-
 .../model/ModbusPDUReadHoldingRegistersResponse.go |  12 +-
 .../model/ModbusPDUReadInputRegistersRequest.go    |  12 +-
 .../model/ModbusPDUReadInputRegistersResponse.go   |  12 +-
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |  12 +-
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |  12 +-
 .../model/ModbusPDUReportServerIdRequest.go        |  12 +-
 .../model/ModbusPDUReportServerIdResponse.go       |  12 +-
 .../model/ModbusPDUWriteFileRecordRequest.go       |  12 +-
 .../model/ModbusPDUWriteFileRecordRequestItem.go   |  12 +-
 .../model/ModbusPDUWriteFileRecordResponse.go      |  12 +-
 .../model/ModbusPDUWriteFileRecordResponseItem.go  |  12 +-
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |  12 +-
 .../model/ModbusPDUWriteMultipleCoilsResponse.go   |  12 +-
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |  12 +-
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |  12 +-
 .../model/ModbusPDUWriteSingleCoilRequest.go       |  12 +-
 .../model/ModbusPDUWriteSingleCoilResponse.go      |  12 +-
 .../model/ModbusPDUWriteSingleRegisterRequest.go   |  12 +-
 .../model/ModbusPDUWriteSingleRegisterResponse.go  |  12 +-
 .../modbus/readwrite/model/ModbusSerialADU.go      |  12 +-
 .../plc4go/modbus/readwrite/model/ModbusTcpADU.go  |  12 +-
 .../internal/plc4go/model/DefaultPlcReadRequest.go |   4 +-
 .../plc4go/model/DefaultPlcReadResponse.go         |   4 +-
 ...Request.go => DefaultPlcSubscriptionRequest.go} |  48 +--
 .../plc4go/model/DefaultPlcWriteRequest.go         |   8 +-
 .../plc4go/model/DefaultPlcWriteResponse.go        |   2 +-
 plc4go/internal/plc4go/model/RequestInterceptor.go |   2 +-
 .../plc4go/model/values/IEC61131ValueHandler.go    |   4 +-
 plc4go/internal/plc4go/model/values/PlcList.go     |   2 +-
 plc4go/internal/plc4go/model/values/PlcStruct.go   |   2 +-
 .../plc4go/model/values/PlcValueAdapter.go         |   2 +-
 plc4go/internal/plc4go/s7/S7Driver.go              |   2 +-
 .../internal/plc4go/s7/readwrite/ParserHelper.go   |   6 +-
 .../plc4go/s7/readwrite/XmlParserHelper.go         |   4 +-
 .../plc4go/s7/readwrite/model/COTPPacket.go        |  12 +-
 .../readwrite/model/COTPPacketConnectionRequest.go |  12 +-
 .../model/COTPPacketConnectionResponse.go          |  12 +-
 .../plc4go/s7/readwrite/model/COTPPacketData.go    |  12 +-
 .../readwrite/model/COTPPacketDisconnectRequest.go |  12 +-
 .../model/COTPPacketDisconnectResponse.go          |  12 +-
 .../s7/readwrite/model/COTPPacketTpduError.go      |  12 +-
 .../plc4go/s7/readwrite/model/COTPParameter.go     |  12 +-
 .../s7/readwrite/model/COTPParameterCalledTsap.go  |  12 +-
 .../s7/readwrite/model/COTPParameterCallingTsap.go |  12 +-
 .../s7/readwrite/model/COTPParameterChecksum.go    |  12 +-
 ...COTPParameterDisconnectAdditionalInformation.go |  12 +-
 .../s7/readwrite/model/COTPParameterTpduSize.go    |  12 +-
 .../plc4go/s7/readwrite/model/COTPProtocolClass.go |  13 +-
 .../plc4go/s7/readwrite/model/COTPTpduSize.go      |  13 +-
 .../internal/plc4go/s7/readwrite/model/DataItem.go |   6 +-
 .../s7/readwrite/model/DataTransportErrorCode.go   |  13 +-
 .../plc4go/s7/readwrite/model/DataTransportSize.go |  13 +-
 .../plc4go/s7/readwrite/model/DeviceGroup.go       |  13 +-
 .../plc4go/s7/readwrite/model/MemoryArea.go        |  13 +-
 .../plc4go/s7/readwrite/model/S7Address.go         |  12 +-
 .../plc4go/s7/readwrite/model/S7AddressAny.go      |  12 +-
 .../plc4go/s7/readwrite/model/S7Message.go         |  12 +-
 .../plc4go/s7/readwrite/model/S7MessageRequest.go  |  12 +-
 .../plc4go/s7/readwrite/model/S7MessageResponse.go |  12 +-
 .../s7/readwrite/model/S7MessageResponseData.go    |  12 +-
 .../plc4go/s7/readwrite/model/S7MessageUserData.go |  12 +-
 .../plc4go/s7/readwrite/model/S7Parameter.go       |  12 +-
 .../readwrite/model/S7ParameterReadVarRequest.go   |  12 +-
 .../readwrite/model/S7ParameterReadVarResponse.go  |  12 +-
 .../model/S7ParameterSetupCommunication.go         |  12 +-
 .../s7/readwrite/model/S7ParameterUserData.go      |  12 +-
 .../s7/readwrite/model/S7ParameterUserDataItem.go  |  12 +-
 .../model/S7ParameterUserDataItemCPUFunctions.go   |  12 +-
 .../readwrite/model/S7ParameterWriteVarRequest.go  |  12 +-
 .../readwrite/model/S7ParameterWriteVarResponse.go |  12 +-
 .../plc4go/s7/readwrite/model/S7Payload.go         |  12 +-
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |  12 +-
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |  12 +-
 .../s7/readwrite/model/S7PayloadUserDataItem.go    |  12 +-
 ...PayloadUserDataItemCpuFunctionReadSzlRequest.go |  12 +-
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |  12 +-
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |  12 +-
 .../readwrite/model/S7PayloadWriteVarResponse.go   |  12 +-
 .../plc4go/s7/readwrite/model/S7StaticHelper.go    |   4 +-
 .../s7/readwrite/model/S7VarPayloadDataItem.go     |  12 +-
 .../s7/readwrite/model/S7VarPayloadStatusItem.go   |  12 +-
 .../readwrite/model/S7VarRequestParameterItem.go   |  12 +-
 .../model/S7VarRequestParameterItemAddress.go      |  12 +-
 .../plc4go/s7/readwrite/model/SzlDataTreeItem.go   |  12 +-
 plc4go/internal/plc4go/s7/readwrite/model/SzlId.go |  12 +-
 .../s7/readwrite/model/SzlModuleTypeClass.go       |  13 +-
 .../plc4go/s7/readwrite/model/SzlSublist.go        |  13 +-
 .../plc4go/s7/readwrite/model/TPKTPacket.go        |  12 +-
 .../plc4go/s7/readwrite/model/TransportSize.go     |  13 +-
 plc4go/internal/plc4go/spi/Message.go              |   2 +-
 plc4go/internal/plc4go/spi/PlcFieldHandler.go      |   2 +-
 plc4go/internal/plc4go/spi/PlcReader.go            |   2 +-
 .../plc4go/spi/{Message.go => PlcSubscriber.go}    |   9 +-
 plc4go/internal/plc4go/spi/PlcValueHandler.go      |   4 +-
 plc4go/internal/plc4go/spi/PlcWriter.go            |   2 +-
 .../plc4go/spi/TransportInstanceExposer.go         |   2 +-
 .../interceptors/SingleItemRequestInterceptor.go   |   6 +-
 .../internal/plc4go/testutils/DriverTestRunner.go  |  14 +-
 .../plc4go/testutils/ParserSerializerTestRunner.go |   4 +-
 .../internal/plc4go/transports/tcp/TcpTransport.go |  56 ++--
 .../plc4go/transports/test/TestTransport.go        |   2 +-
 .../{tcp/TcpTransport.go => udp/UdpTransport.go}   | 118 ++++---
 plc4go/pkg/plc4go/connection.go                    |   2 +-
 plc4go/pkg/plc4go/driver.go                        |   2 +-
 plc4go/pkg/plc4go/driverManager.go                 |   2 +-
 plc4go/pkg/plc4go/model/plc_read_response.go       |   2 +-
 plc4go/pkg/plc4go/model/plc_write_request.go       |   2 +-
 plc4go/pom.xml                                     |   2 +-
 .../apache/plc4x/java/knxnetip/KnxNetIpDriver.java |  10 +-
 .../knxnetip/context/KnxNetIpDriverContext.java    |  14 +-
 .../knxnetip/protocol/KnxNetIpProtocolLogic.java   |  65 ++--
 .../org/apache/plc4x/java/knxnetip/IOTest.java     |  20 +-
 .../{KNXNetIpTest.java => KnxNetIpTest.java}       |   4 +-
 .../messages/DefaultPlcSubscriptionResponse.java   |   1 -
 .../plc4x/java/transport/tcp/TcpTransport.java     |   2 +-
 .../plc4x/java/transport/udp/UdpTransport.java     |   4 +-
 .../resources/protocols/knxnetip/knxnetip.mspec    |  22 +-
 .../apache/plc4x/protocols/knxnetip/protocol.tdml  | 112 +++----
 .../knxnetip/ParserSerializerTestsuite.xml         |  42 +--
 .../adapters/source/knxnetip/KnxNetIpAdapter.java  |   4 +-
 406 files changed, 3299 insertions(+), 2783 deletions(-)
 create mode 100644 plc4go/internal/plc4go/knxnetip/KncNetIpConnection.go
 copy plc4go/internal/plc4go/{modbus/ModbusValueHandler.go => knxnetip/KnxNetIpValueHandler.go} (64%)
 create mode 100644 plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go
 rename plc4go/internal/plc4go/knxnetip/readwrite/model/{KNXAddress.go => KnxAddress.go} (82%)
 rename plc4go/internal/plc4go/knxnetip/readwrite/model/{KNXGroupAddress.go => KnxGroupAddress.go} (71%)
 rename plc4go/internal/plc4go/knxnetip/readwrite/model/{KNXGroupAddress2Level.go => KnxGroupAddress2Level.go} (73%)
 rename plc4go/internal/plc4go/knxnetip/readwrite/model/{KNXGroupAddress3Level.go => KnxGroupAddress3Level.go} (77%)
 rename plc4go/internal/plc4go/knxnetip/readwrite/model/{KNXGroupAddressFreeLevel.go => KnxGroupAddressFreeLevel.go} (68%)
 rename plc4go/internal/plc4go/knxnetip/readwrite/model/{KNXNetIPMessage.go => KnxNetIpMessage.go} (92%)
 delete mode 100644 plc4go/internal/plc4go/knxnetip/readwrite/model/KnxStaticHelper.go
 copy plc4go/internal/plc4go/model/{DefaultPlcWriteRequest.go => DefaultPlcSubscriptionRequest.go} (72%)
 copy plc4go/internal/plc4go/spi/{Message.go => PlcSubscriber.go} (73%)
 copy plc4go/internal/plc4go/transports/{tcp/TcpTransport.go => udp/UdpTransport.go} (61%)
 rename plc4j/drivers/knxnetip/src/test/java/org/apache/plc4x/java/knxnetip/{KNXNetIpTest.java => KnxNetIpTest.java} (91%)


[plc4x] 01/04: - Deleted the files in model in order to replace them with ones with different case name

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ef3dd71654154747696de1cb6fa984e33194197f
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sun Nov 8 12:50:48 2020 +0100

    - Deleted the files in model in order to replace them with ones with different case name
---
 .../plc4go/knxnetip/readwrite/model/APCI.go        |  114 -
 .../plc4go/knxnetip/readwrite/model/CEMI.go        |  328 --
 .../readwrite/model/CEMIAdditionalInformation.go   |  202 -
 .../CEMIAdditionalInformationBusmonitorInfo.go     |  322 --
 .../CEMIAdditionalInformationRelativeTimestamp.go  |  181 -
 .../knxnetip/readwrite/model/CEMIBusmonInd.go      |  237 -
 .../plc4go/knxnetip/readwrite/model/CEMIDataCon.go |  237 -
 .../knxnetip/readwrite/model/CEMIDataFrame.go      |  613 ---
 .../plc4go/knxnetip/readwrite/model/CEMIDataInd.go |  237 -
 .../plc4go/knxnetip/readwrite/model/CEMIDataReq.go |  237 -
 .../plc4go/knxnetip/readwrite/model/CEMIFrame.go   |  382 --
 .../knxnetip/readwrite/model/CEMIFrameAck.go       |  143 -
 .../knxnetip/readwrite/model/CEMIFrameData.go      |  486 --
 .../knxnetip/readwrite/model/CEMIFrameDataExt.go   |  514 ---
 .../readwrite/model/CEMIFramePollingData.go        |  143 -
 .../readwrite/model/CEMIFramePollingDataExt.go     |  143 -
 .../knxnetip/readwrite/model/CEMIMPropReadCon.go   |  300 --
 .../knxnetip/readwrite/model/CEMIMPropReadReq.go   |  272 --
 .../knxnetip/readwrite/model/CEMIPollDataCon.go    |  131 -
 .../knxnetip/readwrite/model/CEMIPollDataReq.go    |  131 -
 .../knxnetip/readwrite/model/CEMIPriority.go       |   78 -
 .../plc4go/knxnetip/readwrite/model/CEMIRawCon.go  |  131 -
 .../plc4go/knxnetip/readwrite/model/CEMIRawInd.go  |  131 -
 .../plc4go/knxnetip/readwrite/model/CEMIRawReq.go  |  131 -
 .../knxnetip/readwrite/model/ConnectionRequest.go  |  213 -
 .../model/ConnectionRequestInformation.go          |  218 -
 ...ConnectionRequestInformationDeviceManagement.go |  131 -
 ...ConnectionRequestInformationTunnelConnection.go |  186 -
 .../knxnetip/readwrite/model/ConnectionResponse.go |  262 --
 .../readwrite/model/ConnectionResponseDataBlock.go |  218 -
 .../ConnectionResponseDataBlockDeviceManagement.go |  131 -
 .../ConnectionResponseDataBlockTunnelConnection.go |  159 -
 .../readwrite/model/ConnectionStateRequest.go      |  213 -
 .../readwrite/model/ConnectionStateResponse.go     |  188 -
 .../knxnetip/readwrite/model/DIBDeviceInfo.go      |  391 --
 .../knxnetip/readwrite/model/DIBSuppSvcFamilies.go |  199 -
 .../knxnetip/readwrite/model/DescriptionRequest.go |  159 -
 .../readwrite/model/DescriptionResponse.go         |  186 -
 .../readwrite/model/DeviceConfigurationAck.go      |  159 -
 .../model/DeviceConfigurationAckDataBlock.go       |  205 -
 .../readwrite/model/DeviceConfigurationRequest.go  |  186 -
 .../model/DeviceConfigurationRequestDataBlock.go   |  205 -
 .../knxnetip/readwrite/model/DeviceStatus.go       |  163 -
 .../knxnetip/readwrite/model/DisconnectRequest.go  |  213 -
 .../knxnetip/readwrite/model/DisconnectResponse.go |  188 -
 .../readwrite/model/HPAIControlEndpoint.go         |  204 -
 .../knxnetip/readwrite/model/HPAIDataEndpoint.go   |  204 -
 .../readwrite/model/HPAIDiscoveryEndpoint.go       |  204 -
 .../knxnetip/readwrite/model/HostProtocolCode.go   |   72 -
 .../plc4go/knxnetip/readwrite/model/IPAddress.go   |  155 -
 .../plc4go/knxnetip/readwrite/model/KNXAddress.go  |  189 -
 .../knxnetip/readwrite/model/KNXGroupAddress.go    |  200 -
 .../readwrite/model/KNXGroupAddress2Level.go       |  188 -
 .../readwrite/model/KNXGroupAddress3Level.go       |  216 -
 .../readwrite/model/KNXGroupAddressFreeLevel.go    |  160 -
 .../knxnetip/readwrite/model/KNXNetIPMessage.go    |  452 --
 .../knxnetip/readwrite/model/KnxDatapoint.go       | 4821 --------------------
 .../knxnetip/readwrite/model/KnxDatapointType.go   | 4377 ------------------
 .../plc4go/knxnetip/readwrite/model/KnxLayer.go    |   75 -
 .../knxnetip/readwrite/model/KnxNetIpCore.go       |  160 -
 .../readwrite/model/KnxNetIpDeviceManagement.go    |  160 -
 .../knxnetip/readwrite/model/KnxNetIpTunneling.go  |  160 -
 .../knxnetip/readwrite/model/KnxNetObjectServer.go |  160 -
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |  160 -
 .../readwrite/model/KnxNetRemoteLogging.go         |  160 -
 .../knxnetip/readwrite/model/KnxStaticHelper.go    |   50 -
 .../plc4go/knxnetip/readwrite/model/MACAddress.go  |  155 -
 .../model/ProjectInstallationIdentifier.go         |  163 -
 .../knxnetip/readwrite/model/RelativeTimestamp.go  |  137 -
 .../knxnetip/readwrite/model/RoutingIndication.go  |  131 -
 .../knxnetip/readwrite/model/SearchRequest.go      |  159 -
 .../knxnetip/readwrite/model/SearchResponse.go     |  213 -
 .../plc4go/knxnetip/readwrite/model/ServiceId.go   |  258 --
 .../plc4go/knxnetip/readwrite/model/Status.go      |  102 -
 .../plc4go/knxnetip/readwrite/model/TPCI.go        |   78 -
 .../knxnetip/readwrite/model/TunnelingRequest.go   |  186 -
 .../readwrite/model/TunnelingRequestDataBlock.go   |  205 -
 .../knxnetip/readwrite/model/TunnelingResponse.go  |  159 -
 .../readwrite/model/TunnelingResponseDataBlock.go  |  205 -
 .../knxnetip/readwrite/model/UnknownMessage.go     |  178 -
 80 files changed, 24853 deletions(-)

diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go
deleted file mode 100644
index 195e7d2..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go
+++ /dev/null
@@ -1,114 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-type APCI uint8
-
-type IAPCI interface {
-    Serialize(io utils.WriteBuffer) error
-}
-
-const(
-    APCI_GROUP_VALUE_READ_PDU APCI = 0x0
-    APCI_GROUP_VALUE_RESPONSE_PDU APCI = 0x1
-    APCI_GROUP_VALUE_WRITE_PDU APCI = 0x2
-    APCI_INDIVIDUAL_ADDRESS_WRITE_PDU APCI = 0x3
-    APCI_INDIVIDUAL_ADDRESS_READ_PDU APCI = 0x4
-    APCI_INDIVIDUAL_ADDRESS_RESPONSE_PDU APCI = 0x5
-    APCI_ADC_READ_PDU APCI = 0x6
-    APCI_ADC_RESPONSE_PDU APCI = 0x7
-    APCI_MEMORY_READ_PDU APCI = 0x8
-    APCI_MEMORY_RESPONSE_PDU APCI = 0x9
-    APCI_MEMORY_WRITE_PDU APCI = 0xA
-    APCI_USER_MESSAGE_PDU APCI = 0xB
-    APCI_DEVICE_DESCRIPTOR_READ_PDU APCI = 0xC
-    APCI_DEVICE_DESCRIPTOR_RESPONSE_PDU APCI = 0xD
-    APCI_RESTART_PDU APCI = 0xE
-    APCI_OTHER_PDU APCI = 0xF
-)
-
-func APCIValueOf(value uint8) APCI {
-    switch value {
-        case 0x0:
-            return APCI_GROUP_VALUE_READ_PDU
-        case 0x1:
-            return APCI_GROUP_VALUE_RESPONSE_PDU
-        case 0x2:
-            return APCI_GROUP_VALUE_WRITE_PDU
-        case 0x3:
-            return APCI_INDIVIDUAL_ADDRESS_WRITE_PDU
-        case 0x4:
-            return APCI_INDIVIDUAL_ADDRESS_READ_PDU
-        case 0x5:
-            return APCI_INDIVIDUAL_ADDRESS_RESPONSE_PDU
-        case 0x6:
-            return APCI_ADC_READ_PDU
-        case 0x7:
-            return APCI_ADC_RESPONSE_PDU
-        case 0x8:
-            return APCI_MEMORY_READ_PDU
-        case 0x9:
-            return APCI_MEMORY_RESPONSE_PDU
-        case 0xA:
-            return APCI_MEMORY_WRITE_PDU
-        case 0xB:
-            return APCI_USER_MESSAGE_PDU
-        case 0xC:
-            return APCI_DEVICE_DESCRIPTOR_READ_PDU
-        case 0xD:
-            return APCI_DEVICE_DESCRIPTOR_RESPONSE_PDU
-        case 0xE:
-            return APCI_RESTART_PDU
-        case 0xF:
-            return APCI_OTHER_PDU
-    }
-    return 0
-}
-
-func CastAPCI(structType interface{}) APCI {
-    castFunc := func(typ interface{}) APCI {
-        if sAPCI, ok := typ.(APCI); ok {
-            return sAPCI
-        }
-        return 0
-    }
-    return castFunc(structType)
-}
-
-func (m APCI) LengthInBits() uint16 {
-    return 4
-}
-
-func (m APCI) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func APCIParse(io *utils.ReadBuffer) (APCI, error) {
-    // TODO: Implement ...
-    return 0, nil
-}
-
-func (e APCI) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
-}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
deleted file mode 100644
index ee47a22..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
+++ /dev/null
@@ -1,328 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-    "reflect"
-    "strings"
-)
-
-// The data-structure of this message
-type CEMI struct {
-    Child ICEMIChild
-    ICEMI
-    ICEMIParent
-}
-
-// The corresponding interface
-type ICEMI interface {
-    MessageCode() uint8
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-type ICEMIParent interface {
-    SerializeParent(io utils.WriteBuffer, child ICEMI, serializeChildFunction func() error) error
-}
-
-type ICEMIChild interface {
-    Serialize(io utils.WriteBuffer) error
-    InitializeParent(parent *CEMI)
-    ICEMI
-}
-
-func NewCEMI() *CEMI {
-    return &CEMI{}
-}
-
-func CastCEMI(structType interface{}) CEMI {
-    castFunc := func(typ interface{}) CEMI {
-        if casted, ok := typ.(CEMI); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMI); ok {
-            return *casted
-        }
-        return CEMI{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMI) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Discriminator Field (messageCode)
-    lengthInBits += 8
-
-    // Length of sub-type elements will be added by sub-type...
-    lengthInBits += m.Child.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *CEMI) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIParse(io *utils.ReadBuffer, size uint8) (*CEMI, error) {
-
-    // Discriminator Field (messageCode) (Used as input to a switch field)
-    messageCode, _messageCodeErr := io.ReadUint8(8)
-    if _messageCodeErr != nil {
-        return nil, errors.New("Error parsing 'messageCode' field " + _messageCodeErr.Error())
-    }
-
-    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-    var _parent *CEMI
-    var typeSwitchError error
-    switch {
-    case messageCode == 0x11:
-        _parent, typeSwitchError = CEMIDataReqParse(io)
-    case messageCode == 0x2E:
-        _parent, typeSwitchError = CEMIDataConParse(io)
-    case messageCode == 0x29:
-        _parent, typeSwitchError = CEMIDataIndParse(io)
-    case messageCode == 0x10:
-        _parent, typeSwitchError = CEMIRawReqParse(io)
-    case messageCode == 0x2F:
-        _parent, typeSwitchError = CEMIRawConParse(io)
-    case messageCode == 0x2D:
-        _parent, typeSwitchError = CEMIRawIndParse(io)
-    case messageCode == 0x13:
-        _parent, typeSwitchError = CEMIPollDataReqParse(io)
-    case messageCode == 0x25:
-        _parent, typeSwitchError = CEMIPollDataConParse(io)
-    case messageCode == 0x2B:
-        _parent, typeSwitchError = CEMIBusmonIndParse(io)
-    case messageCode == 0xFC:
-        _parent, typeSwitchError = CEMIMPropReadReqParse(io)
-    case messageCode == 0xFB:
-        _parent, typeSwitchError = CEMIMPropReadConParse(io)
-    }
-    if typeSwitchError != nil {
-        return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
-    }
-
-    // Finish initializing
-    _parent.Child.InitializeParent(_parent)
-    return _parent, nil
-}
-
-func (m *CEMI) Serialize(io utils.WriteBuffer) error {
-    return m.Child.Serialize(io)
-}
-
-func (m *CEMI) SerializeParent(io utils.WriteBuffer, child ICEMI, serializeChildFunction func() error) error {
-
-    // Discriminator Field (messageCode) (Used as input to a switch field)
-    messageCode := uint8(child.MessageCode())
-    _messageCodeErr := io.WriteUint8(8, (messageCode))
-    if _messageCodeErr != nil {
-        return errors.New("Error serializing 'messageCode' field " + _messageCodeErr.Error())
-    }
-
-    // Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
-    _typeSwitchErr := serializeChildFunction()
-    if _typeSwitchErr != nil {
-        return errors.New("Error serializing sub-type field " + _typeSwitchErr.Error())
-    }
-
-    return nil
-}
-
-func (m *CEMI) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    for {
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-                default:
-                    switch start.Attr[0].Value {
-                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIDataReq":
-                            var dt *CEMIDataReq
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIDataReq)
-                            }
-                            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.knxnetip.readwrite.CEMIDataCon":
-                            var dt *CEMIDataCon
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIDataCon)
-                            }
-                            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.knxnetip.readwrite.CEMIDataInd":
-                            var dt *CEMIDataInd
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIDataInd)
-                            }
-                            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.knxnetip.readwrite.CEMIRawReq":
-                            var dt *CEMIRawReq
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIRawReq)
-                            }
-                            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.knxnetip.readwrite.CEMIRawCon":
-                            var dt *CEMIRawCon
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIRawCon)
-                            }
-                            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.knxnetip.readwrite.CEMIRawInd":
-                            var dt *CEMIRawInd
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIRawInd)
-                            }
-                            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.knxnetip.readwrite.CEMIPollDataReq":
-                            var dt *CEMIPollDataReq
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIPollDataReq)
-                            }
-                            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.knxnetip.readwrite.CEMIPollDataCon":
-                            var dt *CEMIPollDataCon
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIPollDataCon)
-                            }
-                            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.knxnetip.readwrite.CEMIBusmonInd":
-                            var dt *CEMIBusmonInd
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIBusmonInd)
-                            }
-                            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.knxnetip.readwrite.CEMIMPropReadReq":
-                            var dt *CEMIMPropReadReq
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIMPropReadReq)
-                            }
-                            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.knxnetip.readwrite.CEMIMPropReadCon":
-                            var dt *CEMIMPropReadCon
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIMPropReadCon)
-                            }
-                            if err := d.DecodeElement(&dt, &tok); err != nil {
-                                return err
-                            }
-                            if m.Child == nil {
-                                dt.Parent = m
-                                m.Child = dt
-                            }
-                    }
-            }
-        }
-    }
-}
-
-func (m *CEMI) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    className := reflect.TypeOf(m.Child).String()
-    className = "org.apache.plc4x.java.knxnetip.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.New("child is not castable to Marshaler")
-    }
-    marshaller.MarshalXML(e, start)
-    if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
deleted file mode 100644
index 07425ba..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
+++ /dev/null
@@ -1,202 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-    "reflect"
-    "strings"
-)
-
-// The data-structure of this message
-type CEMIAdditionalInformation struct {
-    Child ICEMIAdditionalInformationChild
-    ICEMIAdditionalInformation
-    ICEMIAdditionalInformationParent
-}
-
-// The corresponding interface
-type ICEMIAdditionalInformation interface {
-    AdditionalInformationType() uint8
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-type ICEMIAdditionalInformationParent interface {
-    SerializeParent(io utils.WriteBuffer, child ICEMIAdditionalInformation, serializeChildFunction func() error) error
-}
-
-type ICEMIAdditionalInformationChild interface {
-    Serialize(io utils.WriteBuffer) error
-    InitializeParent(parent *CEMIAdditionalInformation)
-    ICEMIAdditionalInformation
-}
-
-func NewCEMIAdditionalInformation() *CEMIAdditionalInformation {
-    return &CEMIAdditionalInformation{}
-}
-
-func CastCEMIAdditionalInformation(structType interface{}) CEMIAdditionalInformation {
-    castFunc := func(typ interface{}) CEMIAdditionalInformation {
-        if casted, ok := typ.(CEMIAdditionalInformation); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIAdditionalInformation); ok {
-            return *casted
-        }
-        return CEMIAdditionalInformation{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIAdditionalInformation) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Discriminator Field (additionalInformationType)
-    lengthInBits += 8
-
-    // Length of sub-type elements will be added by sub-type...
-    lengthInBits += m.Child.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *CEMIAdditionalInformation) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIAdditionalInformationParse(io *utils.ReadBuffer) (*CEMIAdditionalInformation, error) {
-
-    // Discriminator Field (additionalInformationType) (Used as input to a switch field)
-    additionalInformationType, _additionalInformationTypeErr := io.ReadUint8(8)
-    if _additionalInformationTypeErr != nil {
-        return nil, errors.New("Error parsing 'additionalInformationType' field " + _additionalInformationTypeErr.Error())
-    }
-
-    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-    var _parent *CEMIAdditionalInformation
-    var typeSwitchError error
-    switch {
-    case additionalInformationType == 0x03:
-        _parent, typeSwitchError = CEMIAdditionalInformationBusmonitorInfoParse(io)
-    case additionalInformationType == 0x04:
-        _parent, typeSwitchError = CEMIAdditionalInformationRelativeTimestampParse(io)
-    }
-    if typeSwitchError != nil {
-        return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
-    }
-
-    // Finish initializing
-    _parent.Child.InitializeParent(_parent)
-    return _parent, nil
-}
-
-func (m *CEMIAdditionalInformation) Serialize(io utils.WriteBuffer) error {
-    return m.Child.Serialize(io)
-}
-
-func (m *CEMIAdditionalInformation) SerializeParent(io utils.WriteBuffer, child ICEMIAdditionalInformation, serializeChildFunction func() error) error {
-
-    // Discriminator Field (additionalInformationType) (Used as input to a switch field)
-    additionalInformationType := uint8(child.AdditionalInformationType())
-    _additionalInformationTypeErr := io.WriteUint8(8, (additionalInformationType))
-    if _additionalInformationTypeErr != nil {
-        return errors.New("Error serializing 'additionalInformationType' field " + _additionalInformationTypeErr.Error())
-    }
-
-    // Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
-    _typeSwitchErr := serializeChildFunction()
-    if _typeSwitchErr != nil {
-        return errors.New("Error serializing sub-type field " + _typeSwitchErr.Error())
-    }
-
-    return nil
-}
-
-func (m *CEMIAdditionalInformation) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    for {
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-                default:
-                    switch start.Attr[0].Value {
-                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIAdditionalInformationBusmonitorInfo":
-                            var dt *CEMIAdditionalInformationBusmonitorInfo
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIAdditionalInformationBusmonitorInfo)
-                            }
-                            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.knxnetip.readwrite.CEMIAdditionalInformationRelativeTimestamp":
-                            var dt *CEMIAdditionalInformationRelativeTimestamp
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIAdditionalInformationRelativeTimestamp)
-                            }
-                            if err := d.DecodeElement(&dt, &tok); err != nil {
-                                return err
-                            }
-                            if m.Child == nil {
-                                dt.Parent = m
-                                m.Child = dt
-                            }
-                    }
-            }
-        }
-    }
-}
-
-func (m *CEMIAdditionalInformation) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    className := reflect.TypeOf(m.Child).String()
-    className = "org.apache.plc4x.java.knxnetip.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.New("child is not castable to Marshaler")
-    }
-    marshaller.MarshalXML(e, start)
-    if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
deleted file mode 100644
index c431e49..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
+++ /dev/null
@@ -1,322 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-    "strconv"
-)
-
-// Constant values.
-const CEMIAdditionalInformationBusmonitorInfo_LEN uint8 = 1
-
-// The data-structure of this message
-type CEMIAdditionalInformationBusmonitorInfo struct {
-    FrameErrorFlag bool
-    BitErrorFlag bool
-    ParityErrorFlag bool
-    UnknownFlag bool
-    LostFlag bool
-    SequenceNumber uint8
-    Parent *CEMIAdditionalInformation
-    ICEMIAdditionalInformationBusmonitorInfo
-}
-
-// The corresponding interface
-type ICEMIAdditionalInformationBusmonitorInfo interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIAdditionalInformationBusmonitorInfo) AdditionalInformationType() uint8 {
-    return 0x03
-}
-
-
-func (m *CEMIAdditionalInformationBusmonitorInfo) InitializeParent(parent *CEMIAdditionalInformation) {
-}
-
-func NewCEMIAdditionalInformationBusmonitorInfo(frameErrorFlag bool, bitErrorFlag bool, parityErrorFlag bool, unknownFlag bool, lostFlag bool, sequenceNumber uint8, ) *CEMIAdditionalInformation {
-    child := &CEMIAdditionalInformationBusmonitorInfo{
-        FrameErrorFlag: frameErrorFlag,
-        BitErrorFlag: bitErrorFlag,
-        ParityErrorFlag: parityErrorFlag,
-        UnknownFlag: unknownFlag,
-        LostFlag: lostFlag,
-        SequenceNumber: sequenceNumber,
-        Parent: NewCEMIAdditionalInformation(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIAdditionalInformationBusmonitorInfo(structType interface{}) CEMIAdditionalInformationBusmonitorInfo {
-    castFunc := func(typ interface{}) CEMIAdditionalInformationBusmonitorInfo {
-        if casted, ok := typ.(CEMIAdditionalInformationBusmonitorInfo); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIAdditionalInformationBusmonitorInfo); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMIAdditionalInformation); ok {
-            return CastCEMIAdditionalInformationBusmonitorInfo(casted.Child)
-        }
-        if casted, ok := typ.(*CEMIAdditionalInformation); ok {
-            return CastCEMIAdditionalInformationBusmonitorInfo(casted.Child)
-        }
-        return CEMIAdditionalInformationBusmonitorInfo{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIAdditionalInformationBusmonitorInfo) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Const Field (len)
-    lengthInBits += 8
-
-    // Simple field (frameErrorFlag)
-    lengthInBits += 1
-
-    // Simple field (bitErrorFlag)
-    lengthInBits += 1
-
-    // Simple field (parityErrorFlag)
-    lengthInBits += 1
-
-    // Simple field (unknownFlag)
-    lengthInBits += 1
-
-    // Simple field (lostFlag)
-    lengthInBits += 1
-
-    // Simple field (sequenceNumber)
-    lengthInBits += 3
-
-    return lengthInBits
-}
-
-func (m *CEMIAdditionalInformationBusmonitorInfo) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIAdditionalInformationBusmonitorInfoParse(io *utils.ReadBuffer) (*CEMIAdditionalInformation, error) {
-
-    // Const Field (len)
-    len, _lenErr := io.ReadUint8(8)
-    if _lenErr != nil {
-        return nil, errors.New("Error parsing 'len' field " + _lenErr.Error())
-    }
-    if len != CEMIAdditionalInformationBusmonitorInfo_LEN {
-        return nil, errors.New("Expected constant value " + strconv.Itoa(int(CEMIAdditionalInformationBusmonitorInfo_LEN)) + " but got " + strconv.Itoa(int(len)))
-    }
-
-    // Simple Field (frameErrorFlag)
-    frameErrorFlag, _frameErrorFlagErr := io.ReadBit()
-    if _frameErrorFlagErr != nil {
-        return nil, errors.New("Error parsing 'frameErrorFlag' field " + _frameErrorFlagErr.Error())
-    }
-
-    // Simple Field (bitErrorFlag)
-    bitErrorFlag, _bitErrorFlagErr := io.ReadBit()
-    if _bitErrorFlagErr != nil {
-        return nil, errors.New("Error parsing 'bitErrorFlag' field " + _bitErrorFlagErr.Error())
-    }
-
-    // Simple Field (parityErrorFlag)
-    parityErrorFlag, _parityErrorFlagErr := io.ReadBit()
-    if _parityErrorFlagErr != nil {
-        return nil, errors.New("Error parsing 'parityErrorFlag' field " + _parityErrorFlagErr.Error())
-    }
-
-    // Simple Field (unknownFlag)
-    unknownFlag, _unknownFlagErr := io.ReadBit()
-    if _unknownFlagErr != nil {
-        return nil, errors.New("Error parsing 'unknownFlag' field " + _unknownFlagErr.Error())
-    }
-
-    // Simple Field (lostFlag)
-    lostFlag, _lostFlagErr := io.ReadBit()
-    if _lostFlagErr != nil {
-        return nil, errors.New("Error parsing 'lostFlag' field " + _lostFlagErr.Error())
-    }
-
-    // Simple Field (sequenceNumber)
-    sequenceNumber, _sequenceNumberErr := io.ReadUint8(3)
-    if _sequenceNumberErr != nil {
-        return nil, errors.New("Error parsing 'sequenceNumber' field " + _sequenceNumberErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &CEMIAdditionalInformationBusmonitorInfo{
-        FrameErrorFlag: frameErrorFlag,
-        BitErrorFlag: bitErrorFlag,
-        ParityErrorFlag: parityErrorFlag,
-        UnknownFlag: unknownFlag,
-        LostFlag: lostFlag,
-        SequenceNumber: sequenceNumber,
-        Parent: &CEMIAdditionalInformation{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIAdditionalInformationBusmonitorInfo) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Const Field (len)
-    _lenErr := io.WriteUint8(8, 1)
-    if _lenErr != nil {
-        return errors.New("Error serializing 'len' field " + _lenErr.Error())
-    }
-
-    // Simple Field (frameErrorFlag)
-    frameErrorFlag := bool(m.FrameErrorFlag)
-    _frameErrorFlagErr := io.WriteBit((frameErrorFlag))
-    if _frameErrorFlagErr != nil {
-        return errors.New("Error serializing 'frameErrorFlag' field " + _frameErrorFlagErr.Error())
-    }
-
-    // Simple Field (bitErrorFlag)
-    bitErrorFlag := bool(m.BitErrorFlag)
-    _bitErrorFlagErr := io.WriteBit((bitErrorFlag))
-    if _bitErrorFlagErr != nil {
-        return errors.New("Error serializing 'bitErrorFlag' field " + _bitErrorFlagErr.Error())
-    }
-
-    // Simple Field (parityErrorFlag)
-    parityErrorFlag := bool(m.ParityErrorFlag)
-    _parityErrorFlagErr := io.WriteBit((parityErrorFlag))
-    if _parityErrorFlagErr != nil {
-        return errors.New("Error serializing 'parityErrorFlag' field " + _parityErrorFlagErr.Error())
-    }
-
-    // Simple Field (unknownFlag)
-    unknownFlag := bool(m.UnknownFlag)
-    _unknownFlagErr := io.WriteBit((unknownFlag))
-    if _unknownFlagErr != nil {
-        return errors.New("Error serializing 'unknownFlag' field " + _unknownFlagErr.Error())
-    }
-
-    // Simple Field (lostFlag)
-    lostFlag := bool(m.LostFlag)
-    _lostFlagErr := io.WriteBit((lostFlag))
-    if _lostFlagErr != nil {
-        return errors.New("Error serializing 'lostFlag' field " + _lostFlagErr.Error())
-    }
-
-    // Simple Field (sequenceNumber)
-    sequenceNumber := uint8(m.SequenceNumber)
-    _sequenceNumberErr := io.WriteUint8(3, (sequenceNumber))
-    if _sequenceNumberErr != nil {
-        return errors.New("Error serializing 'sequenceNumber' field " + _sequenceNumberErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIAdditionalInformationBusmonitorInfo) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "frameErrorFlag":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.FrameErrorFlag = data
-            case "bitErrorFlag":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.BitErrorFlag = data
-            case "parityErrorFlag":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.ParityErrorFlag = data
-            case "unknownFlag":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.UnknownFlag = data
-            case "lostFlag":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.LostFlag = data
-            case "sequenceNumber":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.SequenceNumber = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIAdditionalInformationBusmonitorInfo) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.FrameErrorFlag, xml.StartElement{Name: xml.Name{Local: "frameErrorFlag"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.BitErrorFlag, xml.StartElement{Name: xml.Name{Local: "bitErrorFlag"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.ParityErrorFlag, xml.StartElement{Name: xml.Name{Local: "parityErrorFlag"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.UnknownFlag, xml.StartElement{Name: xml.Name{Local: "unknownFlag"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.LostFlag, xml.StartElement{Name: xml.Name{Local: "lostFlag"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.SequenceNumber, xml.StartElement{Name: xml.Name{Local: "sequenceNumber"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
deleted file mode 100644
index 546bdd4..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
+++ /dev/null
@@ -1,181 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-    "strconv"
-)
-
-// Constant values.
-const CEMIAdditionalInformationRelativeTimestamp_LEN uint8 = 2
-
-// The data-structure of this message
-type CEMIAdditionalInformationRelativeTimestamp struct {
-    RelativeTimestamp *RelativeTimestamp
-    Parent *CEMIAdditionalInformation
-    ICEMIAdditionalInformationRelativeTimestamp
-}
-
-// The corresponding interface
-type ICEMIAdditionalInformationRelativeTimestamp interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIAdditionalInformationRelativeTimestamp) AdditionalInformationType() uint8 {
-    return 0x04
-}
-
-
-func (m *CEMIAdditionalInformationRelativeTimestamp) InitializeParent(parent *CEMIAdditionalInformation) {
-}
-
-func NewCEMIAdditionalInformationRelativeTimestamp(relativeTimestamp *RelativeTimestamp, ) *CEMIAdditionalInformation {
-    child := &CEMIAdditionalInformationRelativeTimestamp{
-        RelativeTimestamp: relativeTimestamp,
-        Parent: NewCEMIAdditionalInformation(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIAdditionalInformationRelativeTimestamp(structType interface{}) CEMIAdditionalInformationRelativeTimestamp {
-    castFunc := func(typ interface{}) CEMIAdditionalInformationRelativeTimestamp {
-        if casted, ok := typ.(CEMIAdditionalInformationRelativeTimestamp); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIAdditionalInformationRelativeTimestamp); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMIAdditionalInformation); ok {
-            return CastCEMIAdditionalInformationRelativeTimestamp(casted.Child)
-        }
-        if casted, ok := typ.(*CEMIAdditionalInformation); ok {
-            return CastCEMIAdditionalInformationRelativeTimestamp(casted.Child)
-        }
-        return CEMIAdditionalInformationRelativeTimestamp{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIAdditionalInformationRelativeTimestamp) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Const Field (len)
-    lengthInBits += 8
-
-    // Simple field (relativeTimestamp)
-    lengthInBits += m.RelativeTimestamp.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *CEMIAdditionalInformationRelativeTimestamp) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIAdditionalInformationRelativeTimestampParse(io *utils.ReadBuffer) (*CEMIAdditionalInformation, error) {
-
-    // Const Field (len)
-    len, _lenErr := io.ReadUint8(8)
-    if _lenErr != nil {
-        return nil, errors.New("Error parsing 'len' field " + _lenErr.Error())
-    }
-    if len != CEMIAdditionalInformationRelativeTimestamp_LEN {
-        return nil, errors.New("Expected constant value " + strconv.Itoa(int(CEMIAdditionalInformationRelativeTimestamp_LEN)) + " but got " + strconv.Itoa(int(len)))
-    }
-
-    // Simple Field (relativeTimestamp)
-    relativeTimestamp, _relativeTimestampErr := RelativeTimestampParse(io)
-    if _relativeTimestampErr != nil {
-        return nil, errors.New("Error parsing 'relativeTimestamp' field " + _relativeTimestampErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &CEMIAdditionalInformationRelativeTimestamp{
-        RelativeTimestamp: relativeTimestamp,
-        Parent: &CEMIAdditionalInformation{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIAdditionalInformationRelativeTimestamp) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Const Field (len)
-    _lenErr := io.WriteUint8(8, 2)
-    if _lenErr != nil {
-        return errors.New("Error serializing 'len' field " + _lenErr.Error())
-    }
-
-    // Simple Field (relativeTimestamp)
-    _relativeTimestampErr := m.RelativeTimestamp.Serialize(io)
-    if _relativeTimestampErr != nil {
-        return errors.New("Error serializing 'relativeTimestamp' field " + _relativeTimestampErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIAdditionalInformationRelativeTimestamp) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "relativeTimestamp":
-                var data *RelativeTimestamp
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.RelativeTimestamp = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIAdditionalInformationRelativeTimestamp) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.RelativeTimestamp, xml.StartElement{Name: xml.Name{Local: "relativeTimestamp"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go
deleted file mode 100644
index ca5203b..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go
+++ /dev/null
@@ -1,237 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIBusmonInd struct {
-    AdditionalInformationLength uint8
-    AdditionalInformation []*CEMIAdditionalInformation
-    CemiFrame *CEMIFrame
-    Parent *CEMI
-    ICEMIBusmonInd
-}
-
-// The corresponding interface
-type ICEMIBusmonInd interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIBusmonInd) MessageCode() uint8 {
-    return 0x2B
-}
-
-
-func (m *CEMIBusmonInd) InitializeParent(parent *CEMI) {
-}
-
-func NewCEMIBusmonInd(additionalInformationLength uint8, additionalInformation []*CEMIAdditionalInformation, cemiFrame *CEMIFrame, ) *CEMI {
-    child := &CEMIBusmonInd{
-        AdditionalInformationLength: additionalInformationLength,
-        AdditionalInformation: additionalInformation,
-        CemiFrame: cemiFrame,
-        Parent: NewCEMI(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIBusmonInd(structType interface{}) CEMIBusmonInd {
-    castFunc := func(typ interface{}) CEMIBusmonInd {
-        if casted, ok := typ.(CEMIBusmonInd); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIBusmonInd); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMI); ok {
-            return CastCEMIBusmonInd(casted.Child)
-        }
-        if casted, ok := typ.(*CEMI); ok {
-            return CastCEMIBusmonInd(casted.Child)
-        }
-        return CEMIBusmonInd{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIBusmonInd) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (additionalInformationLength)
-    lengthInBits += 8
-
-    // Array field
-    if len(m.AdditionalInformation) > 0 {
-        for _, element := range m.AdditionalInformation {
-            lengthInBits += element.LengthInBits()
-        }
-    }
-
-    // Simple field (cemiFrame)
-    lengthInBits += m.CemiFrame.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *CEMIBusmonInd) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIBusmonIndParse(io *utils.ReadBuffer) (*CEMI, error) {
-
-    // Simple Field (additionalInformationLength)
-    additionalInformationLength, _additionalInformationLengthErr := io.ReadUint8(8)
-    if _additionalInformationLengthErr != nil {
-        return nil, errors.New("Error parsing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
-    }
-
-    // Array field (additionalInformation)
-    // Length array
-    additionalInformation := make([]*CEMIAdditionalInformation, 0)
-    _additionalInformationLength := additionalInformationLength
-    _additionalInformationEndPos := io.GetPos() + uint16(_additionalInformationLength)
-    for ;io.GetPos() < _additionalInformationEndPos; {
-        _item, _err := CEMIAdditionalInformationParse(io)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'additionalInformation' field " + _err.Error())
-        }
-        additionalInformation = append(additionalInformation, _item)
-    }
-
-    // Simple Field (cemiFrame)
-    cemiFrame, _cemiFrameErr := CEMIFrameParse(io)
-    if _cemiFrameErr != nil {
-        return nil, errors.New("Error parsing 'cemiFrame' field " + _cemiFrameErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &CEMIBusmonInd{
-        AdditionalInformationLength: additionalInformationLength,
-        AdditionalInformation: additionalInformation,
-        CemiFrame: cemiFrame,
-        Parent: &CEMI{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIBusmonInd) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (additionalInformationLength)
-    additionalInformationLength := uint8(m.AdditionalInformationLength)
-    _additionalInformationLengthErr := io.WriteUint8(8, (additionalInformationLength))
-    if _additionalInformationLengthErr != nil {
-        return errors.New("Error serializing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
-    }
-
-    // Array Field (additionalInformation)
-    if m.AdditionalInformation != nil {
-        for _, _element := range m.AdditionalInformation {
-            _elementErr := _element.Serialize(io)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'additionalInformation' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    // Simple Field (cemiFrame)
-    _cemiFrameErr := m.CemiFrame.Serialize(io)
-    if _cemiFrameErr != nil {
-        return errors.New("Error serializing 'cemiFrame' field " + _cemiFrameErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIBusmonInd) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "additionalInformationLength":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.AdditionalInformationLength = data
-            case "additionalInformation":
-                var _values []*CEMIAdditionalInformation
-                var dt *CEMIAdditionalInformation
-                if err := d.DecodeElement(&dt, &tok); err != nil {
-                    return err
-                }
-                _values = append(_values, dt)
-                m.AdditionalInformation = _values
-            case "cemiFrame":
-                var dt *CEMIFrame
-                if err := d.DecodeElement(&dt, &tok); err != nil {
-                    return err
-                }
-                m.CemiFrame = dt
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIBusmonInd) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.AdditionalInformationLength, xml.StartElement{Name: xml.Name{Local: "additionalInformationLength"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.AdditionalInformation, xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.CemiFrame, xml.StartElement{Name: xml.Name{Local: "cemiFrame"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go
deleted file mode 100644
index ae56a59..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go
+++ /dev/null
@@ -1,237 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIDataCon struct {
-    AdditionalInformationLength uint8
-    AdditionalInformation []*CEMIAdditionalInformation
-    CemiDataFrame *CEMIDataFrame
-    Parent *CEMI
-    ICEMIDataCon
-}
-
-// The corresponding interface
-type ICEMIDataCon interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIDataCon) MessageCode() uint8 {
-    return 0x2E
-}
-
-
-func (m *CEMIDataCon) InitializeParent(parent *CEMI) {
-}
-
-func NewCEMIDataCon(additionalInformationLength uint8, additionalInformation []*CEMIAdditionalInformation, cemiDataFrame *CEMIDataFrame, ) *CEMI {
-    child := &CEMIDataCon{
-        AdditionalInformationLength: additionalInformationLength,
-        AdditionalInformation: additionalInformation,
-        CemiDataFrame: cemiDataFrame,
-        Parent: NewCEMI(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIDataCon(structType interface{}) CEMIDataCon {
-    castFunc := func(typ interface{}) CEMIDataCon {
-        if casted, ok := typ.(CEMIDataCon); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIDataCon); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMI); ok {
-            return CastCEMIDataCon(casted.Child)
-        }
-        if casted, ok := typ.(*CEMI); ok {
-            return CastCEMIDataCon(casted.Child)
-        }
-        return CEMIDataCon{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIDataCon) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (additionalInformationLength)
-    lengthInBits += 8
-
-    // Array field
-    if len(m.AdditionalInformation) > 0 {
-        for _, element := range m.AdditionalInformation {
-            lengthInBits += element.LengthInBits()
-        }
-    }
-
-    // Simple field (cemiDataFrame)
-    lengthInBits += m.CemiDataFrame.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *CEMIDataCon) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIDataConParse(io *utils.ReadBuffer) (*CEMI, error) {
-
-    // Simple Field (additionalInformationLength)
-    additionalInformationLength, _additionalInformationLengthErr := io.ReadUint8(8)
-    if _additionalInformationLengthErr != nil {
-        return nil, errors.New("Error parsing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
-    }
-
-    // Array field (additionalInformation)
-    // Length array
-    additionalInformation := make([]*CEMIAdditionalInformation, 0)
-    _additionalInformationLength := additionalInformationLength
-    _additionalInformationEndPos := io.GetPos() + uint16(_additionalInformationLength)
-    for ;io.GetPos() < _additionalInformationEndPos; {
-        _item, _err := CEMIAdditionalInformationParse(io)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'additionalInformation' field " + _err.Error())
-        }
-        additionalInformation = append(additionalInformation, _item)
-    }
-
-    // Simple Field (cemiDataFrame)
-    cemiDataFrame, _cemiDataFrameErr := CEMIDataFrameParse(io)
-    if _cemiDataFrameErr != nil {
-        return nil, errors.New("Error parsing 'cemiDataFrame' field " + _cemiDataFrameErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &CEMIDataCon{
-        AdditionalInformationLength: additionalInformationLength,
-        AdditionalInformation: additionalInformation,
-        CemiDataFrame: cemiDataFrame,
-        Parent: &CEMI{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIDataCon) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (additionalInformationLength)
-    additionalInformationLength := uint8(m.AdditionalInformationLength)
-    _additionalInformationLengthErr := io.WriteUint8(8, (additionalInformationLength))
-    if _additionalInformationLengthErr != nil {
-        return errors.New("Error serializing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
-    }
-
-    // Array Field (additionalInformation)
-    if m.AdditionalInformation != nil {
-        for _, _element := range m.AdditionalInformation {
-            _elementErr := _element.Serialize(io)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'additionalInformation' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    // Simple Field (cemiDataFrame)
-    _cemiDataFrameErr := m.CemiDataFrame.Serialize(io)
-    if _cemiDataFrameErr != nil {
-        return errors.New("Error serializing 'cemiDataFrame' field " + _cemiDataFrameErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIDataCon) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "additionalInformationLength":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.AdditionalInformationLength = data
-            case "additionalInformation":
-                var _values []*CEMIAdditionalInformation
-                var dt *CEMIAdditionalInformation
-                if err := d.DecodeElement(&dt, &tok); err != nil {
-                    return err
-                }
-                _values = append(_values, dt)
-                m.AdditionalInformation = _values
-            case "cemiDataFrame":
-                var data *CEMIDataFrame
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.CemiDataFrame = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIDataCon) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.AdditionalInformationLength, xml.StartElement{Name: xml.Name{Local: "additionalInformationLength"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.AdditionalInformation, xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.CemiDataFrame, xml.StartElement{Name: xml.Name{Local: "cemiDataFrame"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go
deleted file mode 100644
index 00b427c..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go
+++ /dev/null
@@ -1,613 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/base64"
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIDataFrame struct {
-    StandardFrame bool
-    Polling bool
-    NotRepeated bool
-    NotAckFrame bool
-    Priority CEMIPriority
-    AcknowledgeRequested bool
-    ErrorFlag bool
-    GroupDestinationAddress bool
-    HopCount uint8
-    ExtendedFrameFormat uint8
-    SourceAddress *KNXAddress
-    DestinationAddress []int8
-    DataLength uint8
-    Tcpi TPCI
-    Counter uint8
-    Apci APCI
-    DataFirstByte int8
-    Data []int8
-    ICEMIDataFrame
-}
-
-// The corresponding interface
-type ICEMIDataFrame interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-func NewCEMIDataFrame(standardFrame bool, polling bool, notRepeated bool, notAckFrame bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool, groupDestinationAddress bool, hopCount uint8, extendedFrameFormat uint8, sourceAddress *KNXAddress, destinationAddress []int8, dataLength uint8, tcpi TPCI, counter uint8, apci APCI, dataFirstByte int8, data []int8) *CEMIDataFrame {
-    return &CEMIDataFrame{StandardFrame: standardFrame, Polling: polling, NotRepeated: notRepeated, NotAckFrame: notAckFrame, Priority: priority, AcknowledgeRequested: acknowledgeRequested, ErrorFlag: errorFlag, GroupDestinationAddress: groupDestinationAddress, HopCount: hopCount, ExtendedFrameFormat: extendedFrameFormat, SourceAddress: sourceAddress, DestinationAddress: destinationAddress, DataLength: dataLength, Tcpi: tcpi, Counter: counter, Apci: apci, DataFirstByte: dataFirstByte, Da [...]
-}
-
-func CastCEMIDataFrame(structType interface{}) CEMIDataFrame {
-    castFunc := func(typ interface{}) CEMIDataFrame {
-        if casted, ok := typ.(CEMIDataFrame); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIDataFrame); ok {
-            return *casted
-        }
-        return CEMIDataFrame{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIDataFrame) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (standardFrame)
-    lengthInBits += 1
-
-    // Simple field (polling)
-    lengthInBits += 1
-
-    // Simple field (notRepeated)
-    lengthInBits += 1
-
-    // Simple field (notAckFrame)
-    lengthInBits += 1
-
-    // Enum Field (priority)
-    lengthInBits += 2
-
-    // Simple field (acknowledgeRequested)
-    lengthInBits += 1
-
-    // Simple field (errorFlag)
-    lengthInBits += 1
-
-    // Simple field (groupDestinationAddress)
-    lengthInBits += 1
-
-    // Simple field (hopCount)
-    lengthInBits += 3
-
-    // Simple field (extendedFrameFormat)
-    lengthInBits += 4
-
-    // Simple field (sourceAddress)
-    lengthInBits += m.SourceAddress.LengthInBits()
-
-    // Array field
-    if len(m.DestinationAddress) > 0 {
-        lengthInBits += 8 * uint16(len(m.DestinationAddress))
-    }
-
-    // Simple field (dataLength)
-    lengthInBits += 8
-
-    // Enum Field (tcpi)
-    lengthInBits += 2
-
-    // Simple field (counter)
-    lengthInBits += 4
-
-    // Enum Field (apci)
-    lengthInBits += 4
-
-    // Simple field (dataFirstByte)
-    lengthInBits += 6
-
-    // Array field
-    if len(m.Data) > 0 {
-        lengthInBits += 8 * uint16(len(m.Data))
-    }
-
-    return lengthInBits
-}
-
-func (m *CEMIDataFrame) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIDataFrameParse(io *utils.ReadBuffer) (*CEMIDataFrame, error) {
-
-    // Simple Field (standardFrame)
-    standardFrame, _standardFrameErr := io.ReadBit()
-    if _standardFrameErr != nil {
-        return nil, errors.New("Error parsing 'standardFrame' field " + _standardFrameErr.Error())
-    }
-
-    // Simple Field (polling)
-    polling, _pollingErr := io.ReadBit()
-    if _pollingErr != nil {
-        return nil, errors.New("Error parsing 'polling' field " + _pollingErr.Error())
-    }
-
-    // Simple Field (notRepeated)
-    notRepeated, _notRepeatedErr := io.ReadBit()
-    if _notRepeatedErr != nil {
-        return nil, errors.New("Error parsing 'notRepeated' field " + _notRepeatedErr.Error())
-    }
-
-    // Simple Field (notAckFrame)
-    notAckFrame, _notAckFrameErr := io.ReadBit()
-    if _notAckFrameErr != nil {
-        return nil, errors.New("Error parsing 'notAckFrame' field " + _notAckFrameErr.Error())
-    }
-
-    // Enum field (priority)
-    priority, _priorityErr := CEMIPriorityParse(io)
-    if _priorityErr != nil {
-        return nil, errors.New("Error parsing 'priority' field " + _priorityErr.Error())
-    }
-
-    // Simple Field (acknowledgeRequested)
-    acknowledgeRequested, _acknowledgeRequestedErr := io.ReadBit()
-    if _acknowledgeRequestedErr != nil {
-        return nil, errors.New("Error parsing 'acknowledgeRequested' field " + _acknowledgeRequestedErr.Error())
-    }
-
-    // Simple Field (errorFlag)
-    errorFlag, _errorFlagErr := io.ReadBit()
-    if _errorFlagErr != nil {
-        return nil, errors.New("Error parsing 'errorFlag' field " + _errorFlagErr.Error())
-    }
-
-    // Simple Field (groupDestinationAddress)
-    groupDestinationAddress, _groupDestinationAddressErr := io.ReadBit()
-    if _groupDestinationAddressErr != nil {
-        return nil, errors.New("Error parsing 'groupDestinationAddress' field " + _groupDestinationAddressErr.Error())
-    }
-
-    // Simple Field (hopCount)
-    hopCount, _hopCountErr := io.ReadUint8(3)
-    if _hopCountErr != nil {
-        return nil, errors.New("Error parsing 'hopCount' field " + _hopCountErr.Error())
-    }
-
-    // Simple Field (extendedFrameFormat)
-    extendedFrameFormat, _extendedFrameFormatErr := io.ReadUint8(4)
-    if _extendedFrameFormatErr != nil {
-        return nil, errors.New("Error parsing 'extendedFrameFormat' field " + _extendedFrameFormatErr.Error())
-    }
-
-    // Simple Field (sourceAddress)
-    sourceAddress, _sourceAddressErr := KNXAddressParse(io)
-    if _sourceAddressErr != nil {
-        return nil, errors.New("Error parsing 'sourceAddress' field " + _sourceAddressErr.Error())
-    }
-
-    // Array field (destinationAddress)
-    // Count array
-    destinationAddress := make([]int8, uint16(2))
-    for curItem := uint16(0); curItem < uint16(uint16(2)); curItem++ {
-        _item, _err := io.ReadInt8(8)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'destinationAddress' field " + _err.Error())
-        }
-        destinationAddress[curItem] = _item
-    }
-
-    // Simple Field (dataLength)
-    dataLength, _dataLengthErr := io.ReadUint8(8)
-    if _dataLengthErr != nil {
-        return nil, errors.New("Error parsing 'dataLength' field " + _dataLengthErr.Error())
-    }
-
-    // Enum field (tcpi)
-    tcpi, _tcpiErr := TPCIParse(io)
-    if _tcpiErr != nil {
-        return nil, errors.New("Error parsing 'tcpi' field " + _tcpiErr.Error())
-    }
-
-    // Simple Field (counter)
-    counter, _counterErr := io.ReadUint8(4)
-    if _counterErr != nil {
-        return nil, errors.New("Error parsing 'counter' field " + _counterErr.Error())
-    }
-
-    // Enum field (apci)
-    apci, _apciErr := APCIParse(io)
-    if _apciErr != nil {
-        return nil, errors.New("Error parsing 'apci' field " + _apciErr.Error())
-    }
-
-    // Simple Field (dataFirstByte)
-    dataFirstByte, _dataFirstByteErr := io.ReadInt8(6)
-    if _dataFirstByteErr != nil {
-        return nil, errors.New("Error parsing 'dataFirstByte' field " + _dataFirstByteErr.Error())
-    }
-
-    // Array field (data)
-    // Count array
-    data := make([]int8, uint16(dataLength) - uint16(uint16(1)))
-    for curItem := uint16(0); curItem < uint16(uint16(dataLength) - uint16(uint16(1))); curItem++ {
-        _item, _err := io.ReadInt8(8)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'data' field " + _err.Error())
-        }
-        data[curItem] = _item
-    }
-
-    // Create the instance
-    return NewCEMIDataFrame(standardFrame, polling, notRepeated, notAckFrame, priority, acknowledgeRequested, errorFlag, groupDestinationAddress, hopCount, extendedFrameFormat, sourceAddress, destinationAddress, dataLength, tcpi, counter, apci, dataFirstByte, data), nil
-}
-
-func (m *CEMIDataFrame) Serialize(io utils.WriteBuffer) error {
-
-    // Simple Field (standardFrame)
-    standardFrame := bool(m.StandardFrame)
-    _standardFrameErr := io.WriteBit((standardFrame))
-    if _standardFrameErr != nil {
-        return errors.New("Error serializing 'standardFrame' field " + _standardFrameErr.Error())
-    }
-
-    // Simple Field (polling)
-    polling := bool(m.Polling)
-    _pollingErr := io.WriteBit((polling))
-    if _pollingErr != nil {
-        return errors.New("Error serializing 'polling' field " + _pollingErr.Error())
-    }
-
-    // Simple Field (notRepeated)
-    notRepeated := bool(m.NotRepeated)
-    _notRepeatedErr := io.WriteBit((notRepeated))
-    if _notRepeatedErr != nil {
-        return errors.New("Error serializing 'notRepeated' field " + _notRepeatedErr.Error())
-    }
-
-    // Simple Field (notAckFrame)
-    notAckFrame := bool(m.NotAckFrame)
-    _notAckFrameErr := io.WriteBit((notAckFrame))
-    if _notAckFrameErr != nil {
-        return errors.New("Error serializing 'notAckFrame' field " + _notAckFrameErr.Error())
-    }
-
-    // Enum field (priority)
-    priority := CastCEMIPriority(m.Priority)
-    _priorityErr := priority.Serialize(io)
-    if _priorityErr != nil {
-        return errors.New("Error serializing 'priority' field " + _priorityErr.Error())
-    }
-
-    // Simple Field (acknowledgeRequested)
-    acknowledgeRequested := bool(m.AcknowledgeRequested)
-    _acknowledgeRequestedErr := io.WriteBit((acknowledgeRequested))
-    if _acknowledgeRequestedErr != nil {
-        return errors.New("Error serializing 'acknowledgeRequested' field " + _acknowledgeRequestedErr.Error())
-    }
-
-    // Simple Field (errorFlag)
-    errorFlag := bool(m.ErrorFlag)
-    _errorFlagErr := io.WriteBit((errorFlag))
-    if _errorFlagErr != nil {
-        return errors.New("Error serializing 'errorFlag' field " + _errorFlagErr.Error())
-    }
-
-    // Simple Field (groupDestinationAddress)
-    groupDestinationAddress := bool(m.GroupDestinationAddress)
-    _groupDestinationAddressErr := io.WriteBit((groupDestinationAddress))
-    if _groupDestinationAddressErr != nil {
-        return errors.New("Error serializing 'groupDestinationAddress' field " + _groupDestinationAddressErr.Error())
-    }
-
-    // Simple Field (hopCount)
-    hopCount := uint8(m.HopCount)
-    _hopCountErr := io.WriteUint8(3, (hopCount))
-    if _hopCountErr != nil {
-        return errors.New("Error serializing 'hopCount' field " + _hopCountErr.Error())
-    }
-
-    // Simple Field (extendedFrameFormat)
-    extendedFrameFormat := uint8(m.ExtendedFrameFormat)
-    _extendedFrameFormatErr := io.WriteUint8(4, (extendedFrameFormat))
-    if _extendedFrameFormatErr != nil {
-        return errors.New("Error serializing 'extendedFrameFormat' field " + _extendedFrameFormatErr.Error())
-    }
-
-    // Simple Field (sourceAddress)
-    _sourceAddressErr := m.SourceAddress.Serialize(io)
-    if _sourceAddressErr != nil {
-        return errors.New("Error serializing 'sourceAddress' field " + _sourceAddressErr.Error())
-    }
-
-    // Array Field (destinationAddress)
-    if m.DestinationAddress != nil {
-        for _, _element := range m.DestinationAddress {
-            _elementErr := io.WriteInt8(8, _element)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'destinationAddress' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    // Simple Field (dataLength)
-    dataLength := uint8(m.DataLength)
-    _dataLengthErr := io.WriteUint8(8, (dataLength))
-    if _dataLengthErr != nil {
-        return errors.New("Error serializing 'dataLength' field " + _dataLengthErr.Error())
-    }
-
-    // Enum field (tcpi)
-    tcpi := CastTPCI(m.Tcpi)
-    _tcpiErr := tcpi.Serialize(io)
-    if _tcpiErr != nil {
-        return errors.New("Error serializing 'tcpi' field " + _tcpiErr.Error())
-    }
-
-    // Simple Field (counter)
-    counter := uint8(m.Counter)
-    _counterErr := io.WriteUint8(4, (counter))
-    if _counterErr != nil {
-        return errors.New("Error serializing 'counter' field " + _counterErr.Error())
-    }
-
-    // Enum field (apci)
-    apci := CastAPCI(m.Apci)
-    _apciErr := apci.Serialize(io)
-    if _apciErr != nil {
-        return errors.New("Error serializing 'apci' field " + _apciErr.Error())
-    }
-
-    // Simple Field (dataFirstByte)
-    dataFirstByte := int8(m.DataFirstByte)
-    _dataFirstByteErr := io.WriteInt8(6, (dataFirstByte))
-    if _dataFirstByteErr != nil {
-        return errors.New("Error serializing 'dataFirstByte' field " + _dataFirstByteErr.Error())
-    }
-
-    // Array Field (data)
-    if m.Data != nil {
-        for _, _element := range m.Data {
-            _elementErr := io.WriteInt8(8, _element)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'data' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    return nil
-}
-
-func (m *CEMIDataFrame) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    for {
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "standardFrame":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.StandardFrame = data
-            case "polling":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Polling = data
-            case "notRepeated":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.NotRepeated = data
-            case "notAckFrame":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.NotAckFrame = data
-            case "priority":
-                var data CEMIPriority
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Priority = data
-            case "acknowledgeRequested":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.AcknowledgeRequested = data
-            case "errorFlag":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.ErrorFlag = data
-            case "groupDestinationAddress":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.GroupDestinationAddress = data
-            case "hopCount":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.HopCount = data
-            case "extendedFrameFormat":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.ExtendedFrameFormat = data
-            case "sourceAddress":
-                var data *KNXAddress
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.SourceAddress = data
-            case "destinationAddress":
-                var _encoded string
-                if err := d.DecodeElement(&_encoded, &tok); err != nil {
-                    return err
-                }
-                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
-                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
-                if err != nil {
-                    return err
-                }
-                m.DestinationAddress = utils.ByteToInt8(_decoded[0:_len])
-            case "dataLength":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.DataLength = data
-            case "tcpi":
-                var data TPCI
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Tcpi = data
-            case "counter":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Counter = data
-            case "apci":
-                var data APCI
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Apci = data
-            case "dataFirstByte":
-                var data int8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.DataFirstByte = data
-            case "data":
-                var _encoded string
-                if err := d.DecodeElement(&_encoded, &tok); err != nil {
-                    return err
-                }
-                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
-                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
-                if err != nil {
-                    return err
-                }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
-            }
-        }
-    }
-}
-
-func (m *CEMIDataFrame) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    className := "org.apache.plc4x.java.knxnetip.readwrite.CEMIDataFrame"
-    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.StandardFrame, xml.StartElement{Name: xml.Name{Local: "standardFrame"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Polling, xml.StartElement{Name: xml.Name{Local: "polling"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.NotRepeated, xml.StartElement{Name: xml.Name{Local: "notRepeated"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.NotAckFrame, xml.StartElement{Name: xml.Name{Local: "notAckFrame"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Priority, xml.StartElement{Name: xml.Name{Local: "priority"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.AcknowledgeRequested, xml.StartElement{Name: xml.Name{Local: "acknowledgeRequested"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.ErrorFlag, xml.StartElement{Name: xml.Name{Local: "errorFlag"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.GroupDestinationAddress, xml.StartElement{Name: xml.Name{Local: "groupDestinationAddress"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.HopCount, xml.StartElement{Name: xml.Name{Local: "hopCount"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.ExtendedFrameFormat, xml.StartElement{Name: xml.Name{Local: "extendedFrameFormat"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.SourceAddress, xml.StartElement{Name: xml.Name{Local: "sourceAddress"}}); err != nil {
-        return err
-    }
-    _encodedDestinationAddress := make([]byte, base64.StdEncoding.EncodedLen(len(m.DestinationAddress)))
-    base64.StdEncoding.Encode(_encodedDestinationAddress, utils.Int8ToByte(m.DestinationAddress))
-    if err := e.EncodeElement(_encodedDestinationAddress, xml.StartElement{Name: xml.Name{Local: "destinationAddress"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.DataLength, xml.StartElement{Name: xml.Name{Local: "dataLength"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Tcpi, xml.StartElement{Name: xml.Name{Local: "tcpi"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Counter, xml.StartElement{Name: xml.Name{Local: "counter"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Apci, xml.StartElement{Name: xml.Name{Local: "apci"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.DataFirstByte, xml.StartElement{Name: xml.Name{Local: "dataFirstByte"}}); err != nil {
-        return err
-    }
-    _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
-    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
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go
deleted file mode 100644
index 0a042e5..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go
+++ /dev/null
@@ -1,237 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIDataInd struct {
-    AdditionalInformationLength uint8
-    AdditionalInformation []*CEMIAdditionalInformation
-    CemiDataFrame *CEMIDataFrame
-    Parent *CEMI
-    ICEMIDataInd
-}
-
-// The corresponding interface
-type ICEMIDataInd interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIDataInd) MessageCode() uint8 {
-    return 0x29
-}
-
-
-func (m *CEMIDataInd) InitializeParent(parent *CEMI) {
-}
-
-func NewCEMIDataInd(additionalInformationLength uint8, additionalInformation []*CEMIAdditionalInformation, cemiDataFrame *CEMIDataFrame, ) *CEMI {
-    child := &CEMIDataInd{
-        AdditionalInformationLength: additionalInformationLength,
-        AdditionalInformation: additionalInformation,
-        CemiDataFrame: cemiDataFrame,
-        Parent: NewCEMI(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIDataInd(structType interface{}) CEMIDataInd {
-    castFunc := func(typ interface{}) CEMIDataInd {
-        if casted, ok := typ.(CEMIDataInd); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIDataInd); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMI); ok {
-            return CastCEMIDataInd(casted.Child)
-        }
-        if casted, ok := typ.(*CEMI); ok {
-            return CastCEMIDataInd(casted.Child)
-        }
-        return CEMIDataInd{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIDataInd) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (additionalInformationLength)
-    lengthInBits += 8
-
-    // Array field
-    if len(m.AdditionalInformation) > 0 {
-        for _, element := range m.AdditionalInformation {
-            lengthInBits += element.LengthInBits()
-        }
-    }
-
-    // Simple field (cemiDataFrame)
-    lengthInBits += m.CemiDataFrame.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *CEMIDataInd) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIDataIndParse(io *utils.ReadBuffer) (*CEMI, error) {
-
-    // Simple Field (additionalInformationLength)
-    additionalInformationLength, _additionalInformationLengthErr := io.ReadUint8(8)
-    if _additionalInformationLengthErr != nil {
-        return nil, errors.New("Error parsing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
-    }
-
-    // Array field (additionalInformation)
-    // Length array
-    additionalInformation := make([]*CEMIAdditionalInformation, 0)
-    _additionalInformationLength := additionalInformationLength
-    _additionalInformationEndPos := io.GetPos() + uint16(_additionalInformationLength)
-    for ;io.GetPos() < _additionalInformationEndPos; {
-        _item, _err := CEMIAdditionalInformationParse(io)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'additionalInformation' field " + _err.Error())
-        }
-        additionalInformation = append(additionalInformation, _item)
-    }
-
-    // Simple Field (cemiDataFrame)
-    cemiDataFrame, _cemiDataFrameErr := CEMIDataFrameParse(io)
-    if _cemiDataFrameErr != nil {
-        return nil, errors.New("Error parsing 'cemiDataFrame' field " + _cemiDataFrameErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &CEMIDataInd{
-        AdditionalInformationLength: additionalInformationLength,
-        AdditionalInformation: additionalInformation,
-        CemiDataFrame: cemiDataFrame,
-        Parent: &CEMI{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIDataInd) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (additionalInformationLength)
-    additionalInformationLength := uint8(m.AdditionalInformationLength)
-    _additionalInformationLengthErr := io.WriteUint8(8, (additionalInformationLength))
-    if _additionalInformationLengthErr != nil {
-        return errors.New("Error serializing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
-    }
-
-    // Array Field (additionalInformation)
-    if m.AdditionalInformation != nil {
-        for _, _element := range m.AdditionalInformation {
-            _elementErr := _element.Serialize(io)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'additionalInformation' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    // Simple Field (cemiDataFrame)
-    _cemiDataFrameErr := m.CemiDataFrame.Serialize(io)
-    if _cemiDataFrameErr != nil {
-        return errors.New("Error serializing 'cemiDataFrame' field " + _cemiDataFrameErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIDataInd) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "additionalInformationLength":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.AdditionalInformationLength = data
-            case "additionalInformation":
-                var _values []*CEMIAdditionalInformation
-                var dt *CEMIAdditionalInformation
-                if err := d.DecodeElement(&dt, &tok); err != nil {
-                    return err
-                }
-                _values = append(_values, dt)
-                m.AdditionalInformation = _values
-            case "cemiDataFrame":
-                var data *CEMIDataFrame
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.CemiDataFrame = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIDataInd) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.AdditionalInformationLength, xml.StartElement{Name: xml.Name{Local: "additionalInformationLength"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.AdditionalInformation, xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.CemiDataFrame, xml.StartElement{Name: xml.Name{Local: "cemiDataFrame"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go
deleted file mode 100644
index 1bb1226..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go
+++ /dev/null
@@ -1,237 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIDataReq struct {
-    AdditionalInformationLength uint8
-    AdditionalInformation []*CEMIAdditionalInformation
-    CemiDataFrame *CEMIDataFrame
-    Parent *CEMI
-    ICEMIDataReq
-}
-
-// The corresponding interface
-type ICEMIDataReq interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIDataReq) MessageCode() uint8 {
-    return 0x11
-}
-
-
-func (m *CEMIDataReq) InitializeParent(parent *CEMI) {
-}
-
-func NewCEMIDataReq(additionalInformationLength uint8, additionalInformation []*CEMIAdditionalInformation, cemiDataFrame *CEMIDataFrame, ) *CEMI {
-    child := &CEMIDataReq{
-        AdditionalInformationLength: additionalInformationLength,
-        AdditionalInformation: additionalInformation,
-        CemiDataFrame: cemiDataFrame,
-        Parent: NewCEMI(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIDataReq(structType interface{}) CEMIDataReq {
-    castFunc := func(typ interface{}) CEMIDataReq {
-        if casted, ok := typ.(CEMIDataReq); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIDataReq); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMI); ok {
-            return CastCEMIDataReq(casted.Child)
-        }
-        if casted, ok := typ.(*CEMI); ok {
-            return CastCEMIDataReq(casted.Child)
-        }
-        return CEMIDataReq{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIDataReq) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (additionalInformationLength)
-    lengthInBits += 8
-
-    // Array field
-    if len(m.AdditionalInformation) > 0 {
-        for _, element := range m.AdditionalInformation {
-            lengthInBits += element.LengthInBits()
-        }
-    }
-
-    // Simple field (cemiDataFrame)
-    lengthInBits += m.CemiDataFrame.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *CEMIDataReq) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIDataReqParse(io *utils.ReadBuffer) (*CEMI, error) {
-
-    // Simple Field (additionalInformationLength)
-    additionalInformationLength, _additionalInformationLengthErr := io.ReadUint8(8)
-    if _additionalInformationLengthErr != nil {
-        return nil, errors.New("Error parsing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
-    }
-
-    // Array field (additionalInformation)
-    // Length array
-    additionalInformation := make([]*CEMIAdditionalInformation, 0)
-    _additionalInformationLength := additionalInformationLength
-    _additionalInformationEndPos := io.GetPos() + uint16(_additionalInformationLength)
-    for ;io.GetPos() < _additionalInformationEndPos; {
-        _item, _err := CEMIAdditionalInformationParse(io)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'additionalInformation' field " + _err.Error())
-        }
-        additionalInformation = append(additionalInformation, _item)
-    }
-
-    // Simple Field (cemiDataFrame)
-    cemiDataFrame, _cemiDataFrameErr := CEMIDataFrameParse(io)
-    if _cemiDataFrameErr != nil {
-        return nil, errors.New("Error parsing 'cemiDataFrame' field " + _cemiDataFrameErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &CEMIDataReq{
-        AdditionalInformationLength: additionalInformationLength,
-        AdditionalInformation: additionalInformation,
-        CemiDataFrame: cemiDataFrame,
-        Parent: &CEMI{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIDataReq) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (additionalInformationLength)
-    additionalInformationLength := uint8(m.AdditionalInformationLength)
-    _additionalInformationLengthErr := io.WriteUint8(8, (additionalInformationLength))
-    if _additionalInformationLengthErr != nil {
-        return errors.New("Error serializing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
-    }
-
-    // Array Field (additionalInformation)
-    if m.AdditionalInformation != nil {
-        for _, _element := range m.AdditionalInformation {
-            _elementErr := _element.Serialize(io)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'additionalInformation' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    // Simple Field (cemiDataFrame)
-    _cemiDataFrameErr := m.CemiDataFrame.Serialize(io)
-    if _cemiDataFrameErr != nil {
-        return errors.New("Error serializing 'cemiDataFrame' field " + _cemiDataFrameErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIDataReq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "additionalInformationLength":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.AdditionalInformationLength = data
-            case "additionalInformation":
-                var _values []*CEMIAdditionalInformation
-                var dt *CEMIAdditionalInformation
-                if err := d.DecodeElement(&dt, &tok); err != nil {
-                    return err
-                }
-                _values = append(_values, dt)
-                m.AdditionalInformation = _values
-            case "cemiDataFrame":
-                var data *CEMIDataFrame
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.CemiDataFrame = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIDataReq) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.AdditionalInformationLength, xml.StartElement{Name: xml.Name{Local: "additionalInformationLength"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.AdditionalInformation, xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.CemiDataFrame, xml.StartElement{Name: xml.Name{Local: "cemiDataFrame"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go
deleted file mode 100644
index 400daed..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go
+++ /dev/null
@@ -1,382 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-    "reflect"
-    "strings"
-)
-
-// The data-structure of this message
-type CEMIFrame struct {
-    Repeated bool
-    Priority CEMIPriority
-    AcknowledgeRequested bool
-    ErrorFlag bool
-    Child ICEMIFrameChild
-    ICEMIFrame
-    ICEMIFrameParent
-}
-
-// The corresponding interface
-type ICEMIFrame interface {
-    NotAckFrame() bool
-    Polling() bool
-    StandardFrame() bool
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-type ICEMIFrameParent interface {
-    SerializeParent(io utils.WriteBuffer, child ICEMIFrame, serializeChildFunction func() error) error
-}
-
-type ICEMIFrameChild interface {
-    Serialize(io utils.WriteBuffer) error
-    InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool)
-    ICEMIFrame
-}
-
-func NewCEMIFrame(repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) *CEMIFrame {
-    return &CEMIFrame{Repeated: repeated, Priority: priority, AcknowledgeRequested: acknowledgeRequested, ErrorFlag: errorFlag}
-}
-
-func CastCEMIFrame(structType interface{}) CEMIFrame {
-    castFunc := func(typ interface{}) CEMIFrame {
-        if casted, ok := typ.(CEMIFrame); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIFrame); ok {
-            return *casted
-        }
-        return CEMIFrame{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIFrame) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Discriminator Field (standardFrame)
-    lengthInBits += 1
-
-    // Discriminator Field (polling)
-    lengthInBits += 1
-
-    // Simple field (repeated)
-    lengthInBits += 1
-
-    // Discriminator Field (notAckFrame)
-    lengthInBits += 1
-
-    // Enum Field (priority)
-    lengthInBits += 2
-
-    // Simple field (acknowledgeRequested)
-    lengthInBits += 1
-
-    // Simple field (errorFlag)
-    lengthInBits += 1
-
-    // Length of sub-type elements will be added by sub-type...
-    lengthInBits += m.Child.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *CEMIFrame) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIFrameParse(io *utils.ReadBuffer) (*CEMIFrame, error) {
-
-    // Discriminator Field (standardFrame) (Used as input to a switch field)
-    standardFrame, _standardFrameErr := io.ReadBit()
-    if _standardFrameErr != nil {
-        return nil, errors.New("Error parsing 'standardFrame' field " + _standardFrameErr.Error())
-    }
-
-    // Discriminator Field (polling) (Used as input to a switch field)
-    polling, _pollingErr := io.ReadBit()
-    if _pollingErr != nil {
-        return nil, errors.New("Error parsing 'polling' field " + _pollingErr.Error())
-    }
-
-    // Simple Field (repeated)
-    repeated, _repeatedErr := io.ReadBit()
-    if _repeatedErr != nil {
-        return nil, errors.New("Error parsing 'repeated' field " + _repeatedErr.Error())
-    }
-
-    // Discriminator Field (notAckFrame) (Used as input to a switch field)
-    notAckFrame, _notAckFrameErr := io.ReadBit()
-    if _notAckFrameErr != nil {
-        return nil, errors.New("Error parsing 'notAckFrame' field " + _notAckFrameErr.Error())
-    }
-
-    // Enum field (priority)
-    priority, _priorityErr := CEMIPriorityParse(io)
-    if _priorityErr != nil {
-        return nil, errors.New("Error parsing 'priority' field " + _priorityErr.Error())
-    }
-
-    // Simple Field (acknowledgeRequested)
-    acknowledgeRequested, _acknowledgeRequestedErr := io.ReadBit()
-    if _acknowledgeRequestedErr != nil {
-        return nil, errors.New("Error parsing 'acknowledgeRequested' field " + _acknowledgeRequestedErr.Error())
-    }
-
-    // Simple Field (errorFlag)
-    errorFlag, _errorFlagErr := io.ReadBit()
-    if _errorFlagErr != nil {
-        return nil, errors.New("Error parsing 'errorFlag' field " + _errorFlagErr.Error())
-    }
-
-    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-    var _parent *CEMIFrame
-    var typeSwitchError error
-    switch {
-    case notAckFrame == false:
-        _parent, typeSwitchError = CEMIFrameAckParse(io)
-    case notAckFrame == true && standardFrame == true && polling == false:
-        _parent, typeSwitchError = CEMIFrameDataParse(io)
-    case notAckFrame == true && standardFrame == true && polling == true:
-        _parent, typeSwitchError = CEMIFramePollingDataParse(io)
-    case notAckFrame == true && standardFrame == false && polling == false:
-        _parent, typeSwitchError = CEMIFrameDataExtParse(io)
-    case notAckFrame == true && standardFrame == false && polling == true:
-        _parent, typeSwitchError = CEMIFramePollingDataExtParse(io)
-    }
-    if typeSwitchError != nil {
-        return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
-    }
-
-    // Finish initializing
-    _parent.Child.InitializeParent(_parent, repeated, priority, acknowledgeRequested, errorFlag)
-    return _parent, nil
-}
-
-func (m *CEMIFrame) Serialize(io utils.WriteBuffer) error {
-    return m.Child.Serialize(io)
-}
-
-func (m *CEMIFrame) SerializeParent(io utils.WriteBuffer, child ICEMIFrame, serializeChildFunction func() error) error {
-
-    // Discriminator Field (standardFrame) (Used as input to a switch field)
-    standardFrame := bool(child.StandardFrame())
-    _standardFrameErr := io.WriteBit((standardFrame))
-    if _standardFrameErr != nil {
-        return errors.New("Error serializing 'standardFrame' field " + _standardFrameErr.Error())
-    }
-
-    // Discriminator Field (polling) (Used as input to a switch field)
-    polling := bool(child.Polling())
-    _pollingErr := io.WriteBit((polling))
-    if _pollingErr != nil {
-        return errors.New("Error serializing 'polling' field " + _pollingErr.Error())
-    }
-
-    // Simple Field (repeated)
-    repeated := bool(m.Repeated)
-    _repeatedErr := io.WriteBit((repeated))
-    if _repeatedErr != nil {
-        return errors.New("Error serializing 'repeated' field " + _repeatedErr.Error())
-    }
-
-    // Discriminator Field (notAckFrame) (Used as input to a switch field)
-    notAckFrame := bool(child.NotAckFrame())
-    _notAckFrameErr := io.WriteBit((notAckFrame))
-    if _notAckFrameErr != nil {
-        return errors.New("Error serializing 'notAckFrame' field " + _notAckFrameErr.Error())
-    }
-
-    // Enum field (priority)
-    priority := CastCEMIPriority(m.Priority)
-    _priorityErr := priority.Serialize(io)
-    if _priorityErr != nil {
-        return errors.New("Error serializing 'priority' field " + _priorityErr.Error())
-    }
-
-    // Simple Field (acknowledgeRequested)
-    acknowledgeRequested := bool(m.AcknowledgeRequested)
-    _acknowledgeRequestedErr := io.WriteBit((acknowledgeRequested))
-    if _acknowledgeRequestedErr != nil {
-        return errors.New("Error serializing 'acknowledgeRequested' field " + _acknowledgeRequestedErr.Error())
-    }
-
-    // Simple Field (errorFlag)
-    errorFlag := bool(m.ErrorFlag)
-    _errorFlagErr := io.WriteBit((errorFlag))
-    if _errorFlagErr != nil {
-        return errors.New("Error serializing 'errorFlag' field " + _errorFlagErr.Error())
-    }
-
-    // Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
-    _typeSwitchErr := serializeChildFunction()
-    if _typeSwitchErr != nil {
-        return errors.New("Error serializing sub-type field " + _typeSwitchErr.Error())
-    }
-
-    return nil
-}
-
-func (m *CEMIFrame) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    for {
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "repeated":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Repeated = data
-            case "priority":
-                var data CEMIPriority
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Priority = data
-            case "acknowledgeRequested":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.AcknowledgeRequested = data
-            case "errorFlag":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.ErrorFlag = data
-                default:
-                    switch start.Attr[0].Value {
-                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIFrameAck":
-                            var dt *CEMIFrameAck
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIFrameAck)
-                            }
-                            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.knxnetip.readwrite.CEMIFrameData":
-                            var dt *CEMIFrameData
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIFrameData)
-                            }
-                            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.knxnetip.readwrite.CEMIFramePollingData":
-                            var dt *CEMIFramePollingData
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIFramePollingData)
-                            }
-                            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.knxnetip.readwrite.CEMIFrameDataExt":
-                            var dt *CEMIFrameDataExt
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIFrameDataExt)
-                            }
-                            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.knxnetip.readwrite.CEMIFramePollingDataExt":
-                            var dt *CEMIFramePollingDataExt
-                            if m.Child != nil {
-                                dt = m.Child.(*CEMIFramePollingDataExt)
-                            }
-                            if err := d.DecodeElement(&dt, &tok); err != nil {
-                                return err
-                            }
-                            if m.Child == nil {
-                                dt.Parent = m
-                                m.Child = dt
-                            }
-                    }
-            }
-        }
-    }
-}
-
-func (m *CEMIFrame) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    className := reflect.TypeOf(m.Child).String()
-    className = "org.apache.plc4x.java.knxnetip.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.Repeated, xml.StartElement{Name: xml.Name{Local: "repeated"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Priority, xml.StartElement{Name: xml.Name{Local: "priority"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.AcknowledgeRequested, xml.StartElement{Name: xml.Name{Local: "acknowledgeRequested"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.ErrorFlag, xml.StartElement{Name: xml.Name{Local: "errorFlag"}}); err != nil {
-        return err
-    }
-    marshaller, ok := m.Child.(xml.Marshaler)
-    if !ok {
-        return errors.New("child is not castable to Marshaler")
-    }
-    marshaller.MarshalXML(e, start)
-    if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go
deleted file mode 100644
index bc90b17..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go
+++ /dev/null
@@ -1,143 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIFrameAck struct {
-    Parent *CEMIFrame
-    ICEMIFrameAck
-}
-
-// The corresponding interface
-type ICEMIFrameAck interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIFrameAck) NotAckFrame() bool {
-    return false
-}
-
-func (m *CEMIFrameAck) StandardFrame() bool {
-    return false
-}
-
-func (m *CEMIFrameAck) Polling() bool {
-    return false
-}
-
-
-func (m *CEMIFrameAck) InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) {
-    m.Parent.Repeated = repeated
-    m.Parent.Priority = priority
-    m.Parent.AcknowledgeRequested = acknowledgeRequested
-    m.Parent.ErrorFlag = errorFlag
-}
-
-func NewCEMIFrameAck(repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) *CEMIFrame {
-    child := &CEMIFrameAck{
-        Parent: NewCEMIFrame(repeated, priority, acknowledgeRequested, errorFlag),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIFrameAck(structType interface{}) CEMIFrameAck {
-    castFunc := func(typ interface{}) CEMIFrameAck {
-        if casted, ok := typ.(CEMIFrameAck); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIFrameAck); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMIFrame); ok {
-            return CastCEMIFrameAck(casted.Child)
-        }
-        if casted, ok := typ.(*CEMIFrame); ok {
-            return CastCEMIFrameAck(casted.Child)
-        }
-        return CEMIFrameAck{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIFrameAck) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    return lengthInBits
-}
-
-func (m *CEMIFrameAck) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIFrameAckParse(io *utils.ReadBuffer) (*CEMIFrame, error) {
-
-    // Create a partially initialized instance
-    _child := &CEMIFrameAck{
-        Parent: &CEMIFrame{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIFrameAck) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIFrameAck) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIFrameAck) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go
deleted file mode 100644
index f7a89d5..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go
+++ /dev/null
@@ -1,486 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/base64"
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIFrameData struct {
-    SourceAddress *KNXAddress
-    DestinationAddress []int8
-    GroupAddress bool
-    HopCount uint8
-    DataLength uint8
-    Tcpi TPCI
-    Counter uint8
-    Apci APCI
-    DataFirstByte int8
-    Data []int8
-    Crc uint8
-    Parent *CEMIFrame
-    ICEMIFrameData
-}
-
-// The corresponding interface
-type ICEMIFrameData interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIFrameData) NotAckFrame() bool {
-    return true
-}
-
-func (m *CEMIFrameData) StandardFrame() bool {
-    return true
-}
-
-func (m *CEMIFrameData) Polling() bool {
-    return false
-}
-
-
-func (m *CEMIFrameData) InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) {
-    m.Parent.Repeated = repeated
-    m.Parent.Priority = priority
-    m.Parent.AcknowledgeRequested = acknowledgeRequested
-    m.Parent.ErrorFlag = errorFlag
-}
-
-func NewCEMIFrameData(sourceAddress *KNXAddress, destinationAddress []int8, groupAddress bool, hopCount uint8, dataLength uint8, tcpi TPCI, counter uint8, apci APCI, dataFirstByte int8, data []int8, crc uint8, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) *CEMIFrame {
-    child := &CEMIFrameData{
-        SourceAddress: sourceAddress,
-        DestinationAddress: destinationAddress,
-        GroupAddress: groupAddress,
-        HopCount: hopCount,
-        DataLength: dataLength,
-        Tcpi: tcpi,
-        Counter: counter,
-        Apci: apci,
-        DataFirstByte: dataFirstByte,
-        Data: data,
-        Crc: crc,
-        Parent: NewCEMIFrame(repeated, priority, acknowledgeRequested, errorFlag),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIFrameData(structType interface{}) CEMIFrameData {
-    castFunc := func(typ interface{}) CEMIFrameData {
-        if casted, ok := typ.(CEMIFrameData); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIFrameData); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMIFrame); ok {
-            return CastCEMIFrameData(casted.Child)
-        }
-        if casted, ok := typ.(*CEMIFrame); ok {
-            return CastCEMIFrameData(casted.Child)
-        }
-        return CEMIFrameData{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIFrameData) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (sourceAddress)
-    lengthInBits += m.SourceAddress.LengthInBits()
-
-    // Array field
-    if len(m.DestinationAddress) > 0 {
-        lengthInBits += 8 * uint16(len(m.DestinationAddress))
-    }
-
-    // Simple field (groupAddress)
-    lengthInBits += 1
-
-    // Simple field (hopCount)
-    lengthInBits += 3
-
-    // Simple field (dataLength)
-    lengthInBits += 4
-
-    // Enum Field (tcpi)
-    lengthInBits += 2
-
-    // Simple field (counter)
-    lengthInBits += 4
-
-    // Enum Field (apci)
-    lengthInBits += 4
-
-    // Simple field (dataFirstByte)
-    lengthInBits += 6
-
-    // Array field
-    if len(m.Data) > 0 {
-        lengthInBits += 8 * uint16(len(m.Data))
-    }
-
-    // Simple field (crc)
-    lengthInBits += 8
-
-    return lengthInBits
-}
-
-func (m *CEMIFrameData) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIFrameDataParse(io *utils.ReadBuffer) (*CEMIFrame, error) {
-
-    // Simple Field (sourceAddress)
-    sourceAddress, _sourceAddressErr := KNXAddressParse(io)
-    if _sourceAddressErr != nil {
-        return nil, errors.New("Error parsing 'sourceAddress' field " + _sourceAddressErr.Error())
-    }
-
-    // Array field (destinationAddress)
-    // Count array
-    destinationAddress := make([]int8, uint16(2))
-    for curItem := uint16(0); curItem < uint16(uint16(2)); curItem++ {
-        _item, _err := io.ReadInt8(8)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'destinationAddress' field " + _err.Error())
-        }
-        destinationAddress[curItem] = _item
-    }
-
-    // Simple Field (groupAddress)
-    groupAddress, _groupAddressErr := io.ReadBit()
-    if _groupAddressErr != nil {
-        return nil, errors.New("Error parsing 'groupAddress' field " + _groupAddressErr.Error())
-    }
-
-    // Simple Field (hopCount)
-    hopCount, _hopCountErr := io.ReadUint8(3)
-    if _hopCountErr != nil {
-        return nil, errors.New("Error parsing 'hopCount' field " + _hopCountErr.Error())
-    }
-
-    // Simple Field (dataLength)
-    dataLength, _dataLengthErr := io.ReadUint8(4)
-    if _dataLengthErr != nil {
-        return nil, errors.New("Error parsing 'dataLength' field " + _dataLengthErr.Error())
-    }
-
-    // Enum field (tcpi)
-    tcpi, _tcpiErr := TPCIParse(io)
-    if _tcpiErr != nil {
-        return nil, errors.New("Error parsing 'tcpi' field " + _tcpiErr.Error())
-    }
-
-    // Simple Field (counter)
-    counter, _counterErr := io.ReadUint8(4)
-    if _counterErr != nil {
-        return nil, errors.New("Error parsing 'counter' field " + _counterErr.Error())
-    }
-
-    // Enum field (apci)
-    apci, _apciErr := APCIParse(io)
-    if _apciErr != nil {
-        return nil, errors.New("Error parsing 'apci' field " + _apciErr.Error())
-    }
-
-    // Simple Field (dataFirstByte)
-    dataFirstByte, _dataFirstByteErr := io.ReadInt8(6)
-    if _dataFirstByteErr != nil {
-        return nil, errors.New("Error parsing 'dataFirstByte' field " + _dataFirstByteErr.Error())
-    }
-
-    // Array field (data)
-    // Count array
-    data := make([]int8, uint16(dataLength) - uint16(uint16(1)))
-    for curItem := uint16(0); curItem < uint16(uint16(dataLength) - uint16(uint16(1))); curItem++ {
-        _item, _err := io.ReadInt8(8)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'data' field " + _err.Error())
-        }
-        data[curItem] = _item
-    }
-
-    // Simple Field (crc)
-    crc, _crcErr := io.ReadUint8(8)
-    if _crcErr != nil {
-        return nil, errors.New("Error parsing 'crc' field " + _crcErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &CEMIFrameData{
-        SourceAddress: sourceAddress,
-        DestinationAddress: destinationAddress,
-        GroupAddress: groupAddress,
-        HopCount: hopCount,
-        DataLength: dataLength,
-        Tcpi: tcpi,
-        Counter: counter,
-        Apci: apci,
-        DataFirstByte: dataFirstByte,
-        Data: data,
-        Crc: crc,
-        Parent: &CEMIFrame{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIFrameData) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (sourceAddress)
-    _sourceAddressErr := m.SourceAddress.Serialize(io)
-    if _sourceAddressErr != nil {
-        return errors.New("Error serializing 'sourceAddress' field " + _sourceAddressErr.Error())
-    }
-
-    // Array Field (destinationAddress)
-    if m.DestinationAddress != nil {
-        for _, _element := range m.DestinationAddress {
-            _elementErr := io.WriteInt8(8, _element)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'destinationAddress' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    // Simple Field (groupAddress)
-    groupAddress := bool(m.GroupAddress)
-    _groupAddressErr := io.WriteBit((groupAddress))
-    if _groupAddressErr != nil {
-        return errors.New("Error serializing 'groupAddress' field " + _groupAddressErr.Error())
-    }
-
-    // Simple Field (hopCount)
-    hopCount := uint8(m.HopCount)
-    _hopCountErr := io.WriteUint8(3, (hopCount))
-    if _hopCountErr != nil {
-        return errors.New("Error serializing 'hopCount' field " + _hopCountErr.Error())
-    }
-
-    // Simple Field (dataLength)
-    dataLength := uint8(m.DataLength)
-    _dataLengthErr := io.WriteUint8(4, (dataLength))
-    if _dataLengthErr != nil {
-        return errors.New("Error serializing 'dataLength' field " + _dataLengthErr.Error())
-    }
-
-    // Enum field (tcpi)
-    tcpi := CastTPCI(m.Tcpi)
-    _tcpiErr := tcpi.Serialize(io)
-    if _tcpiErr != nil {
-        return errors.New("Error serializing 'tcpi' field " + _tcpiErr.Error())
-    }
-
-    // Simple Field (counter)
-    counter := uint8(m.Counter)
-    _counterErr := io.WriteUint8(4, (counter))
-    if _counterErr != nil {
-        return errors.New("Error serializing 'counter' field " + _counterErr.Error())
-    }
-
-    // Enum field (apci)
-    apci := CastAPCI(m.Apci)
-    _apciErr := apci.Serialize(io)
-    if _apciErr != nil {
-        return errors.New("Error serializing 'apci' field " + _apciErr.Error())
-    }
-
-    // Simple Field (dataFirstByte)
-    dataFirstByte := int8(m.DataFirstByte)
-    _dataFirstByteErr := io.WriteInt8(6, (dataFirstByte))
-    if _dataFirstByteErr != nil {
-        return errors.New("Error serializing 'dataFirstByte' field " + _dataFirstByteErr.Error())
-    }
-
-    // Array Field (data)
-    if m.Data != nil {
-        for _, _element := range m.Data {
-            _elementErr := io.WriteInt8(8, _element)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'data' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    // Simple Field (crc)
-    crc := uint8(m.Crc)
-    _crcErr := io.WriteUint8(8, (crc))
-    if _crcErr != nil {
-        return errors.New("Error serializing 'crc' field " + _crcErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIFrameData) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "sourceAddress":
-                var data *KNXAddress
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.SourceAddress = data
-            case "destinationAddress":
-                var _encoded string
-                if err := d.DecodeElement(&_encoded, &tok); err != nil {
-                    return err
-                }
-                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
-                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
-                if err != nil {
-                    return err
-                }
-                m.DestinationAddress = utils.ByteToInt8(_decoded[0:_len])
-            case "groupAddress":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.GroupAddress = data
-            case "hopCount":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.HopCount = data
-            case "dataLength":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.DataLength = data
-            case "tcpi":
-                var data TPCI
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Tcpi = data
-            case "counter":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Counter = data
-            case "apci":
-                var data APCI
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Apci = data
-            case "dataFirstByte":
-                var data int8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.DataFirstByte = data
-            case "data":
-                var _encoded string
-                if err := d.DecodeElement(&_encoded, &tok); err != nil {
-                    return err
-                }
-                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
-                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
-                if err != nil {
-                    return err
-                }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
-            case "crc":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Crc = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIFrameData) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.SourceAddress, xml.StartElement{Name: xml.Name{Local: "sourceAddress"}}); err != nil {
-        return err
-    }
-    _encodedDestinationAddress := make([]byte, base64.StdEncoding.EncodedLen(len(m.DestinationAddress)))
-    base64.StdEncoding.Encode(_encodedDestinationAddress, utils.Int8ToByte(m.DestinationAddress))
-    if err := e.EncodeElement(_encodedDestinationAddress, xml.StartElement{Name: xml.Name{Local: "destinationAddress"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.GroupAddress, xml.StartElement{Name: xml.Name{Local: "groupAddress"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.HopCount, xml.StartElement{Name: xml.Name{Local: "hopCount"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.DataLength, xml.StartElement{Name: xml.Name{Local: "dataLength"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Tcpi, xml.StartElement{Name: xml.Name{Local: "tcpi"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Counter, xml.StartElement{Name: xml.Name{Local: "counter"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Apci, xml.StartElement{Name: xml.Name{Local: "apci"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.DataFirstByte, xml.StartElement{Name: xml.Name{Local: "dataFirstByte"}}); err != nil {
-        return err
-    }
-    _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
-    if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Crc, xml.StartElement{Name: xml.Name{Local: "crc"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go
deleted file mode 100644
index b35ed0f..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go
+++ /dev/null
@@ -1,514 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/base64"
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIFrameDataExt struct {
-    GroupAddress bool
-    HopCount uint8
-    ExtendedFrameFormat uint8
-    SourceAddress *KNXAddress
-    DestinationAddress []int8
-    DataLength uint8
-    Tcpi TPCI
-    Counter uint8
-    Apci APCI
-    DataFirstByte int8
-    Data []int8
-    Crc uint8
-    Parent *CEMIFrame
-    ICEMIFrameDataExt
-}
-
-// The corresponding interface
-type ICEMIFrameDataExt interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIFrameDataExt) NotAckFrame() bool {
-    return true
-}
-
-func (m *CEMIFrameDataExt) StandardFrame() bool {
-    return false
-}
-
-func (m *CEMIFrameDataExt) Polling() bool {
-    return false
-}
-
-
-func (m *CEMIFrameDataExt) InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) {
-    m.Parent.Repeated = repeated
-    m.Parent.Priority = priority
-    m.Parent.AcknowledgeRequested = acknowledgeRequested
-    m.Parent.ErrorFlag = errorFlag
-}
-
-func NewCEMIFrameDataExt(groupAddress bool, hopCount uint8, extendedFrameFormat uint8, sourceAddress *KNXAddress, destinationAddress []int8, dataLength uint8, tcpi TPCI, counter uint8, apci APCI, dataFirstByte int8, data []int8, crc uint8, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) *CEMIFrame {
-    child := &CEMIFrameDataExt{
-        GroupAddress: groupAddress,
-        HopCount: hopCount,
-        ExtendedFrameFormat: extendedFrameFormat,
-        SourceAddress: sourceAddress,
-        DestinationAddress: destinationAddress,
-        DataLength: dataLength,
-        Tcpi: tcpi,
-        Counter: counter,
-        Apci: apci,
-        DataFirstByte: dataFirstByte,
-        Data: data,
-        Crc: crc,
-        Parent: NewCEMIFrame(repeated, priority, acknowledgeRequested, errorFlag),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIFrameDataExt(structType interface{}) CEMIFrameDataExt {
-    castFunc := func(typ interface{}) CEMIFrameDataExt {
-        if casted, ok := typ.(CEMIFrameDataExt); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIFrameDataExt); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMIFrame); ok {
-            return CastCEMIFrameDataExt(casted.Child)
-        }
-        if casted, ok := typ.(*CEMIFrame); ok {
-            return CastCEMIFrameDataExt(casted.Child)
-        }
-        return CEMIFrameDataExt{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIFrameDataExt) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (groupAddress)
-    lengthInBits += 1
-
-    // Simple field (hopCount)
-    lengthInBits += 3
-
-    // Simple field (extendedFrameFormat)
-    lengthInBits += 4
-
-    // Simple field (sourceAddress)
-    lengthInBits += m.SourceAddress.LengthInBits()
-
-    // Array field
-    if len(m.DestinationAddress) > 0 {
-        lengthInBits += 8 * uint16(len(m.DestinationAddress))
-    }
-
-    // Simple field (dataLength)
-    lengthInBits += 8
-
-    // Enum Field (tcpi)
-    lengthInBits += 2
-
-    // Simple field (counter)
-    lengthInBits += 4
-
-    // Enum Field (apci)
-    lengthInBits += 4
-
-    // Simple field (dataFirstByte)
-    lengthInBits += 6
-
-    // Array field
-    if len(m.Data) > 0 {
-        lengthInBits += 8 * uint16(len(m.Data))
-    }
-
-    // Simple field (crc)
-    lengthInBits += 8
-
-    return lengthInBits
-}
-
-func (m *CEMIFrameDataExt) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIFrameDataExtParse(io *utils.ReadBuffer) (*CEMIFrame, error) {
-
-    // Simple Field (groupAddress)
-    groupAddress, _groupAddressErr := io.ReadBit()
-    if _groupAddressErr != nil {
-        return nil, errors.New("Error parsing 'groupAddress' field " + _groupAddressErr.Error())
-    }
-
-    // Simple Field (hopCount)
-    hopCount, _hopCountErr := io.ReadUint8(3)
-    if _hopCountErr != nil {
-        return nil, errors.New("Error parsing 'hopCount' field " + _hopCountErr.Error())
-    }
-
-    // Simple Field (extendedFrameFormat)
-    extendedFrameFormat, _extendedFrameFormatErr := io.ReadUint8(4)
-    if _extendedFrameFormatErr != nil {
-        return nil, errors.New("Error parsing 'extendedFrameFormat' field " + _extendedFrameFormatErr.Error())
-    }
-
-    // Simple Field (sourceAddress)
-    sourceAddress, _sourceAddressErr := KNXAddressParse(io)
-    if _sourceAddressErr != nil {
-        return nil, errors.New("Error parsing 'sourceAddress' field " + _sourceAddressErr.Error())
-    }
-
-    // Array field (destinationAddress)
-    // Count array
-    destinationAddress := make([]int8, uint16(2))
-    for curItem := uint16(0); curItem < uint16(uint16(2)); curItem++ {
-        _item, _err := io.ReadInt8(8)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'destinationAddress' field " + _err.Error())
-        }
-        destinationAddress[curItem] = _item
-    }
-
-    // Simple Field (dataLength)
-    dataLength, _dataLengthErr := io.ReadUint8(8)
-    if _dataLengthErr != nil {
-        return nil, errors.New("Error parsing 'dataLength' field " + _dataLengthErr.Error())
-    }
-
-    // Enum field (tcpi)
-    tcpi, _tcpiErr := TPCIParse(io)
-    if _tcpiErr != nil {
-        return nil, errors.New("Error parsing 'tcpi' field " + _tcpiErr.Error())
-    }
-
-    // Simple Field (counter)
-    counter, _counterErr := io.ReadUint8(4)
-    if _counterErr != nil {
-        return nil, errors.New("Error parsing 'counter' field " + _counterErr.Error())
-    }
-
-    // Enum field (apci)
-    apci, _apciErr := APCIParse(io)
-    if _apciErr != nil {
-        return nil, errors.New("Error parsing 'apci' field " + _apciErr.Error())
-    }
-
-    // Simple Field (dataFirstByte)
-    dataFirstByte, _dataFirstByteErr := io.ReadInt8(6)
-    if _dataFirstByteErr != nil {
-        return nil, errors.New("Error parsing 'dataFirstByte' field " + _dataFirstByteErr.Error())
-    }
-
-    // Array field (data)
-    // Count array
-    data := make([]int8, uint16(dataLength) - uint16(uint16(1)))
-    for curItem := uint16(0); curItem < uint16(uint16(dataLength) - uint16(uint16(1))); curItem++ {
-        _item, _err := io.ReadInt8(8)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'data' field " + _err.Error())
-        }
-        data[curItem] = _item
-    }
-
-    // Simple Field (crc)
-    crc, _crcErr := io.ReadUint8(8)
-    if _crcErr != nil {
-        return nil, errors.New("Error parsing 'crc' field " + _crcErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &CEMIFrameDataExt{
-        GroupAddress: groupAddress,
-        HopCount: hopCount,
-        ExtendedFrameFormat: extendedFrameFormat,
-        SourceAddress: sourceAddress,
-        DestinationAddress: destinationAddress,
-        DataLength: dataLength,
-        Tcpi: tcpi,
-        Counter: counter,
-        Apci: apci,
-        DataFirstByte: dataFirstByte,
-        Data: data,
-        Crc: crc,
-        Parent: &CEMIFrame{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIFrameDataExt) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (groupAddress)
-    groupAddress := bool(m.GroupAddress)
-    _groupAddressErr := io.WriteBit((groupAddress))
-    if _groupAddressErr != nil {
-        return errors.New("Error serializing 'groupAddress' field " + _groupAddressErr.Error())
-    }
-
-    // Simple Field (hopCount)
-    hopCount := uint8(m.HopCount)
-    _hopCountErr := io.WriteUint8(3, (hopCount))
-    if _hopCountErr != nil {
-        return errors.New("Error serializing 'hopCount' field " + _hopCountErr.Error())
-    }
-
-    // Simple Field (extendedFrameFormat)
-    extendedFrameFormat := uint8(m.ExtendedFrameFormat)
-    _extendedFrameFormatErr := io.WriteUint8(4, (extendedFrameFormat))
-    if _extendedFrameFormatErr != nil {
-        return errors.New("Error serializing 'extendedFrameFormat' field " + _extendedFrameFormatErr.Error())
-    }
-
-    // Simple Field (sourceAddress)
-    _sourceAddressErr := m.SourceAddress.Serialize(io)
-    if _sourceAddressErr != nil {
-        return errors.New("Error serializing 'sourceAddress' field " + _sourceAddressErr.Error())
-    }
-
-    // Array Field (destinationAddress)
-    if m.DestinationAddress != nil {
-        for _, _element := range m.DestinationAddress {
-            _elementErr := io.WriteInt8(8, _element)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'destinationAddress' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    // Simple Field (dataLength)
-    dataLength := uint8(m.DataLength)
-    _dataLengthErr := io.WriteUint8(8, (dataLength))
-    if _dataLengthErr != nil {
-        return errors.New("Error serializing 'dataLength' field " + _dataLengthErr.Error())
-    }
-
-    // Enum field (tcpi)
-    tcpi := CastTPCI(m.Tcpi)
-    _tcpiErr := tcpi.Serialize(io)
-    if _tcpiErr != nil {
-        return errors.New("Error serializing 'tcpi' field " + _tcpiErr.Error())
-    }
-
-    // Simple Field (counter)
-    counter := uint8(m.Counter)
-    _counterErr := io.WriteUint8(4, (counter))
-    if _counterErr != nil {
-        return errors.New("Error serializing 'counter' field " + _counterErr.Error())
-    }
-
-    // Enum field (apci)
-    apci := CastAPCI(m.Apci)
-    _apciErr := apci.Serialize(io)
-    if _apciErr != nil {
-        return errors.New("Error serializing 'apci' field " + _apciErr.Error())
-    }
-
-    // Simple Field (dataFirstByte)
-    dataFirstByte := int8(m.DataFirstByte)
-    _dataFirstByteErr := io.WriteInt8(6, (dataFirstByte))
-    if _dataFirstByteErr != nil {
-        return errors.New("Error serializing 'dataFirstByte' field " + _dataFirstByteErr.Error())
-    }
-
-    // Array Field (data)
-    if m.Data != nil {
-        for _, _element := range m.Data {
-            _elementErr := io.WriteInt8(8, _element)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'data' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    // Simple Field (crc)
-    crc := uint8(m.Crc)
-    _crcErr := io.WriteUint8(8, (crc))
-    if _crcErr != nil {
-        return errors.New("Error serializing 'crc' field " + _crcErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIFrameDataExt) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "groupAddress":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.GroupAddress = data
-            case "hopCount":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.HopCount = data
-            case "extendedFrameFormat":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.ExtendedFrameFormat = data
-            case "sourceAddress":
-                var data *KNXAddress
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.SourceAddress = data
-            case "destinationAddress":
-                var _encoded string
-                if err := d.DecodeElement(&_encoded, &tok); err != nil {
-                    return err
-                }
-                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
-                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
-                if err != nil {
-                    return err
-                }
-                m.DestinationAddress = utils.ByteToInt8(_decoded[0:_len])
-            case "dataLength":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.DataLength = data
-            case "tcpi":
-                var data TPCI
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Tcpi = data
-            case "counter":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Counter = data
-            case "apci":
-                var data APCI
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Apci = data
-            case "dataFirstByte":
-                var data int8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.DataFirstByte = data
-            case "data":
-                var _encoded string
-                if err := d.DecodeElement(&_encoded, &tok); err != nil {
-                    return err
-                }
-                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
-                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
-                if err != nil {
-                    return err
-                }
-                m.Data = utils.ByteToInt8(_decoded[0:_len])
-            case "crc":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Crc = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIFrameDataExt) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.GroupAddress, xml.StartElement{Name: xml.Name{Local: "groupAddress"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.HopCount, xml.StartElement{Name: xml.Name{Local: "hopCount"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.ExtendedFrameFormat, xml.StartElement{Name: xml.Name{Local: "extendedFrameFormat"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.SourceAddress, xml.StartElement{Name: xml.Name{Local: "sourceAddress"}}); err != nil {
-        return err
-    }
-    _encodedDestinationAddress := make([]byte, base64.StdEncoding.EncodedLen(len(m.DestinationAddress)))
-    base64.StdEncoding.Encode(_encodedDestinationAddress, utils.Int8ToByte(m.DestinationAddress))
-    if err := e.EncodeElement(_encodedDestinationAddress, xml.StartElement{Name: xml.Name{Local: "destinationAddress"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.DataLength, xml.StartElement{Name: xml.Name{Local: "dataLength"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Tcpi, xml.StartElement{Name: xml.Name{Local: "tcpi"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Counter, xml.StartElement{Name: xml.Name{Local: "counter"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Apci, xml.StartElement{Name: xml.Name{Local: "apci"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.DataFirstByte, xml.StartElement{Name: xml.Name{Local: "dataFirstByte"}}); err != nil {
-        return err
-    }
-    _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
-    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
-    if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Crc, xml.StartElement{Name: xml.Name{Local: "crc"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go
deleted file mode 100644
index 092e873..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go
+++ /dev/null
@@ -1,143 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIFramePollingData struct {
-    Parent *CEMIFrame
-    ICEMIFramePollingData
-}
-
-// The corresponding interface
-type ICEMIFramePollingData interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIFramePollingData) NotAckFrame() bool {
-    return true
-}
-
-func (m *CEMIFramePollingData) StandardFrame() bool {
-    return true
-}
-
-func (m *CEMIFramePollingData) Polling() bool {
-    return true
-}
-
-
-func (m *CEMIFramePollingData) InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) {
-    m.Parent.Repeated = repeated
-    m.Parent.Priority = priority
-    m.Parent.AcknowledgeRequested = acknowledgeRequested
-    m.Parent.ErrorFlag = errorFlag
-}
-
-func NewCEMIFramePollingData(repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) *CEMIFrame {
-    child := &CEMIFramePollingData{
-        Parent: NewCEMIFrame(repeated, priority, acknowledgeRequested, errorFlag),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIFramePollingData(structType interface{}) CEMIFramePollingData {
-    castFunc := func(typ interface{}) CEMIFramePollingData {
-        if casted, ok := typ.(CEMIFramePollingData); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIFramePollingData); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMIFrame); ok {
-            return CastCEMIFramePollingData(casted.Child)
-        }
-        if casted, ok := typ.(*CEMIFrame); ok {
-            return CastCEMIFramePollingData(casted.Child)
-        }
-        return CEMIFramePollingData{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIFramePollingData) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    return lengthInBits
-}
-
-func (m *CEMIFramePollingData) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIFramePollingDataParse(io *utils.ReadBuffer) (*CEMIFrame, error) {
-
-    // Create a partially initialized instance
-    _child := &CEMIFramePollingData{
-        Parent: &CEMIFrame{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIFramePollingData) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIFramePollingData) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIFramePollingData) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go
deleted file mode 100644
index cb7f324..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go
+++ /dev/null
@@ -1,143 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIFramePollingDataExt struct {
-    Parent *CEMIFrame
-    ICEMIFramePollingDataExt
-}
-
-// The corresponding interface
-type ICEMIFramePollingDataExt interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIFramePollingDataExt) NotAckFrame() bool {
-    return true
-}
-
-func (m *CEMIFramePollingDataExt) StandardFrame() bool {
-    return false
-}
-
-func (m *CEMIFramePollingDataExt) Polling() bool {
-    return true
-}
-
-
-func (m *CEMIFramePollingDataExt) InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) {
-    m.Parent.Repeated = repeated
-    m.Parent.Priority = priority
-    m.Parent.AcknowledgeRequested = acknowledgeRequested
-    m.Parent.ErrorFlag = errorFlag
-}
-
-func NewCEMIFramePollingDataExt(repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) *CEMIFrame {
-    child := &CEMIFramePollingDataExt{
-        Parent: NewCEMIFrame(repeated, priority, acknowledgeRequested, errorFlag),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIFramePollingDataExt(structType interface{}) CEMIFramePollingDataExt {
-    castFunc := func(typ interface{}) CEMIFramePollingDataExt {
-        if casted, ok := typ.(CEMIFramePollingDataExt); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIFramePollingDataExt); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMIFrame); ok {
-            return CastCEMIFramePollingDataExt(casted.Child)
-        }
-        if casted, ok := typ.(*CEMIFrame); ok {
-            return CastCEMIFramePollingDataExt(casted.Child)
-        }
-        return CEMIFramePollingDataExt{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIFramePollingDataExt) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    return lengthInBits
-}
-
-func (m *CEMIFramePollingDataExt) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIFramePollingDataExtParse(io *utils.ReadBuffer) (*CEMIFrame, error) {
-
-    // Create a partially initialized instance
-    _child := &CEMIFramePollingDataExt{
-        Parent: &CEMIFrame{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIFramePollingDataExt) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIFramePollingDataExt) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIFramePollingDataExt) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go
deleted file mode 100644
index 081288c..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go
+++ /dev/null
@@ -1,300 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIMPropReadCon struct {
-    InterfaceObjectType uint16
-    ObjectInstance uint8
-    PropertyId uint8
-    NumberOfElements uint8
-    StartIndex uint16
-    Unknown uint16
-    Parent *CEMI
-    ICEMIMPropReadCon
-}
-
-// The corresponding interface
-type ICEMIMPropReadCon interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIMPropReadCon) MessageCode() uint8 {
-    return 0xFB
-}
-
-
-func (m *CEMIMPropReadCon) InitializeParent(parent *CEMI) {
-}
-
-func NewCEMIMPropReadCon(interfaceObjectType uint16, objectInstance uint8, propertyId uint8, numberOfElements uint8, startIndex uint16, unknown uint16, ) *CEMI {
-    child := &CEMIMPropReadCon{
-        InterfaceObjectType: interfaceObjectType,
-        ObjectInstance: objectInstance,
-        PropertyId: propertyId,
-        NumberOfElements: numberOfElements,
-        StartIndex: startIndex,
-        Unknown: unknown,
-        Parent: NewCEMI(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIMPropReadCon(structType interface{}) CEMIMPropReadCon {
-    castFunc := func(typ interface{}) CEMIMPropReadCon {
-        if casted, ok := typ.(CEMIMPropReadCon); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIMPropReadCon); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMI); ok {
-            return CastCEMIMPropReadCon(casted.Child)
-        }
-        if casted, ok := typ.(*CEMI); ok {
-            return CastCEMIMPropReadCon(casted.Child)
-        }
-        return CEMIMPropReadCon{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIMPropReadCon) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (interfaceObjectType)
-    lengthInBits += 16
-
-    // Simple field (objectInstance)
-    lengthInBits += 8
-
-    // Simple field (propertyId)
-    lengthInBits += 8
-
-    // Simple field (numberOfElements)
-    lengthInBits += 4
-
-    // Simple field (startIndex)
-    lengthInBits += 12
-
-    // Simple field (unknown)
-    lengthInBits += 16
-
-    return lengthInBits
-}
-
-func (m *CEMIMPropReadCon) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIMPropReadConParse(io *utils.ReadBuffer) (*CEMI, error) {
-
-    // Simple Field (interfaceObjectType)
-    interfaceObjectType, _interfaceObjectTypeErr := io.ReadUint16(16)
-    if _interfaceObjectTypeErr != nil {
-        return nil, errors.New("Error parsing 'interfaceObjectType' field " + _interfaceObjectTypeErr.Error())
-    }
-
-    // Simple Field (objectInstance)
-    objectInstance, _objectInstanceErr := io.ReadUint8(8)
-    if _objectInstanceErr != nil {
-        return nil, errors.New("Error parsing 'objectInstance' field " + _objectInstanceErr.Error())
-    }
-
-    // Simple Field (propertyId)
-    propertyId, _propertyIdErr := io.ReadUint8(8)
-    if _propertyIdErr != nil {
-        return nil, errors.New("Error parsing 'propertyId' field " + _propertyIdErr.Error())
-    }
-
-    // Simple Field (numberOfElements)
-    numberOfElements, _numberOfElementsErr := io.ReadUint8(4)
-    if _numberOfElementsErr != nil {
-        return nil, errors.New("Error parsing 'numberOfElements' field " + _numberOfElementsErr.Error())
-    }
-
-    // Simple Field (startIndex)
-    startIndex, _startIndexErr := io.ReadUint16(12)
-    if _startIndexErr != nil {
-        return nil, errors.New("Error parsing 'startIndex' field " + _startIndexErr.Error())
-    }
-
-    // Simple Field (unknown)
-    unknown, _unknownErr := io.ReadUint16(16)
-    if _unknownErr != nil {
-        return nil, errors.New("Error parsing 'unknown' field " + _unknownErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &CEMIMPropReadCon{
-        InterfaceObjectType: interfaceObjectType,
-        ObjectInstance: objectInstance,
-        PropertyId: propertyId,
-        NumberOfElements: numberOfElements,
-        StartIndex: startIndex,
-        Unknown: unknown,
-        Parent: &CEMI{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIMPropReadCon) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (interfaceObjectType)
-    interfaceObjectType := uint16(m.InterfaceObjectType)
-    _interfaceObjectTypeErr := io.WriteUint16(16, (interfaceObjectType))
-    if _interfaceObjectTypeErr != nil {
-        return errors.New("Error serializing 'interfaceObjectType' field " + _interfaceObjectTypeErr.Error())
-    }
-
-    // Simple Field (objectInstance)
-    objectInstance := uint8(m.ObjectInstance)
-    _objectInstanceErr := io.WriteUint8(8, (objectInstance))
-    if _objectInstanceErr != nil {
-        return errors.New("Error serializing 'objectInstance' field " + _objectInstanceErr.Error())
-    }
-
-    // Simple Field (propertyId)
-    propertyId := uint8(m.PropertyId)
-    _propertyIdErr := io.WriteUint8(8, (propertyId))
-    if _propertyIdErr != nil {
-        return errors.New("Error serializing 'propertyId' field " + _propertyIdErr.Error())
-    }
-
-    // Simple Field (numberOfElements)
-    numberOfElements := uint8(m.NumberOfElements)
-    _numberOfElementsErr := io.WriteUint8(4, (numberOfElements))
-    if _numberOfElementsErr != nil {
-        return errors.New("Error serializing 'numberOfElements' field " + _numberOfElementsErr.Error())
-    }
-
-    // Simple Field (startIndex)
-    startIndex := uint16(m.StartIndex)
-    _startIndexErr := io.WriteUint16(12, (startIndex))
-    if _startIndexErr != nil {
-        return errors.New("Error serializing 'startIndex' field " + _startIndexErr.Error())
-    }
-
-    // Simple Field (unknown)
-    unknown := uint16(m.Unknown)
-    _unknownErr := io.WriteUint16(16, (unknown))
-    if _unknownErr != nil {
-        return errors.New("Error serializing 'unknown' field " + _unknownErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIMPropReadCon) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "interfaceObjectType":
-                var data uint16
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.InterfaceObjectType = data
-            case "objectInstance":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.ObjectInstance = data
-            case "propertyId":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.PropertyId = data
-            case "numberOfElements":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.NumberOfElements = data
-            case "startIndex":
-                var data uint16
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.StartIndex = data
-            case "unknown":
-                var data uint16
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Unknown = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIMPropReadCon) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.InterfaceObjectType, xml.StartElement{Name: xml.Name{Local: "interfaceObjectType"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.ObjectInstance, xml.StartElement{Name: xml.Name{Local: "objectInstance"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.PropertyId, xml.StartElement{Name: xml.Name{Local: "propertyId"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.NumberOfElements, xml.StartElement{Name: xml.Name{Local: "numberOfElements"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.StartIndex, xml.StartElement{Name: xml.Name{Local: "startIndex"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Unknown, xml.StartElement{Name: xml.Name{Local: "unknown"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go
deleted file mode 100644
index 2a9a538..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go
+++ /dev/null
@@ -1,272 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIMPropReadReq struct {
-    InterfaceObjectType uint16
-    ObjectInstance uint8
-    PropertyId uint8
-    NumberOfElements uint8
-    StartIndex uint16
-    Parent *CEMI
-    ICEMIMPropReadReq
-}
-
-// The corresponding interface
-type ICEMIMPropReadReq interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIMPropReadReq) MessageCode() uint8 {
-    return 0xFC
-}
-
-
-func (m *CEMIMPropReadReq) InitializeParent(parent *CEMI) {
-}
-
-func NewCEMIMPropReadReq(interfaceObjectType uint16, objectInstance uint8, propertyId uint8, numberOfElements uint8, startIndex uint16, ) *CEMI {
-    child := &CEMIMPropReadReq{
-        InterfaceObjectType: interfaceObjectType,
-        ObjectInstance: objectInstance,
-        PropertyId: propertyId,
-        NumberOfElements: numberOfElements,
-        StartIndex: startIndex,
-        Parent: NewCEMI(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIMPropReadReq(structType interface{}) CEMIMPropReadReq {
-    castFunc := func(typ interface{}) CEMIMPropReadReq {
-        if casted, ok := typ.(CEMIMPropReadReq); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIMPropReadReq); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMI); ok {
-            return CastCEMIMPropReadReq(casted.Child)
-        }
-        if casted, ok := typ.(*CEMI); ok {
-            return CastCEMIMPropReadReq(casted.Child)
-        }
-        return CEMIMPropReadReq{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIMPropReadReq) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (interfaceObjectType)
-    lengthInBits += 16
-
-    // Simple field (objectInstance)
-    lengthInBits += 8
-
-    // Simple field (propertyId)
-    lengthInBits += 8
-
-    // Simple field (numberOfElements)
-    lengthInBits += 4
-
-    // Simple field (startIndex)
-    lengthInBits += 12
-
-    return lengthInBits
-}
-
-func (m *CEMIMPropReadReq) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIMPropReadReqParse(io *utils.ReadBuffer) (*CEMI, error) {
-
-    // Simple Field (interfaceObjectType)
-    interfaceObjectType, _interfaceObjectTypeErr := io.ReadUint16(16)
-    if _interfaceObjectTypeErr != nil {
-        return nil, errors.New("Error parsing 'interfaceObjectType' field " + _interfaceObjectTypeErr.Error())
-    }
-
-    // Simple Field (objectInstance)
-    objectInstance, _objectInstanceErr := io.ReadUint8(8)
-    if _objectInstanceErr != nil {
-        return nil, errors.New("Error parsing 'objectInstance' field " + _objectInstanceErr.Error())
-    }
-
-    // Simple Field (propertyId)
-    propertyId, _propertyIdErr := io.ReadUint8(8)
-    if _propertyIdErr != nil {
-        return nil, errors.New("Error parsing 'propertyId' field " + _propertyIdErr.Error())
-    }
-
-    // Simple Field (numberOfElements)
-    numberOfElements, _numberOfElementsErr := io.ReadUint8(4)
-    if _numberOfElementsErr != nil {
-        return nil, errors.New("Error parsing 'numberOfElements' field " + _numberOfElementsErr.Error())
-    }
-
-    // Simple Field (startIndex)
-    startIndex, _startIndexErr := io.ReadUint16(12)
-    if _startIndexErr != nil {
-        return nil, errors.New("Error parsing 'startIndex' field " + _startIndexErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &CEMIMPropReadReq{
-        InterfaceObjectType: interfaceObjectType,
-        ObjectInstance: objectInstance,
-        PropertyId: propertyId,
-        NumberOfElements: numberOfElements,
-        StartIndex: startIndex,
-        Parent: &CEMI{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIMPropReadReq) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (interfaceObjectType)
-    interfaceObjectType := uint16(m.InterfaceObjectType)
-    _interfaceObjectTypeErr := io.WriteUint16(16, (interfaceObjectType))
-    if _interfaceObjectTypeErr != nil {
-        return errors.New("Error serializing 'interfaceObjectType' field " + _interfaceObjectTypeErr.Error())
-    }
-
-    // Simple Field (objectInstance)
-    objectInstance := uint8(m.ObjectInstance)
-    _objectInstanceErr := io.WriteUint8(8, (objectInstance))
-    if _objectInstanceErr != nil {
-        return errors.New("Error serializing 'objectInstance' field " + _objectInstanceErr.Error())
-    }
-
-    // Simple Field (propertyId)
-    propertyId := uint8(m.PropertyId)
-    _propertyIdErr := io.WriteUint8(8, (propertyId))
-    if _propertyIdErr != nil {
-        return errors.New("Error serializing 'propertyId' field " + _propertyIdErr.Error())
-    }
-
-    // Simple Field (numberOfElements)
-    numberOfElements := uint8(m.NumberOfElements)
-    _numberOfElementsErr := io.WriteUint8(4, (numberOfElements))
-    if _numberOfElementsErr != nil {
-        return errors.New("Error serializing 'numberOfElements' field " + _numberOfElementsErr.Error())
-    }
-
-    // Simple Field (startIndex)
-    startIndex := uint16(m.StartIndex)
-    _startIndexErr := io.WriteUint16(12, (startIndex))
-    if _startIndexErr != nil {
-        return errors.New("Error serializing 'startIndex' field " + _startIndexErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIMPropReadReq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "interfaceObjectType":
-                var data uint16
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.InterfaceObjectType = data
-            case "objectInstance":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.ObjectInstance = data
-            case "propertyId":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.PropertyId = data
-            case "numberOfElements":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.NumberOfElements = data
-            case "startIndex":
-                var data uint16
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.StartIndex = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIMPropReadReq) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.InterfaceObjectType, xml.StartElement{Name: xml.Name{Local: "interfaceObjectType"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.ObjectInstance, xml.StartElement{Name: xml.Name{Local: "objectInstance"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.PropertyId, xml.StartElement{Name: xml.Name{Local: "propertyId"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.NumberOfElements, xml.StartElement{Name: xml.Name{Local: "numberOfElements"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.StartIndex, xml.StartElement{Name: xml.Name{Local: "startIndex"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go
deleted file mode 100644
index b73f22a..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIPollDataCon struct {
-    Parent *CEMI
-    ICEMIPollDataCon
-}
-
-// The corresponding interface
-type ICEMIPollDataCon interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIPollDataCon) MessageCode() uint8 {
-    return 0x25
-}
-
-
-func (m *CEMIPollDataCon) InitializeParent(parent *CEMI) {
-}
-
-func NewCEMIPollDataCon() *CEMI {
-    child := &CEMIPollDataCon{
-        Parent: NewCEMI(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIPollDataCon(structType interface{}) CEMIPollDataCon {
-    castFunc := func(typ interface{}) CEMIPollDataCon {
-        if casted, ok := typ.(CEMIPollDataCon); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIPollDataCon); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMI); ok {
-            return CastCEMIPollDataCon(casted.Child)
-        }
-        if casted, ok := typ.(*CEMI); ok {
-            return CastCEMIPollDataCon(casted.Child)
-        }
-        return CEMIPollDataCon{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIPollDataCon) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    return lengthInBits
-}
-
-func (m *CEMIPollDataCon) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIPollDataConParse(io *utils.ReadBuffer) (*CEMI, error) {
-
-    // Create a partially initialized instance
-    _child := &CEMIPollDataCon{
-        Parent: &CEMI{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIPollDataCon) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIPollDataCon) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIPollDataCon) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go
deleted file mode 100644
index da25812..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIPollDataReq struct {
-    Parent *CEMI
-    ICEMIPollDataReq
-}
-
-// The corresponding interface
-type ICEMIPollDataReq interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIPollDataReq) MessageCode() uint8 {
-    return 0x13
-}
-
-
-func (m *CEMIPollDataReq) InitializeParent(parent *CEMI) {
-}
-
-func NewCEMIPollDataReq() *CEMI {
-    child := &CEMIPollDataReq{
-        Parent: NewCEMI(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIPollDataReq(structType interface{}) CEMIPollDataReq {
-    castFunc := func(typ interface{}) CEMIPollDataReq {
-        if casted, ok := typ.(CEMIPollDataReq); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIPollDataReq); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMI); ok {
-            return CastCEMIPollDataReq(casted.Child)
-        }
-        if casted, ok := typ.(*CEMI); ok {
-            return CastCEMIPollDataReq(casted.Child)
-        }
-        return CEMIPollDataReq{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIPollDataReq) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    return lengthInBits
-}
-
-func (m *CEMIPollDataReq) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIPollDataReqParse(io *utils.ReadBuffer) (*CEMI, error) {
-
-    // Create a partially initialized instance
-    _child := &CEMIPollDataReq{
-        Parent: &CEMI{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIPollDataReq) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIPollDataReq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIPollDataReq) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go
deleted file mode 100644
index 552319c..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go
+++ /dev/null
@@ -1,78 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-type CEMIPriority uint8
-
-type ICEMIPriority interface {
-    Serialize(io utils.WriteBuffer) error
-}
-
-const(
-    CEMIPriority_SYSTEM CEMIPriority = 0x0
-    CEMIPriority_NORMAL CEMIPriority = 0x1
-    CEMIPriority_URGENT CEMIPriority = 0x2
-    CEMIPriority_LOW CEMIPriority = 0x3
-)
-
-func CEMIPriorityValueOf(value uint8) CEMIPriority {
-    switch value {
-        case 0x0:
-            return CEMIPriority_SYSTEM
-        case 0x1:
-            return CEMIPriority_NORMAL
-        case 0x2:
-            return CEMIPriority_URGENT
-        case 0x3:
-            return CEMIPriority_LOW
-    }
-    return 0
-}
-
-func CastCEMIPriority(structType interface{}) CEMIPriority {
-    castFunc := func(typ interface{}) CEMIPriority {
-        if sCEMIPriority, ok := typ.(CEMIPriority); ok {
-            return sCEMIPriority
-        }
-        return 0
-    }
-    return castFunc(structType)
-}
-
-func (m CEMIPriority) LengthInBits() uint16 {
-    return 2
-}
-
-func (m CEMIPriority) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIPriorityParse(io *utils.ReadBuffer) (CEMIPriority, error) {
-    // TODO: Implement ...
-    return 0, nil
-}
-
-func (e CEMIPriority) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
-}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go
deleted file mode 100644
index 4c7c7d0..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIRawCon struct {
-    Parent *CEMI
-    ICEMIRawCon
-}
-
-// The corresponding interface
-type ICEMIRawCon interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIRawCon) MessageCode() uint8 {
-    return 0x2F
-}
-
-
-func (m *CEMIRawCon) InitializeParent(parent *CEMI) {
-}
-
-func NewCEMIRawCon() *CEMI {
-    child := &CEMIRawCon{
-        Parent: NewCEMI(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIRawCon(structType interface{}) CEMIRawCon {
-    castFunc := func(typ interface{}) CEMIRawCon {
-        if casted, ok := typ.(CEMIRawCon); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIRawCon); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMI); ok {
-            return CastCEMIRawCon(casted.Child)
-        }
-        if casted, ok := typ.(*CEMI); ok {
-            return CastCEMIRawCon(casted.Child)
-        }
-        return CEMIRawCon{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIRawCon) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    return lengthInBits
-}
-
-func (m *CEMIRawCon) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIRawConParse(io *utils.ReadBuffer) (*CEMI, error) {
-
-    // Create a partially initialized instance
-    _child := &CEMIRawCon{
-        Parent: &CEMI{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIRawCon) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIRawCon) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIRawCon) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go
deleted file mode 100644
index ae2fb60..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIRawInd struct {
-    Parent *CEMI
-    ICEMIRawInd
-}
-
-// The corresponding interface
-type ICEMIRawInd interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIRawInd) MessageCode() uint8 {
-    return 0x2D
-}
-
-
-func (m *CEMIRawInd) InitializeParent(parent *CEMI) {
-}
-
-func NewCEMIRawInd() *CEMI {
-    child := &CEMIRawInd{
-        Parent: NewCEMI(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIRawInd(structType interface{}) CEMIRawInd {
-    castFunc := func(typ interface{}) CEMIRawInd {
-        if casted, ok := typ.(CEMIRawInd); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIRawInd); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMI); ok {
-            return CastCEMIRawInd(casted.Child)
-        }
-        if casted, ok := typ.(*CEMI); ok {
-            return CastCEMIRawInd(casted.Child)
-        }
-        return CEMIRawInd{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIRawInd) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    return lengthInBits
-}
-
-func (m *CEMIRawInd) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIRawIndParse(io *utils.ReadBuffer) (*CEMI, error) {
-
-    // Create a partially initialized instance
-    _child := &CEMIRawInd{
-        Parent: &CEMI{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIRawInd) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIRawInd) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIRawInd) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go
deleted file mode 100644
index 216a4bd..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type CEMIRawReq struct {
-    Parent *CEMI
-    ICEMIRawReq
-}
-
-// The corresponding interface
-type ICEMIRawReq interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *CEMIRawReq) MessageCode() uint8 {
-    return 0x10
-}
-
-
-func (m *CEMIRawReq) InitializeParent(parent *CEMI) {
-}
-
-func NewCEMIRawReq() *CEMI {
-    child := &CEMIRawReq{
-        Parent: NewCEMI(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastCEMIRawReq(structType interface{}) CEMIRawReq {
-    castFunc := func(typ interface{}) CEMIRawReq {
-        if casted, ok := typ.(CEMIRawReq); ok {
-            return casted
-        }
-        if casted, ok := typ.(*CEMIRawReq); ok {
-            return *casted
-        }
-        if casted, ok := typ.(CEMI); ok {
-            return CastCEMIRawReq(casted.Child)
-        }
-        if casted, ok := typ.(*CEMI); ok {
-            return CastCEMIRawReq(casted.Child)
-        }
-        return CEMIRawReq{}
-    }
-    return castFunc(structType)
-}
-
-func (m *CEMIRawReq) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    return lengthInBits
-}
-
-func (m *CEMIRawReq) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func CEMIRawReqParse(io *utils.ReadBuffer) (*CEMI, error) {
-
-    // Create a partially initialized instance
-    _child := &CEMIRawReq{
-        Parent: &CEMI{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *CEMIRawReq) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *CEMIRawReq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *CEMIRawReq) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
deleted file mode 100644
index 195d24b..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
+++ /dev/null
@@ -1,213 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type ConnectionRequest struct {
-    HpaiDiscoveryEndpoint *HPAIDiscoveryEndpoint
-    HpaiDataEndpoint *HPAIDataEndpoint
-    ConnectionRequestInformation *ConnectionRequestInformation
-    Parent *KNXNetIPMessage
-    IConnectionRequest
-}
-
-// The corresponding interface
-type IConnectionRequest interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *ConnectionRequest) MsgType() uint16 {
-    return 0x0205
-}
-
-
-func (m *ConnectionRequest) InitializeParent(parent *KNXNetIPMessage) {
-}
-
-func NewConnectionRequest(hpaiDiscoveryEndpoint *HPAIDiscoveryEndpoint, hpaiDataEndpoint *HPAIDataEndpoint, connectionRequestInformation *ConnectionRequestInformation, ) *KNXNetIPMessage {
-    child := &ConnectionRequest{
-        HpaiDiscoveryEndpoint: hpaiDiscoveryEndpoint,
-        HpaiDataEndpoint: hpaiDataEndpoint,
-        ConnectionRequestInformation: connectionRequestInformation,
-        Parent: NewKNXNetIPMessage(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastConnectionRequest(structType interface{}) ConnectionRequest {
-    castFunc := func(typ interface{}) ConnectionRequest {
-        if casted, ok := typ.(ConnectionRequest); ok {
-            return casted
-        }
-        if casted, ok := typ.(*ConnectionRequest); ok {
-            return *casted
-        }
-        if casted, ok := typ.(KNXNetIPMessage); ok {
-            return CastConnectionRequest(casted.Child)
-        }
-        if casted, ok := typ.(*KNXNetIPMessage); ok {
-            return CastConnectionRequest(casted.Child)
-        }
-        return ConnectionRequest{}
-    }
-    return castFunc(structType)
-}
-
-func (m *ConnectionRequest) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (hpaiDiscoveryEndpoint)
-    lengthInBits += m.HpaiDiscoveryEndpoint.LengthInBits()
-
-    // Simple field (hpaiDataEndpoint)
-    lengthInBits += m.HpaiDataEndpoint.LengthInBits()
-
-    // Simple field (connectionRequestInformation)
-    lengthInBits += m.ConnectionRequestInformation.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *ConnectionRequest) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func ConnectionRequestParse(io *utils.ReadBuffer) (*KNXNetIPMessage, error) {
-
-    // Simple Field (hpaiDiscoveryEndpoint)
-    hpaiDiscoveryEndpoint, _hpaiDiscoveryEndpointErr := HPAIDiscoveryEndpointParse(io)
-    if _hpaiDiscoveryEndpointErr != nil {
-        return nil, errors.New("Error parsing 'hpaiDiscoveryEndpoint' field " + _hpaiDiscoveryEndpointErr.Error())
-    }
-
-    // Simple Field (hpaiDataEndpoint)
-    hpaiDataEndpoint, _hpaiDataEndpointErr := HPAIDataEndpointParse(io)
-    if _hpaiDataEndpointErr != nil {
-        return nil, errors.New("Error parsing 'hpaiDataEndpoint' field " + _hpaiDataEndpointErr.Error())
-    }
-
-    // Simple Field (connectionRequestInformation)
-    connectionRequestInformation, _connectionRequestInformationErr := ConnectionRequestInformationParse(io)
-    if _connectionRequestInformationErr != nil {
-        return nil, errors.New("Error parsing 'connectionRequestInformation' field " + _connectionRequestInformationErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &ConnectionRequest{
-        HpaiDiscoveryEndpoint: hpaiDiscoveryEndpoint,
-        HpaiDataEndpoint: hpaiDataEndpoint,
-        ConnectionRequestInformation: connectionRequestInformation,
-        Parent: &KNXNetIPMessage{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *ConnectionRequest) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (hpaiDiscoveryEndpoint)
-    _hpaiDiscoveryEndpointErr := m.HpaiDiscoveryEndpoint.Serialize(io)
-    if _hpaiDiscoveryEndpointErr != nil {
-        return errors.New("Error serializing 'hpaiDiscoveryEndpoint' field " + _hpaiDiscoveryEndpointErr.Error())
-    }
-
-    // Simple Field (hpaiDataEndpoint)
-    _hpaiDataEndpointErr := m.HpaiDataEndpoint.Serialize(io)
-    if _hpaiDataEndpointErr != nil {
-        return errors.New("Error serializing 'hpaiDataEndpoint' field " + _hpaiDataEndpointErr.Error())
-    }
-
-    // Simple Field (connectionRequestInformation)
-    _connectionRequestInformationErr := m.ConnectionRequestInformation.Serialize(io)
-    if _connectionRequestInformationErr != nil {
-        return errors.New("Error serializing 'connectionRequestInformation' field " + _connectionRequestInformationErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *ConnectionRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "hpaiDiscoveryEndpoint":
-                var data *HPAIDiscoveryEndpoint
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.HpaiDiscoveryEndpoint = data
-            case "hpaiDataEndpoint":
-                var data *HPAIDataEndpoint
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.HpaiDataEndpoint = data
-            case "connectionRequestInformation":
-                var dt *ConnectionRequestInformation
-                if err := d.DecodeElement(&dt, &tok); err != nil {
-                    return err
-                }
-                m.ConnectionRequestInformation = dt
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *ConnectionRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.HpaiDiscoveryEndpoint, xml.StartElement{Name: xml.Name{Local: "hpaiDiscoveryEndpoint"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.HpaiDataEndpoint, xml.StartElement{Name: xml.Name{Local: "hpaiDataEndpoint"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.ConnectionRequestInformation, xml.StartElement{Name: xml.Name{Local: "connectionRequestInformation"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
deleted file mode 100644
index bc8132c..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
+++ /dev/null
@@ -1,218 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-    "reflect"
-    "strings"
-)
-
-// The data-structure of this message
-type ConnectionRequestInformation struct {
-    Child IConnectionRequestInformationChild
-    IConnectionRequestInformation
-    IConnectionRequestInformationParent
-}
-
-// The corresponding interface
-type IConnectionRequestInformation interface {
-    ConnectionType() uint8
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-type IConnectionRequestInformationParent interface {
-    SerializeParent(io utils.WriteBuffer, child IConnectionRequestInformation, serializeChildFunction func() error) error
-}
-
-type IConnectionRequestInformationChild interface {
-    Serialize(io utils.WriteBuffer) error
-    InitializeParent(parent *ConnectionRequestInformation)
-    IConnectionRequestInformation
-}
-
-func NewConnectionRequestInformation() *ConnectionRequestInformation {
-    return &ConnectionRequestInformation{}
-}
-
-func CastConnectionRequestInformation(structType interface{}) ConnectionRequestInformation {
-    castFunc := func(typ interface{}) ConnectionRequestInformation {
-        if casted, ok := typ.(ConnectionRequestInformation); ok {
-            return casted
-        }
-        if casted, ok := typ.(*ConnectionRequestInformation); ok {
-            return *casted
-        }
-        return ConnectionRequestInformation{}
-    }
-    return castFunc(structType)
-}
-
-func (m *ConnectionRequestInformation) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Implicit Field (structureLength)
-    lengthInBits += 8
-
-    // Discriminator Field (connectionType)
-    lengthInBits += 8
-
-    // Length of sub-type elements will be added by sub-type...
-    lengthInBits += m.Child.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *ConnectionRequestInformation) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func ConnectionRequestInformationParse(io *utils.ReadBuffer) (*ConnectionRequestInformation, error) {
-
-    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    _, _structureLengthErr := io.ReadUint8(8)
-    if _structureLengthErr != nil {
-        return nil, errors.New("Error parsing 'structureLength' field " + _structureLengthErr.Error())
-    }
-
-    // Discriminator Field (connectionType) (Used as input to a switch field)
-    connectionType, _connectionTypeErr := io.ReadUint8(8)
-    if _connectionTypeErr != nil {
-        return nil, errors.New("Error parsing 'connectionType' field " + _connectionTypeErr.Error())
-    }
-
-    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-    var _parent *ConnectionRequestInformation
-    var typeSwitchError error
-    switch {
-    case connectionType == 0x03:
-        _parent, typeSwitchError = ConnectionRequestInformationDeviceManagementParse(io)
-    case connectionType == 0x04:
-        _parent, typeSwitchError = ConnectionRequestInformationTunnelConnectionParse(io)
-    }
-    if typeSwitchError != nil {
-        return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
-    }
-
-    // Finish initializing
-    _parent.Child.InitializeParent(_parent)
-    return _parent, nil
-}
-
-func (m *ConnectionRequestInformation) Serialize(io utils.WriteBuffer) error {
-    return m.Child.Serialize(io)
-}
-
-func (m *ConnectionRequestInformation) SerializeParent(io utils.WriteBuffer, child IConnectionRequestInformation, serializeChildFunction func() error) error {
-
-    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    structureLength := uint8(uint8(m.LengthInBytes()))
-    _structureLengthErr := io.WriteUint8(8, (structureLength))
-    if _structureLengthErr != nil {
-        return errors.New("Error serializing 'structureLength' field " + _structureLengthErr.Error())
-    }
-
-    // Discriminator Field (connectionType) (Used as input to a switch field)
-    connectionType := uint8(child.ConnectionType())
-    _connectionTypeErr := io.WriteUint8(8, (connectionType))
-    if _connectionTypeErr != nil {
-        return errors.New("Error serializing 'connectionType' field " + _connectionTypeErr.Error())
-    }
-
-    // Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
-    _typeSwitchErr := serializeChildFunction()
-    if _typeSwitchErr != nil {
-        return errors.New("Error serializing sub-type field " + _typeSwitchErr.Error())
-    }
-
-    return nil
-}
-
-func (m *ConnectionRequestInformation) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    for {
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-                default:
-                    switch start.Attr[0].Value {
-                        case "org.apache.plc4x.java.knxnetip.readwrite.ConnectionRequestInformationDeviceManagement":
-                            var dt *ConnectionRequestInformationDeviceManagement
-                            if m.Child != nil {
-                                dt = m.Child.(*ConnectionRequestInformationDeviceManagement)
-                            }
-                            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.knxnetip.readwrite.ConnectionRequestInformationTunnelConnection":
-                            var dt *ConnectionRequestInformationTunnelConnection
-                            if m.Child != nil {
-                                dt = m.Child.(*ConnectionRequestInformationTunnelConnection)
-                            }
-                            if err := d.DecodeElement(&dt, &tok); err != nil {
-                                return err
-                            }
-                            if m.Child == nil {
-                                dt.Parent = m
-                                m.Child = dt
-                            }
-                    }
-            }
-        }
-    }
-}
-
-func (m *ConnectionRequestInformation) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    className := reflect.TypeOf(m.Child).String()
-    className = "org.apache.plc4x.java.knxnetip.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.New("child is not castable to Marshaler")
-    }
-    marshaller.MarshalXML(e, start)
-    if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
deleted file mode 100644
index 3f8fce4..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type ConnectionRequestInformationDeviceManagement struct {
-    Parent *ConnectionRequestInformation
-    IConnectionRequestInformationDeviceManagement
-}
-
-// The corresponding interface
-type IConnectionRequestInformationDeviceManagement interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *ConnectionRequestInformationDeviceManagement) ConnectionType() uint8 {
-    return 0x03
-}
-
-
-func (m *ConnectionRequestInformationDeviceManagement) InitializeParent(parent *ConnectionRequestInformation) {
-}
-
-func NewConnectionRequestInformationDeviceManagement() *ConnectionRequestInformation {
-    child := &ConnectionRequestInformationDeviceManagement{
-        Parent: NewConnectionRequestInformation(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastConnectionRequestInformationDeviceManagement(structType interface{}) ConnectionRequestInformationDeviceManagement {
-    castFunc := func(typ interface{}) ConnectionRequestInformationDeviceManagement {
-        if casted, ok := typ.(ConnectionRequestInformationDeviceManagement); ok {
-            return casted
-        }
-        if casted, ok := typ.(*ConnectionRequestInformationDeviceManagement); ok {
-            return *casted
-        }
-        if casted, ok := typ.(ConnectionRequestInformation); ok {
-            return CastConnectionRequestInformationDeviceManagement(casted.Child)
-        }
-        if casted, ok := typ.(*ConnectionRequestInformation); ok {
-            return CastConnectionRequestInformationDeviceManagement(casted.Child)
-        }
-        return ConnectionRequestInformationDeviceManagement{}
-    }
-    return castFunc(structType)
-}
-
-func (m *ConnectionRequestInformationDeviceManagement) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    return lengthInBits
-}
-
-func (m *ConnectionRequestInformationDeviceManagement) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func ConnectionRequestInformationDeviceManagementParse(io *utils.ReadBuffer) (*ConnectionRequestInformation, error) {
-
-    // Create a partially initialized instance
-    _child := &ConnectionRequestInformationDeviceManagement{
-        Parent: &ConnectionRequestInformation{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *ConnectionRequestInformationDeviceManagement) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *ConnectionRequestInformationDeviceManagement) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *ConnectionRequestInformationDeviceManagement) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go
deleted file mode 100644
index 8240343..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go
+++ /dev/null
@@ -1,186 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type ConnectionRequestInformationTunnelConnection struct {
-    KnxLayer KnxLayer
-    Parent *ConnectionRequestInformation
-    IConnectionRequestInformationTunnelConnection
-}
-
-// The corresponding interface
-type IConnectionRequestInformationTunnelConnection interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *ConnectionRequestInformationTunnelConnection) ConnectionType() uint8 {
-    return 0x04
-}
-
-
-func (m *ConnectionRequestInformationTunnelConnection) InitializeParent(parent *ConnectionRequestInformation) {
-}
-
-func NewConnectionRequestInformationTunnelConnection(knxLayer KnxLayer, ) *ConnectionRequestInformation {
-    child := &ConnectionRequestInformationTunnelConnection{
-        KnxLayer: knxLayer,
-        Parent: NewConnectionRequestInformation(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastConnectionRequestInformationTunnelConnection(structType interface{}) ConnectionRequestInformationTunnelConnection {
-    castFunc := func(typ interface{}) ConnectionRequestInformationTunnelConnection {
-        if casted, ok := typ.(ConnectionRequestInformationTunnelConnection); ok {
-            return casted
-        }
-        if casted, ok := typ.(*ConnectionRequestInformationTunnelConnection); ok {
-            return *casted
-        }
-        if casted, ok := typ.(ConnectionRequestInformation); ok {
-            return CastConnectionRequestInformationTunnelConnection(casted.Child)
-        }
-        if casted, ok := typ.(*ConnectionRequestInformation); ok {
-            return CastConnectionRequestInformationTunnelConnection(casted.Child)
-        }
-        return ConnectionRequestInformationTunnelConnection{}
-    }
-    return castFunc(structType)
-}
-
-func (m *ConnectionRequestInformationTunnelConnection) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Enum Field (knxLayer)
-    lengthInBits += 8
-
-    // Reserved Field (reserved)
-    lengthInBits += 8
-
-    return lengthInBits
-}
-
-func (m *ConnectionRequestInformationTunnelConnection) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func ConnectionRequestInformationTunnelConnectionParse(io *utils.ReadBuffer) (*ConnectionRequestInformation, error) {
-
-    // Enum field (knxLayer)
-    knxLayer, _knxLayerErr := KnxLayerParse(io)
-    if _knxLayerErr != nil {
-        return nil, errors.New("Error parsing 'knxLayer' field " + _knxLayerErr.Error())
-    }
-
-    // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
-    {
-        reserved, _err := io.ReadUint8(8)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'reserved' field " + _err.Error())
-        }
-        if reserved != uint8(0x00) {
-            log.WithFields(log.Fields{
-                "expected value": uint8(0x00),
-                "got value": reserved,
-            }).Info("Got unexpected response.")
-        }
-    }
-
-    // Create a partially initialized instance
-    _child := &ConnectionRequestInformationTunnelConnection{
-        KnxLayer: knxLayer,
-        Parent: &ConnectionRequestInformation{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *ConnectionRequestInformationTunnelConnection) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Enum field (knxLayer)
-    knxLayer := CastKnxLayer(m.KnxLayer)
-    _knxLayerErr := knxLayer.Serialize(io)
-    if _knxLayerErr != nil {
-        return errors.New("Error serializing 'knxLayer' field " + _knxLayerErr.Error())
-    }
-
-    // Reserved Field (reserved)
-    {
-        _err := io.WriteUint8(8, uint8(0x00))
-        if _err != nil {
-            return errors.New("Error serializing 'reserved' field " + _err.Error())
-        }
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *ConnectionRequestInformationTunnelConnection) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "knxLayer":
-                var data KnxLayer
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.KnxLayer = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *ConnectionRequestInformationTunnelConnection) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.KnxLayer, xml.StartElement{Name: xml.Name{Local: "knxLayer"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
deleted file mode 100644
index d486d64..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
+++ /dev/null
@@ -1,262 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type ConnectionResponse struct {
-    CommunicationChannelId uint8
-    Status Status
-    HpaiDataEndpoint *HPAIDataEndpoint
-    ConnectionResponseDataBlock *ConnectionResponseDataBlock
-    Parent *KNXNetIPMessage
-    IConnectionResponse
-}
-
-// The corresponding interface
-type IConnectionResponse interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *ConnectionResponse) MsgType() uint16 {
-    return 0x0206
-}
-
-
-func (m *ConnectionResponse) InitializeParent(parent *KNXNetIPMessage) {
-}
-
-func NewConnectionResponse(communicationChannelId uint8, status Status, hpaiDataEndpoint *HPAIDataEndpoint, connectionResponseDataBlock *ConnectionResponseDataBlock, ) *KNXNetIPMessage {
-    child := &ConnectionResponse{
-        CommunicationChannelId: communicationChannelId,
-        Status: status,
-        HpaiDataEndpoint: hpaiDataEndpoint,
-        ConnectionResponseDataBlock: connectionResponseDataBlock,
-        Parent: NewKNXNetIPMessage(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastConnectionResponse(structType interface{}) ConnectionResponse {
-    castFunc := func(typ interface{}) ConnectionResponse {
-        if casted, ok := typ.(ConnectionResponse); ok {
-            return casted
-        }
-        if casted, ok := typ.(*ConnectionResponse); ok {
-            return *casted
-        }
-        if casted, ok := typ.(KNXNetIPMessage); ok {
-            return CastConnectionResponse(casted.Child)
-        }
-        if casted, ok := typ.(*KNXNetIPMessage); ok {
-            return CastConnectionResponse(casted.Child)
-        }
-        return ConnectionResponse{}
-    }
-    return castFunc(structType)
-}
-
-func (m *ConnectionResponse) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (communicationChannelId)
-    lengthInBits += 8
-
-    // Enum Field (status)
-    lengthInBits += 8
-
-    // Optional Field (hpaiDataEndpoint)
-    if m.HpaiDataEndpoint != nil {
-        lengthInBits += (*m.HpaiDataEndpoint).LengthInBits()
-    }
-
-    // Optional Field (connectionResponseDataBlock)
-    if m.ConnectionResponseDataBlock != nil {
-        lengthInBits += (*m.ConnectionResponseDataBlock).LengthInBits()
-    }
-
-    return lengthInBits
-}
-
-func (m *ConnectionResponse) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func ConnectionResponseParse(io *utils.ReadBuffer) (*KNXNetIPMessage, error) {
-
-    // Simple Field (communicationChannelId)
-    communicationChannelId, _communicationChannelIdErr := io.ReadUint8(8)
-    if _communicationChannelIdErr != nil {
-        return nil, errors.New("Error parsing 'communicationChannelId' field " + _communicationChannelIdErr.Error())
-    }
-
-    // Enum field (status)
-    status, _statusErr := StatusParse(io)
-    if _statusErr != nil {
-        return nil, errors.New("Error parsing 'status' field " + _statusErr.Error())
-    }
-
-    // Optional Field (hpaiDataEndpoint) (Can be skipped, if a given expression evaluates to false)
-    var hpaiDataEndpoint *HPAIDataEndpoint = nil
-    if bool((status) == (Status_NO_ERROR)) {
-        _message, _err := HPAIDataEndpointParse(io)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'hpaiDataEndpoint' field " + _err.Error())
-        }
-        hpaiDataEndpoint = _message
-    }
-
-    // Optional Field (connectionResponseDataBlock) (Can be skipped, if a given expression evaluates to false)
-    var connectionResponseDataBlock *ConnectionResponseDataBlock = nil
-    if bool((status) == (Status_NO_ERROR)) {
-        _message, _err := ConnectionResponseDataBlockParse(io)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'connectionResponseDataBlock' field " + _err.Error())
-        }
-        connectionResponseDataBlock = _message
-    }
-
-    // Create a partially initialized instance
-    _child := &ConnectionResponse{
-        CommunicationChannelId: communicationChannelId,
-        Status: status,
-        HpaiDataEndpoint: hpaiDataEndpoint,
-        ConnectionResponseDataBlock: connectionResponseDataBlock,
-        Parent: &KNXNetIPMessage{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *ConnectionResponse) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (communicationChannelId)
-    communicationChannelId := uint8(m.CommunicationChannelId)
-    _communicationChannelIdErr := io.WriteUint8(8, (communicationChannelId))
-    if _communicationChannelIdErr != nil {
-        return errors.New("Error serializing 'communicationChannelId' field " + _communicationChannelIdErr.Error())
-    }
-
-    // Enum field (status)
-    status := CastStatus(m.Status)
-    _statusErr := status.Serialize(io)
-    if _statusErr != nil {
-        return errors.New("Error serializing 'status' field " + _statusErr.Error())
-    }
-
-    // Optional Field (hpaiDataEndpoint) (Can be skipped, if the value is null)
-    var hpaiDataEndpoint *HPAIDataEndpoint = nil
-    if m.HpaiDataEndpoint != nil {
-        hpaiDataEndpoint = m.HpaiDataEndpoint
-        _hpaiDataEndpointErr := hpaiDataEndpoint.Serialize(io)
-        if _hpaiDataEndpointErr != nil {
-            return errors.New("Error serializing 'hpaiDataEndpoint' field " + _hpaiDataEndpointErr.Error())
-        }
-    }
-
-    // Optional Field (connectionResponseDataBlock) (Can be skipped, if the value is null)
-    var connectionResponseDataBlock *ConnectionResponseDataBlock = nil
-    if m.ConnectionResponseDataBlock != nil {
-        connectionResponseDataBlock = m.ConnectionResponseDataBlock
-        _connectionResponseDataBlockErr := connectionResponseDataBlock.Serialize(io)
-        if _connectionResponseDataBlockErr != nil {
-            return errors.New("Error serializing 'connectionResponseDataBlock' field " + _connectionResponseDataBlockErr.Error())
-        }
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *ConnectionResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "communicationChannelId":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.CommunicationChannelId = data
-            case "status":
-                var data Status
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Status = data
-            case "hpaiDataEndpoint":
-                var data *HPAIDataEndpoint
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.HpaiDataEndpoint = data
-            case "connectionResponseDataBlock":
-                var dt *ConnectionResponseDataBlock
-                if err := d.DecodeElement(&dt, &tok); err != nil {
-                    return err
-                }
-                m.ConnectionResponseDataBlock = dt
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *ConnectionResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.CommunicationChannelId, xml.StartElement{Name: xml.Name{Local: "communicationChannelId"}}); 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.HpaiDataEndpoint, xml.StartElement{Name: xml.Name{Local: "hpaiDataEndpoint"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.ConnectionResponseDataBlock, xml.StartElement{Name: xml.Name{Local: "connectionResponseDataBlock"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
deleted file mode 100644
index 1b2f2d3..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
+++ /dev/null
@@ -1,218 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-    "reflect"
-    "strings"
-)
-
-// The data-structure of this message
-type ConnectionResponseDataBlock struct {
-    Child IConnectionResponseDataBlockChild
-    IConnectionResponseDataBlock
-    IConnectionResponseDataBlockParent
-}
-
-// The corresponding interface
-type IConnectionResponseDataBlock interface {
-    ConnectionType() uint8
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-type IConnectionResponseDataBlockParent interface {
-    SerializeParent(io utils.WriteBuffer, child IConnectionResponseDataBlock, serializeChildFunction func() error) error
-}
-
-type IConnectionResponseDataBlockChild interface {
-    Serialize(io utils.WriteBuffer) error
-    InitializeParent(parent *ConnectionResponseDataBlock)
-    IConnectionResponseDataBlock
-}
-
-func NewConnectionResponseDataBlock() *ConnectionResponseDataBlock {
-    return &ConnectionResponseDataBlock{}
-}
-
-func CastConnectionResponseDataBlock(structType interface{}) ConnectionResponseDataBlock {
-    castFunc := func(typ interface{}) ConnectionResponseDataBlock {
-        if casted, ok := typ.(ConnectionResponseDataBlock); ok {
-            return casted
-        }
-        if casted, ok := typ.(*ConnectionResponseDataBlock); ok {
-            return *casted
-        }
-        return ConnectionResponseDataBlock{}
-    }
-    return castFunc(structType)
-}
-
-func (m *ConnectionResponseDataBlock) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Implicit Field (structureLength)
-    lengthInBits += 8
-
-    // Discriminator Field (connectionType)
-    lengthInBits += 8
-
-    // Length of sub-type elements will be added by sub-type...
-    lengthInBits += m.Child.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *ConnectionResponseDataBlock) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func ConnectionResponseDataBlockParse(io *utils.ReadBuffer) (*ConnectionResponseDataBlock, error) {
-
-    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    _, _structureLengthErr := io.ReadUint8(8)
-    if _structureLengthErr != nil {
-        return nil, errors.New("Error parsing 'structureLength' field " + _structureLengthErr.Error())
-    }
-
-    // Discriminator Field (connectionType) (Used as input to a switch field)
-    connectionType, _connectionTypeErr := io.ReadUint8(8)
-    if _connectionTypeErr != nil {
-        return nil, errors.New("Error parsing 'connectionType' field " + _connectionTypeErr.Error())
-    }
-
-    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-    var _parent *ConnectionResponseDataBlock
-    var typeSwitchError error
-    switch {
-    case connectionType == 0x03:
-        _parent, typeSwitchError = ConnectionResponseDataBlockDeviceManagementParse(io)
-    case connectionType == 0x04:
-        _parent, typeSwitchError = ConnectionResponseDataBlockTunnelConnectionParse(io)
-    }
-    if typeSwitchError != nil {
-        return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
-    }
-
-    // Finish initializing
-    _parent.Child.InitializeParent(_parent)
-    return _parent, nil
-}
-
-func (m *ConnectionResponseDataBlock) Serialize(io utils.WriteBuffer) error {
-    return m.Child.Serialize(io)
-}
-
-func (m *ConnectionResponseDataBlock) SerializeParent(io utils.WriteBuffer, child IConnectionResponseDataBlock, serializeChildFunction func() error) error {
-
-    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    structureLength := uint8(uint8(m.LengthInBytes()))
-    _structureLengthErr := io.WriteUint8(8, (structureLength))
-    if _structureLengthErr != nil {
-        return errors.New("Error serializing 'structureLength' field " + _structureLengthErr.Error())
-    }
-
-    // Discriminator Field (connectionType) (Used as input to a switch field)
-    connectionType := uint8(child.ConnectionType())
-    _connectionTypeErr := io.WriteUint8(8, (connectionType))
-    if _connectionTypeErr != nil {
-        return errors.New("Error serializing 'connectionType' field " + _connectionTypeErr.Error())
-    }
-
-    // Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
-    _typeSwitchErr := serializeChildFunction()
-    if _typeSwitchErr != nil {
-        return errors.New("Error serializing sub-type field " + _typeSwitchErr.Error())
-    }
-
-    return nil
-}
-
-func (m *ConnectionResponseDataBlock) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    for {
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-                default:
-                    switch start.Attr[0].Value {
-                        case "org.apache.plc4x.java.knxnetip.readwrite.ConnectionResponseDataBlockDeviceManagement":
-                            var dt *ConnectionResponseDataBlockDeviceManagement
-                            if m.Child != nil {
-                                dt = m.Child.(*ConnectionResponseDataBlockDeviceManagement)
-                            }
-                            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.knxnetip.readwrite.ConnectionResponseDataBlockTunnelConnection":
-                            var dt *ConnectionResponseDataBlockTunnelConnection
-                            if m.Child != nil {
-                                dt = m.Child.(*ConnectionResponseDataBlockTunnelConnection)
-                            }
-                            if err := d.DecodeElement(&dt, &tok); err != nil {
-                                return err
-                            }
-                            if m.Child == nil {
-                                dt.Parent = m
-                                m.Child = dt
-                            }
-                    }
-            }
-        }
-    }
-}
-
-func (m *ConnectionResponseDataBlock) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    className := reflect.TypeOf(m.Child).String()
-    className = "org.apache.plc4x.java.knxnetip.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.New("child is not castable to Marshaler")
-    }
-    marshaller.MarshalXML(e, start)
-    if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go
deleted file mode 100644
index 2549d4c..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type ConnectionResponseDataBlockDeviceManagement struct {
-    Parent *ConnectionResponseDataBlock
-    IConnectionResponseDataBlockDeviceManagement
-}
-
-// The corresponding interface
-type IConnectionResponseDataBlockDeviceManagement interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *ConnectionResponseDataBlockDeviceManagement) ConnectionType() uint8 {
-    return 0x03
-}
-
-
-func (m *ConnectionResponseDataBlockDeviceManagement) InitializeParent(parent *ConnectionResponseDataBlock) {
-}
-
-func NewConnectionResponseDataBlockDeviceManagement() *ConnectionResponseDataBlock {
-    child := &ConnectionResponseDataBlockDeviceManagement{
-        Parent: NewConnectionResponseDataBlock(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastConnectionResponseDataBlockDeviceManagement(structType interface{}) ConnectionResponseDataBlockDeviceManagement {
-    castFunc := func(typ interface{}) ConnectionResponseDataBlockDeviceManagement {
-        if casted, ok := typ.(ConnectionResponseDataBlockDeviceManagement); ok {
-            return casted
-        }
-        if casted, ok := typ.(*ConnectionResponseDataBlockDeviceManagement); ok {
-            return *casted
-        }
-        if casted, ok := typ.(ConnectionResponseDataBlock); ok {
-            return CastConnectionResponseDataBlockDeviceManagement(casted.Child)
-        }
-        if casted, ok := typ.(*ConnectionResponseDataBlock); ok {
-            return CastConnectionResponseDataBlockDeviceManagement(casted.Child)
-        }
-        return ConnectionResponseDataBlockDeviceManagement{}
-    }
-    return castFunc(structType)
-}
-
-func (m *ConnectionResponseDataBlockDeviceManagement) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    return lengthInBits
-}
-
-func (m *ConnectionResponseDataBlockDeviceManagement) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func ConnectionResponseDataBlockDeviceManagementParse(io *utils.ReadBuffer) (*ConnectionResponseDataBlock, error) {
-
-    // Create a partially initialized instance
-    _child := &ConnectionResponseDataBlockDeviceManagement{
-        Parent: &ConnectionResponseDataBlock{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *ConnectionResponseDataBlockDeviceManagement) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *ConnectionResponseDataBlockDeviceManagement) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *ConnectionResponseDataBlockDeviceManagement) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go
deleted file mode 100644
index 082b349..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go
+++ /dev/null
@@ -1,159 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type ConnectionResponseDataBlockTunnelConnection struct {
-    KnxAddress *KNXAddress
-    Parent *ConnectionResponseDataBlock
-    IConnectionResponseDataBlockTunnelConnection
-}
-
-// The corresponding interface
-type IConnectionResponseDataBlockTunnelConnection interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *ConnectionResponseDataBlockTunnelConnection) ConnectionType() uint8 {
-    return 0x04
-}
-
-
-func (m *ConnectionResponseDataBlockTunnelConnection) InitializeParent(parent *ConnectionResponseDataBlock) {
-}
-
-func NewConnectionResponseDataBlockTunnelConnection(knxAddress *KNXAddress, ) *ConnectionResponseDataBlock {
-    child := &ConnectionResponseDataBlockTunnelConnection{
-        KnxAddress: knxAddress,
-        Parent: NewConnectionResponseDataBlock(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastConnectionResponseDataBlockTunnelConnection(structType interface{}) ConnectionResponseDataBlockTunnelConnection {
-    castFunc := func(typ interface{}) ConnectionResponseDataBlockTunnelConnection {
-        if casted, ok := typ.(ConnectionResponseDataBlockTunnelConnection); ok {
-            return casted
-        }
-        if casted, ok := typ.(*ConnectionResponseDataBlockTunnelConnection); ok {
-            return *casted
-        }
-        if casted, ok := typ.(ConnectionResponseDataBlock); ok {
-            return CastConnectionResponseDataBlockTunnelConnection(casted.Child)
-        }
-        if casted, ok := typ.(*ConnectionResponseDataBlock); ok {
-            return CastConnectionResponseDataBlockTunnelConnection(casted.Child)
-        }
-        return ConnectionResponseDataBlockTunnelConnection{}
-    }
-    return castFunc(structType)
-}
-
-func (m *ConnectionResponseDataBlockTunnelConnection) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (knxAddress)
-    lengthInBits += m.KnxAddress.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *ConnectionResponseDataBlockTunnelConnection) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func ConnectionResponseDataBlockTunnelConnectionParse(io *utils.ReadBuffer) (*ConnectionResponseDataBlock, error) {
-
-    // Simple Field (knxAddress)
-    knxAddress, _knxAddressErr := KNXAddressParse(io)
-    if _knxAddressErr != nil {
-        return nil, errors.New("Error parsing 'knxAddress' field " + _knxAddressErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &ConnectionResponseDataBlockTunnelConnection{
-        KnxAddress: knxAddress,
-        Parent: &ConnectionResponseDataBlock{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *ConnectionResponseDataBlockTunnelConnection) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (knxAddress)
-    _knxAddressErr := m.KnxAddress.Serialize(io)
-    if _knxAddressErr != nil {
-        return errors.New("Error serializing 'knxAddress' field " + _knxAddressErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *ConnectionResponseDataBlockTunnelConnection) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "knxAddress":
-                var data *KNXAddress
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.KnxAddress = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *ConnectionResponseDataBlockTunnelConnection) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.KnxAddress, xml.StartElement{Name: xml.Name{Local: "knxAddress"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go
deleted file mode 100644
index 75fbbbd..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go
+++ /dev/null
@@ -1,213 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type ConnectionStateRequest struct {
-    CommunicationChannelId uint8
-    HpaiControlEndpoint *HPAIControlEndpoint
-    Parent *KNXNetIPMessage
-    IConnectionStateRequest
-}
-
-// The corresponding interface
-type IConnectionStateRequest interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *ConnectionStateRequest) MsgType() uint16 {
-    return 0x0207
-}
-
-
-func (m *ConnectionStateRequest) InitializeParent(parent *KNXNetIPMessage) {
-}
-
-func NewConnectionStateRequest(communicationChannelId uint8, hpaiControlEndpoint *HPAIControlEndpoint, ) *KNXNetIPMessage {
-    child := &ConnectionStateRequest{
-        CommunicationChannelId: communicationChannelId,
-        HpaiControlEndpoint: hpaiControlEndpoint,
-        Parent: NewKNXNetIPMessage(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastConnectionStateRequest(structType interface{}) ConnectionStateRequest {
-    castFunc := func(typ interface{}) ConnectionStateRequest {
-        if casted, ok := typ.(ConnectionStateRequest); ok {
-            return casted
-        }
-        if casted, ok := typ.(*ConnectionStateRequest); ok {
-            return *casted
-        }
-        if casted, ok := typ.(KNXNetIPMessage); ok {
-            return CastConnectionStateRequest(casted.Child)
-        }
-        if casted, ok := typ.(*KNXNetIPMessage); ok {
-            return CastConnectionStateRequest(casted.Child)
-        }
-        return ConnectionStateRequest{}
-    }
-    return castFunc(structType)
-}
-
-func (m *ConnectionStateRequest) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (communicationChannelId)
-    lengthInBits += 8
-
-    // Reserved Field (reserved)
-    lengthInBits += 8
-
-    // Simple field (hpaiControlEndpoint)
-    lengthInBits += m.HpaiControlEndpoint.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *ConnectionStateRequest) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func ConnectionStateRequestParse(io *utils.ReadBuffer) (*KNXNetIPMessage, error) {
-
-    // Simple Field (communicationChannelId)
-    communicationChannelId, _communicationChannelIdErr := io.ReadUint8(8)
-    if _communicationChannelIdErr != nil {
-        return nil, errors.New("Error parsing 'communicationChannelId' field " + _communicationChannelIdErr.Error())
-    }
-
-    // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
-    {
-        reserved, _err := io.ReadUint8(8)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'reserved' field " + _err.Error())
-        }
-        if reserved != uint8(0x00) {
-            log.WithFields(log.Fields{
-                "expected value": uint8(0x00),
-                "got value": reserved,
-            }).Info("Got unexpected response.")
-        }
-    }
-
-    // Simple Field (hpaiControlEndpoint)
-    hpaiControlEndpoint, _hpaiControlEndpointErr := HPAIControlEndpointParse(io)
-    if _hpaiControlEndpointErr != nil {
-        return nil, errors.New("Error parsing 'hpaiControlEndpoint' field " + _hpaiControlEndpointErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &ConnectionStateRequest{
-        CommunicationChannelId: communicationChannelId,
-        HpaiControlEndpoint: hpaiControlEndpoint,
-        Parent: &KNXNetIPMessage{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *ConnectionStateRequest) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (communicationChannelId)
-    communicationChannelId := uint8(m.CommunicationChannelId)
-    _communicationChannelIdErr := io.WriteUint8(8, (communicationChannelId))
-    if _communicationChannelIdErr != nil {
-        return errors.New("Error serializing 'communicationChannelId' field " + _communicationChannelIdErr.Error())
-    }
-
-    // Reserved Field (reserved)
-    {
-        _err := io.WriteUint8(8, uint8(0x00))
-        if _err != nil {
-            return errors.New("Error serializing 'reserved' field " + _err.Error())
-        }
-    }
-
-    // Simple Field (hpaiControlEndpoint)
-    _hpaiControlEndpointErr := m.HpaiControlEndpoint.Serialize(io)
-    if _hpaiControlEndpointErr != nil {
-        return errors.New("Error serializing 'hpaiControlEndpoint' field " + _hpaiControlEndpointErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *ConnectionStateRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "communicationChannelId":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.CommunicationChannelId = data
-            case "hpaiControlEndpoint":
-                var data *HPAIControlEndpoint
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.HpaiControlEndpoint = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *ConnectionStateRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.CommunicationChannelId, xml.StartElement{Name: xml.Name{Local: "communicationChannelId"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.HpaiControlEndpoint, xml.StartElement{Name: xml.Name{Local: "hpaiControlEndpoint"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go
deleted file mode 100644
index 24fc2ae..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go
+++ /dev/null
@@ -1,188 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type ConnectionStateResponse struct {
-    CommunicationChannelId uint8
-    Status Status
-    Parent *KNXNetIPMessage
-    IConnectionStateResponse
-}
-
-// The corresponding interface
-type IConnectionStateResponse interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *ConnectionStateResponse) MsgType() uint16 {
-    return 0x0208
-}
-
-
-func (m *ConnectionStateResponse) InitializeParent(parent *KNXNetIPMessage) {
-}
-
-func NewConnectionStateResponse(communicationChannelId uint8, status Status, ) *KNXNetIPMessage {
-    child := &ConnectionStateResponse{
-        CommunicationChannelId: communicationChannelId,
-        Status: status,
-        Parent: NewKNXNetIPMessage(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastConnectionStateResponse(structType interface{}) ConnectionStateResponse {
-    castFunc := func(typ interface{}) ConnectionStateResponse {
-        if casted, ok := typ.(ConnectionStateResponse); ok {
-            return casted
-        }
-        if casted, ok := typ.(*ConnectionStateResponse); ok {
-            return *casted
-        }
-        if casted, ok := typ.(KNXNetIPMessage); ok {
-            return CastConnectionStateResponse(casted.Child)
-        }
-        if casted, ok := typ.(*KNXNetIPMessage); ok {
-            return CastConnectionStateResponse(casted.Child)
-        }
-        return ConnectionStateResponse{}
-    }
-    return castFunc(structType)
-}
-
-func (m *ConnectionStateResponse) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (communicationChannelId)
-    lengthInBits += 8
-
-    // Enum Field (status)
-    lengthInBits += 8
-
-    return lengthInBits
-}
-
-func (m *ConnectionStateResponse) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func ConnectionStateResponseParse(io *utils.ReadBuffer) (*KNXNetIPMessage, error) {
-
-    // Simple Field (communicationChannelId)
-    communicationChannelId, _communicationChannelIdErr := io.ReadUint8(8)
-    if _communicationChannelIdErr != nil {
-        return nil, errors.New("Error parsing 'communicationChannelId' field " + _communicationChannelIdErr.Error())
-    }
-
-    // Enum field (status)
-    status, _statusErr := StatusParse(io)
-    if _statusErr != nil {
-        return nil, errors.New("Error parsing 'status' field " + _statusErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &ConnectionStateResponse{
-        CommunicationChannelId: communicationChannelId,
-        Status: status,
-        Parent: &KNXNetIPMessage{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *ConnectionStateResponse) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (communicationChannelId)
-    communicationChannelId := uint8(m.CommunicationChannelId)
-    _communicationChannelIdErr := io.WriteUint8(8, (communicationChannelId))
-    if _communicationChannelIdErr != nil {
-        return errors.New("Error serializing 'communicationChannelId' field " + _communicationChannelIdErr.Error())
-    }
-
-    // Enum field (status)
-    status := CastStatus(m.Status)
-    _statusErr := status.Serialize(io)
-    if _statusErr != nil {
-        return errors.New("Error serializing 'status' field " + _statusErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *ConnectionStateResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "communicationChannelId":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.CommunicationChannelId = data
-            case "status":
-                var data Status
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Status = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *ConnectionStateResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.CommunicationChannelId, xml.StartElement{Name: xml.Name{Local: "communicationChannelId"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Status, xml.StartElement{Name: xml.Name{Local: "status"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
deleted file mode 100644
index 9a4f6af..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
+++ /dev/null
@@ -1,391 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/base64"
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type DIBDeviceInfo struct {
-    DescriptionType uint8
-    KnxMedium uint8
-    DeviceStatus *DeviceStatus
-    KnxAddress *KNXAddress
-    ProjectInstallationIdentifier *ProjectInstallationIdentifier
-    KnxNetIpDeviceSerialNumber []int8
-    KnxNetIpDeviceMulticastAddress *IPAddress
-    KnxNetIpDeviceMacAddress *MACAddress
-    DeviceFriendlyName []int8
-    IDIBDeviceInfo
-}
-
-// The corresponding interface
-type IDIBDeviceInfo interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-func NewDIBDeviceInfo(descriptionType uint8, knxMedium uint8, deviceStatus *DeviceStatus, knxAddress *KNXAddress, projectInstallationIdentifier *ProjectInstallationIdentifier, knxNetIpDeviceSerialNumber []int8, knxNetIpDeviceMulticastAddress *IPAddress, knxNetIpDeviceMacAddress *MACAddress, deviceFriendlyName []int8) *DIBDeviceInfo {
-    return &DIBDeviceInfo{DescriptionType: descriptionType, KnxMedium: knxMedium, DeviceStatus: deviceStatus, KnxAddress: knxAddress, ProjectInstallationIdentifier: projectInstallationIdentifier, KnxNetIpDeviceSerialNumber: knxNetIpDeviceSerialNumber, KnxNetIpDeviceMulticastAddress: knxNetIpDeviceMulticastAddress, KnxNetIpDeviceMacAddress: knxNetIpDeviceMacAddress, DeviceFriendlyName: deviceFriendlyName}
-}
-
-func CastDIBDeviceInfo(structType interface{}) DIBDeviceInfo {
-    castFunc := func(typ interface{}) DIBDeviceInfo {
-        if casted, ok := typ.(DIBDeviceInfo); ok {
-            return casted
-        }
-        if casted, ok := typ.(*DIBDeviceInfo); ok {
-            return *casted
-        }
-        return DIBDeviceInfo{}
-    }
-    return castFunc(structType)
-}
-
-func (m *DIBDeviceInfo) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Implicit Field (structureLength)
-    lengthInBits += 8
-
-    // Simple field (descriptionType)
-    lengthInBits += 8
-
-    // Simple field (knxMedium)
-    lengthInBits += 8
-
-    // Simple field (deviceStatus)
-    lengthInBits += m.DeviceStatus.LengthInBits()
-
-    // Simple field (knxAddress)
-    lengthInBits += m.KnxAddress.LengthInBits()
-
-    // Simple field (projectInstallationIdentifier)
-    lengthInBits += m.ProjectInstallationIdentifier.LengthInBits()
-
-    // Array field
-    if len(m.KnxNetIpDeviceSerialNumber) > 0 {
-        lengthInBits += 8 * uint16(len(m.KnxNetIpDeviceSerialNumber))
-    }
-
-    // Simple field (knxNetIpDeviceMulticastAddress)
-    lengthInBits += m.KnxNetIpDeviceMulticastAddress.LengthInBits()
-
-    // Simple field (knxNetIpDeviceMacAddress)
-    lengthInBits += m.KnxNetIpDeviceMacAddress.LengthInBits()
-
-    // Array field
-    if len(m.DeviceFriendlyName) > 0 {
-        lengthInBits += 8 * uint16(len(m.DeviceFriendlyName))
-    }
-
-    return lengthInBits
-}
-
-func (m *DIBDeviceInfo) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func DIBDeviceInfoParse(io *utils.ReadBuffer) (*DIBDeviceInfo, error) {
-
-    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    _, _structureLengthErr := io.ReadUint8(8)
-    if _structureLengthErr != nil {
-        return nil, errors.New("Error parsing 'structureLength' field " + _structureLengthErr.Error())
-    }
-
-    // Simple Field (descriptionType)
-    descriptionType, _descriptionTypeErr := io.ReadUint8(8)
-    if _descriptionTypeErr != nil {
-        return nil, errors.New("Error parsing 'descriptionType' field " + _descriptionTypeErr.Error())
-    }
-
-    // Simple Field (knxMedium)
-    knxMedium, _knxMediumErr := io.ReadUint8(8)
-    if _knxMediumErr != nil {
-        return nil, errors.New("Error parsing 'knxMedium' field " + _knxMediumErr.Error())
-    }
-
-    // Simple Field (deviceStatus)
-    deviceStatus, _deviceStatusErr := DeviceStatusParse(io)
-    if _deviceStatusErr != nil {
-        return nil, errors.New("Error parsing 'deviceStatus' field " + _deviceStatusErr.Error())
-    }
-
-    // Simple Field (knxAddress)
-    knxAddress, _knxAddressErr := KNXAddressParse(io)
-    if _knxAddressErr != nil {
-        return nil, errors.New("Error parsing 'knxAddress' field " + _knxAddressErr.Error())
-    }
-
-    // Simple Field (projectInstallationIdentifier)
-    projectInstallationIdentifier, _projectInstallationIdentifierErr := ProjectInstallationIdentifierParse(io)
-    if _projectInstallationIdentifierErr != nil {
-        return nil, errors.New("Error parsing 'projectInstallationIdentifier' field " + _projectInstallationIdentifierErr.Error())
-    }
-
-    // Array field (knxNetIpDeviceSerialNumber)
-    // Count array
-    knxNetIpDeviceSerialNumber := make([]int8, uint16(6))
-    for curItem := uint16(0); curItem < uint16(uint16(6)); curItem++ {
-        _item, _err := io.ReadInt8(8)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'knxNetIpDeviceSerialNumber' field " + _err.Error())
-        }
-        knxNetIpDeviceSerialNumber[curItem] = _item
-    }
-
-    // Simple Field (knxNetIpDeviceMulticastAddress)
-    knxNetIpDeviceMulticastAddress, _knxNetIpDeviceMulticastAddressErr := IPAddressParse(io)
-    if _knxNetIpDeviceMulticastAddressErr != nil {
-        return nil, errors.New("Error parsing 'knxNetIpDeviceMulticastAddress' field " + _knxNetIpDeviceMulticastAddressErr.Error())
-    }
-
-    // Simple Field (knxNetIpDeviceMacAddress)
-    knxNetIpDeviceMacAddress, _knxNetIpDeviceMacAddressErr := MACAddressParse(io)
-    if _knxNetIpDeviceMacAddressErr != nil {
-        return nil, errors.New("Error parsing 'knxNetIpDeviceMacAddress' field " + _knxNetIpDeviceMacAddressErr.Error())
-    }
-
-    // Array field (deviceFriendlyName)
-    // Count array
-    deviceFriendlyName := make([]int8, uint16(30))
-    for curItem := uint16(0); curItem < uint16(uint16(30)); curItem++ {
-        _item, _err := io.ReadInt8(8)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'deviceFriendlyName' field " + _err.Error())
-        }
-        deviceFriendlyName[curItem] = _item
-    }
-
-    // Create the instance
-    return NewDIBDeviceInfo(descriptionType, knxMedium, deviceStatus, knxAddress, projectInstallationIdentifier, knxNetIpDeviceSerialNumber, knxNetIpDeviceMulticastAddress, knxNetIpDeviceMacAddress, deviceFriendlyName), nil
-}
-
-func (m *DIBDeviceInfo) Serialize(io utils.WriteBuffer) error {
-
-    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    structureLength := uint8(uint8(m.LengthInBytes()))
-    _structureLengthErr := io.WriteUint8(8, (structureLength))
-    if _structureLengthErr != nil {
-        return errors.New("Error serializing 'structureLength' field " + _structureLengthErr.Error())
-    }
-
-    // Simple Field (descriptionType)
-    descriptionType := uint8(m.DescriptionType)
-    _descriptionTypeErr := io.WriteUint8(8, (descriptionType))
-    if _descriptionTypeErr != nil {
-        return errors.New("Error serializing 'descriptionType' field " + _descriptionTypeErr.Error())
-    }
-
-    // Simple Field (knxMedium)
-    knxMedium := uint8(m.KnxMedium)
-    _knxMediumErr := io.WriteUint8(8, (knxMedium))
-    if _knxMediumErr != nil {
-        return errors.New("Error serializing 'knxMedium' field " + _knxMediumErr.Error())
-    }
-
-    // Simple Field (deviceStatus)
-    _deviceStatusErr := m.DeviceStatus.Serialize(io)
-    if _deviceStatusErr != nil {
-        return errors.New("Error serializing 'deviceStatus' field " + _deviceStatusErr.Error())
-    }
-
-    // Simple Field (knxAddress)
-    _knxAddressErr := m.KnxAddress.Serialize(io)
-    if _knxAddressErr != nil {
-        return errors.New("Error serializing 'knxAddress' field " + _knxAddressErr.Error())
-    }
-
-    // Simple Field (projectInstallationIdentifier)
-    _projectInstallationIdentifierErr := m.ProjectInstallationIdentifier.Serialize(io)
-    if _projectInstallationIdentifierErr != nil {
-        return errors.New("Error serializing 'projectInstallationIdentifier' field " + _projectInstallationIdentifierErr.Error())
-    }
-
-    // Array Field (knxNetIpDeviceSerialNumber)
-    if m.KnxNetIpDeviceSerialNumber != nil {
-        for _, _element := range m.KnxNetIpDeviceSerialNumber {
-            _elementErr := io.WriteInt8(8, _element)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'knxNetIpDeviceSerialNumber' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    // Simple Field (knxNetIpDeviceMulticastAddress)
-    _knxNetIpDeviceMulticastAddressErr := m.KnxNetIpDeviceMulticastAddress.Serialize(io)
-    if _knxNetIpDeviceMulticastAddressErr != nil {
-        return errors.New("Error serializing 'knxNetIpDeviceMulticastAddress' field " + _knxNetIpDeviceMulticastAddressErr.Error())
-    }
-
-    // Simple Field (knxNetIpDeviceMacAddress)
-    _knxNetIpDeviceMacAddressErr := m.KnxNetIpDeviceMacAddress.Serialize(io)
-    if _knxNetIpDeviceMacAddressErr != nil {
-        return errors.New("Error serializing 'knxNetIpDeviceMacAddress' field " + _knxNetIpDeviceMacAddressErr.Error())
-    }
-
-    // Array Field (deviceFriendlyName)
-    if m.DeviceFriendlyName != nil {
-        for _, _element := range m.DeviceFriendlyName {
-            _elementErr := io.WriteInt8(8, _element)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'deviceFriendlyName' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    return nil
-}
-
-func (m *DIBDeviceInfo) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    for {
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "descriptionType":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.DescriptionType = data
-            case "knxMedium":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.KnxMedium = data
-            case "deviceStatus":
-                var data *DeviceStatus
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.DeviceStatus = data
-            case "knxAddress":
-                var data *KNXAddress
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.KnxAddress = data
-            case "projectInstallationIdentifier":
-                var data *ProjectInstallationIdentifier
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.ProjectInstallationIdentifier = data
-            case "knxNetIpDeviceSerialNumber":
-                var _encoded string
-                if err := d.DecodeElement(&_encoded, &tok); err != nil {
-                    return err
-                }
-                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
-                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
-                if err != nil {
-                    return err
-                }
-                m.KnxNetIpDeviceSerialNumber = utils.ByteToInt8(_decoded[0:_len])
-            case "knxNetIpDeviceMulticastAddress":
-                var data *IPAddress
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.KnxNetIpDeviceMulticastAddress = data
-            case "knxNetIpDeviceMacAddress":
-                var data *MACAddress
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.KnxNetIpDeviceMacAddress = data
-            case "deviceFriendlyName":
-                var _encoded string
-                if err := d.DecodeElement(&_encoded, &tok); err != nil {
-                    return err
-                }
-                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
-                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
-                if err != nil {
-                    return err
-                }
-                m.DeviceFriendlyName = utils.ByteToInt8(_decoded[0:_len])
-            }
-        }
-    }
-}
-
-func (m *DIBDeviceInfo) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    className := "org.apache.plc4x.java.knxnetip.readwrite.DIBDeviceInfo"
-    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.DescriptionType, xml.StartElement{Name: xml.Name{Local: "descriptionType"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.KnxMedium, xml.StartElement{Name: xml.Name{Local: "knxMedium"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.DeviceStatus, xml.StartElement{Name: xml.Name{Local: "deviceStatus"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.KnxAddress, xml.StartElement{Name: xml.Name{Local: "knxAddress"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.ProjectInstallationIdentifier, xml.StartElement{Name: xml.Name{Local: "projectInstallationIdentifier"}}); err != nil {
-        return err
-    }
-    _encodedKnxNetIpDeviceSerialNumber := make([]byte, base64.StdEncoding.EncodedLen(len(m.KnxNetIpDeviceSerialNumber)))
-    base64.StdEncoding.Encode(_encodedKnxNetIpDeviceSerialNumber, utils.Int8ToByte(m.KnxNetIpDeviceSerialNumber))
-    if err := e.EncodeElement(_encodedKnxNetIpDeviceSerialNumber, xml.StartElement{Name: xml.Name{Local: "knxNetIpDeviceSerialNumber"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.KnxNetIpDeviceMulticastAddress, xml.StartElement{Name: xml.Name{Local: "knxNetIpDeviceMulticastAddress"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.KnxNetIpDeviceMacAddress, xml.StartElement{Name: xml.Name{Local: "knxNetIpDeviceMacAddress"}}); err != nil {
-        return err
-    }
-    _encodedDeviceFriendlyName := make([]byte, base64.StdEncoding.EncodedLen(len(m.DeviceFriendlyName)))
-    base64.StdEncoding.Encode(_encodedDeviceFriendlyName, utils.Int8ToByte(m.DeviceFriendlyName))
-    if err := e.EncodeElement(_encodedDeviceFriendlyName, xml.StartElement{Name: xml.Name{Local: "deviceFriendlyName"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
deleted file mode 100644
index 6f5695d..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
+++ /dev/null
@@ -1,199 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type DIBSuppSvcFamilies struct {
-    DescriptionType uint8
-    ServiceIds []*ServiceId
-    IDIBSuppSvcFamilies
-}
-
-// The corresponding interface
-type IDIBSuppSvcFamilies interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-func NewDIBSuppSvcFamilies(descriptionType uint8, serviceIds []*ServiceId) *DIBSuppSvcFamilies {
-    return &DIBSuppSvcFamilies{DescriptionType: descriptionType, ServiceIds: serviceIds}
-}
-
-func CastDIBSuppSvcFamilies(structType interface{}) DIBSuppSvcFamilies {
-    castFunc := func(typ interface{}) DIBSuppSvcFamilies {
-        if casted, ok := typ.(DIBSuppSvcFamilies); ok {
-            return casted
-        }
-        if casted, ok := typ.(*DIBSuppSvcFamilies); ok {
-            return *casted
-        }
-        return DIBSuppSvcFamilies{}
-    }
-    return castFunc(structType)
-}
-
-func (m *DIBSuppSvcFamilies) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Implicit Field (structureLength)
-    lengthInBits += 8
-
-    // Simple field (descriptionType)
-    lengthInBits += 8
-
-    // Array field
-    if len(m.ServiceIds) > 0 {
-        for _, element := range m.ServiceIds {
-            lengthInBits += element.LengthInBits()
-        }
-    }
-
-    return lengthInBits
-}
-
-func (m *DIBSuppSvcFamilies) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func DIBSuppSvcFamiliesParse(io *utils.ReadBuffer) (*DIBSuppSvcFamilies, error) {
-
-    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    _, _structureLengthErr := io.ReadUint8(8)
-    if _structureLengthErr != nil {
-        return nil, errors.New("Error parsing 'structureLength' field " + _structureLengthErr.Error())
-    }
-
-    // Simple Field (descriptionType)
-    descriptionType, _descriptionTypeErr := io.ReadUint8(8)
-    if _descriptionTypeErr != nil {
-        return nil, errors.New("Error parsing 'descriptionType' field " + _descriptionTypeErr.Error())
-    }
-
-    // Array field (serviceIds)
-    // Count array
-    serviceIds := make([]*ServiceId, uint16(3))
-    for curItem := uint16(0); curItem < uint16(uint16(3)); curItem++ {
-        _item, _err := ServiceIdParse(io)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'serviceIds' field " + _err.Error())
-        }
-        serviceIds[curItem] = _item
-    }
-
-    // Create the instance
-    return NewDIBSuppSvcFamilies(descriptionType, serviceIds), nil
-}
-
-func (m *DIBSuppSvcFamilies) Serialize(io utils.WriteBuffer) error {
-
-    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    structureLength := uint8(uint8(m.LengthInBytes()))
-    _structureLengthErr := io.WriteUint8(8, (structureLength))
-    if _structureLengthErr != nil {
-        return errors.New("Error serializing 'structureLength' field " + _structureLengthErr.Error())
-    }
-
-    // Simple Field (descriptionType)
-    descriptionType := uint8(m.DescriptionType)
-    _descriptionTypeErr := io.WriteUint8(8, (descriptionType))
-    if _descriptionTypeErr != nil {
-        return errors.New("Error serializing 'descriptionType' field " + _descriptionTypeErr.Error())
-    }
-
-    // Array Field (serviceIds)
-    if m.ServiceIds != nil {
-        for _, _element := range m.ServiceIds {
-            _elementErr := _element.Serialize(io)
-            if _elementErr != nil {
-                return errors.New("Error serializing 'serviceIds' field " + _elementErr.Error())
-            }
-        }
-    }
-
-    return nil
-}
-
-func (m *DIBSuppSvcFamilies) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    for {
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "descriptionType":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.DescriptionType = data
-            case "serviceIds":
-                var _values []*ServiceId
-                var dt *ServiceId
-                if err := d.DecodeElement(&dt, &tok); err != nil {
-                    return err
-                }
-                _values = append(_values, dt)
-                m.ServiceIds = _values
-            }
-        }
-    }
-}
-
-func (m *DIBSuppSvcFamilies) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    className := "org.apache.plc4x.java.knxnetip.readwrite.DIBSuppSvcFamilies"
-    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.DescriptionType, xml.StartElement{Name: xml.Name{Local: "descriptionType"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "serviceIds"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.ServiceIds, xml.StartElement{Name: xml.Name{Local: "serviceIds"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "serviceIds"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go
deleted file mode 100644
index e47292d..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go
+++ /dev/null
@@ -1,159 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type DescriptionRequest struct {
-    HpaiControlEndpoint *HPAIControlEndpoint
-    Parent *KNXNetIPMessage
-    IDescriptionRequest
-}
-
-// The corresponding interface
-type IDescriptionRequest interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *DescriptionRequest) MsgType() uint16 {
-    return 0x0203
-}
-
-
-func (m *DescriptionRequest) InitializeParent(parent *KNXNetIPMessage) {
-}
-
-func NewDescriptionRequest(hpaiControlEndpoint *HPAIControlEndpoint, ) *KNXNetIPMessage {
-    child := &DescriptionRequest{
-        HpaiControlEndpoint: hpaiControlEndpoint,
-        Parent: NewKNXNetIPMessage(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastDescriptionRequest(structType interface{}) DescriptionRequest {
-    castFunc := func(typ interface{}) DescriptionRequest {
-        if casted, ok := typ.(DescriptionRequest); ok {
-            return casted
-        }
-        if casted, ok := typ.(*DescriptionRequest); ok {
-            return *casted
-        }
-        if casted, ok := typ.(KNXNetIPMessage); ok {
-            return CastDescriptionRequest(casted.Child)
-        }
-        if casted, ok := typ.(*KNXNetIPMessage); ok {
-            return CastDescriptionRequest(casted.Child)
-        }
-        return DescriptionRequest{}
-    }
-    return castFunc(structType)
-}
-
-func (m *DescriptionRequest) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (hpaiControlEndpoint)
-    lengthInBits += m.HpaiControlEndpoint.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *DescriptionRequest) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func DescriptionRequestParse(io *utils.ReadBuffer) (*KNXNetIPMessage, error) {
-
-    // Simple Field (hpaiControlEndpoint)
-    hpaiControlEndpoint, _hpaiControlEndpointErr := HPAIControlEndpointParse(io)
-    if _hpaiControlEndpointErr != nil {
-        return nil, errors.New("Error parsing 'hpaiControlEndpoint' field " + _hpaiControlEndpointErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &DescriptionRequest{
-        HpaiControlEndpoint: hpaiControlEndpoint,
-        Parent: &KNXNetIPMessage{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *DescriptionRequest) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (hpaiControlEndpoint)
-    _hpaiControlEndpointErr := m.HpaiControlEndpoint.Serialize(io)
-    if _hpaiControlEndpointErr != nil {
-        return errors.New("Error serializing 'hpaiControlEndpoint' field " + _hpaiControlEndpointErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *DescriptionRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "hpaiControlEndpoint":
-                var data *HPAIControlEndpoint
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.HpaiControlEndpoint = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *DescriptionRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.HpaiControlEndpoint, xml.StartElement{Name: xml.Name{Local: "hpaiControlEndpoint"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go
deleted file mode 100644
index 8755312..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go
+++ /dev/null
@@ -1,186 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type DescriptionResponse struct {
-    DibDeviceInfo *DIBDeviceInfo
-    DibSuppSvcFamilies *DIBSuppSvcFamilies
-    Parent *KNXNetIPMessage
-    IDescriptionResponse
-}
-
-// The corresponding interface
-type IDescriptionResponse interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *DescriptionResponse) MsgType() uint16 {
-    return 0x0204
-}
-
-
-func (m *DescriptionResponse) InitializeParent(parent *KNXNetIPMessage) {
-}
-
-func NewDescriptionResponse(dibDeviceInfo *DIBDeviceInfo, dibSuppSvcFamilies *DIBSuppSvcFamilies, ) *KNXNetIPMessage {
-    child := &DescriptionResponse{
-        DibDeviceInfo: dibDeviceInfo,
-        DibSuppSvcFamilies: dibSuppSvcFamilies,
-        Parent: NewKNXNetIPMessage(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastDescriptionResponse(structType interface{}) DescriptionResponse {
-    castFunc := func(typ interface{}) DescriptionResponse {
-        if casted, ok := typ.(DescriptionResponse); ok {
-            return casted
-        }
-        if casted, ok := typ.(*DescriptionResponse); ok {
-            return *casted
-        }
-        if casted, ok := typ.(KNXNetIPMessage); ok {
-            return CastDescriptionResponse(casted.Child)
-        }
-        if casted, ok := typ.(*KNXNetIPMessage); ok {
-            return CastDescriptionResponse(casted.Child)
-        }
-        return DescriptionResponse{}
-    }
-    return castFunc(structType)
-}
-
-func (m *DescriptionResponse) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (dibDeviceInfo)
-    lengthInBits += m.DibDeviceInfo.LengthInBits()
-
-    // Simple field (dibSuppSvcFamilies)
-    lengthInBits += m.DibSuppSvcFamilies.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *DescriptionResponse) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func DescriptionResponseParse(io *utils.ReadBuffer) (*KNXNetIPMessage, error) {
-
-    // Simple Field (dibDeviceInfo)
-    dibDeviceInfo, _dibDeviceInfoErr := DIBDeviceInfoParse(io)
-    if _dibDeviceInfoErr != nil {
-        return nil, errors.New("Error parsing 'dibDeviceInfo' field " + _dibDeviceInfoErr.Error())
-    }
-
-    // Simple Field (dibSuppSvcFamilies)
-    dibSuppSvcFamilies, _dibSuppSvcFamiliesErr := DIBSuppSvcFamiliesParse(io)
-    if _dibSuppSvcFamiliesErr != nil {
-        return nil, errors.New("Error parsing 'dibSuppSvcFamilies' field " + _dibSuppSvcFamiliesErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &DescriptionResponse{
-        DibDeviceInfo: dibDeviceInfo,
-        DibSuppSvcFamilies: dibSuppSvcFamilies,
-        Parent: &KNXNetIPMessage{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *DescriptionResponse) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (dibDeviceInfo)
-    _dibDeviceInfoErr := m.DibDeviceInfo.Serialize(io)
-    if _dibDeviceInfoErr != nil {
-        return errors.New("Error serializing 'dibDeviceInfo' field " + _dibDeviceInfoErr.Error())
-    }
-
-    // Simple Field (dibSuppSvcFamilies)
-    _dibSuppSvcFamiliesErr := m.DibSuppSvcFamilies.Serialize(io)
-    if _dibSuppSvcFamiliesErr != nil {
-        return errors.New("Error serializing 'dibSuppSvcFamilies' field " + _dibSuppSvcFamiliesErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *DescriptionResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "dibDeviceInfo":
-                var data *DIBDeviceInfo
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.DibDeviceInfo = data
-            case "dibSuppSvcFamilies":
-                var data *DIBSuppSvcFamilies
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.DibSuppSvcFamilies = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *DescriptionResponse) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.DibDeviceInfo, xml.StartElement{Name: xml.Name{Local: "dibDeviceInfo"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.DibSuppSvcFamilies, xml.StartElement{Name: xml.Name{Local: "dibSuppSvcFamilies"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go
deleted file mode 100644
index 73dda51..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go
+++ /dev/null
@@ -1,159 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type DeviceConfigurationAck struct {
-    DeviceConfigurationAckDataBlock *DeviceConfigurationAckDataBlock
-    Parent *KNXNetIPMessage
-    IDeviceConfigurationAck
-}
-
-// The corresponding interface
-type IDeviceConfigurationAck interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *DeviceConfigurationAck) MsgType() uint16 {
-    return 0x0311
-}
-
-
-func (m *DeviceConfigurationAck) InitializeParent(parent *KNXNetIPMessage) {
-}
-
-func NewDeviceConfigurationAck(deviceConfigurationAckDataBlock *DeviceConfigurationAckDataBlock, ) *KNXNetIPMessage {
-    child := &DeviceConfigurationAck{
-        DeviceConfigurationAckDataBlock: deviceConfigurationAckDataBlock,
-        Parent: NewKNXNetIPMessage(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastDeviceConfigurationAck(structType interface{}) DeviceConfigurationAck {
-    castFunc := func(typ interface{}) DeviceConfigurationAck {
-        if casted, ok := typ.(DeviceConfigurationAck); ok {
-            return casted
-        }
-        if casted, ok := typ.(*DeviceConfigurationAck); ok {
-            return *casted
-        }
-        if casted, ok := typ.(KNXNetIPMessage); ok {
-            return CastDeviceConfigurationAck(casted.Child)
-        }
-        if casted, ok := typ.(*KNXNetIPMessage); ok {
-            return CastDeviceConfigurationAck(casted.Child)
-        }
-        return DeviceConfigurationAck{}
-    }
-    return castFunc(structType)
-}
-
-func (m *DeviceConfigurationAck) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (deviceConfigurationAckDataBlock)
-    lengthInBits += m.DeviceConfigurationAckDataBlock.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *DeviceConfigurationAck) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func DeviceConfigurationAckParse(io *utils.ReadBuffer) (*KNXNetIPMessage, error) {
-
-    // Simple Field (deviceConfigurationAckDataBlock)
-    deviceConfigurationAckDataBlock, _deviceConfigurationAckDataBlockErr := DeviceConfigurationAckDataBlockParse(io)
-    if _deviceConfigurationAckDataBlockErr != nil {
-        return nil, errors.New("Error parsing 'deviceConfigurationAckDataBlock' field " + _deviceConfigurationAckDataBlockErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &DeviceConfigurationAck{
-        DeviceConfigurationAckDataBlock: deviceConfigurationAckDataBlock,
-        Parent: &KNXNetIPMessage{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *DeviceConfigurationAck) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (deviceConfigurationAckDataBlock)
-    _deviceConfigurationAckDataBlockErr := m.DeviceConfigurationAckDataBlock.Serialize(io)
-    if _deviceConfigurationAckDataBlockErr != nil {
-        return errors.New("Error serializing 'deviceConfigurationAckDataBlock' field " + _deviceConfigurationAckDataBlockErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *DeviceConfigurationAck) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "deviceConfigurationAckDataBlock":
-                var data *DeviceConfigurationAckDataBlock
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.DeviceConfigurationAckDataBlock = data
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *DeviceConfigurationAck) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.DeviceConfigurationAckDataBlock, xml.StartElement{Name: xml.Name{Local: "deviceConfigurationAckDataBlock"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.go
deleted file mode 100644
index c865e8b..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.go
+++ /dev/null
@@ -1,205 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type DeviceConfigurationAckDataBlock struct {
-    CommunicationChannelId uint8
-    SequenceCounter uint8
-    Status Status
-    IDeviceConfigurationAckDataBlock
-}
-
-// The corresponding interface
-type IDeviceConfigurationAckDataBlock interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-func NewDeviceConfigurationAckDataBlock(communicationChannelId uint8, sequenceCounter uint8, status Status) *DeviceConfigurationAckDataBlock {
-    return &DeviceConfigurationAckDataBlock{CommunicationChannelId: communicationChannelId, SequenceCounter: sequenceCounter, Status: status}
-}
-
-func CastDeviceConfigurationAckDataBlock(structType interface{}) DeviceConfigurationAckDataBlock {
-    castFunc := func(typ interface{}) DeviceConfigurationAckDataBlock {
-        if casted, ok := typ.(DeviceConfigurationAckDataBlock); ok {
-            return casted
-        }
-        if casted, ok := typ.(*DeviceConfigurationAckDataBlock); ok {
-            return *casted
-        }
-        return DeviceConfigurationAckDataBlock{}
-    }
-    return castFunc(structType)
-}
-
-func (m *DeviceConfigurationAckDataBlock) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Implicit Field (structureLength)
-    lengthInBits += 8
-
-    // Simple field (communicationChannelId)
-    lengthInBits += 8
-
-    // Simple field (sequenceCounter)
-    lengthInBits += 8
-
-    // Enum Field (status)
-    lengthInBits += 8
-
-    return lengthInBits
-}
-
-func (m *DeviceConfigurationAckDataBlock) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func DeviceConfigurationAckDataBlockParse(io *utils.ReadBuffer) (*DeviceConfigurationAckDataBlock, error) {
-
-    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    _, _structureLengthErr := io.ReadUint8(8)
-    if _structureLengthErr != nil {
-        return nil, errors.New("Error parsing 'structureLength' field " + _structureLengthErr.Error())
-    }
-
-    // Simple Field (communicationChannelId)
-    communicationChannelId, _communicationChannelIdErr := io.ReadUint8(8)
-    if _communicationChannelIdErr != nil {
-        return nil, errors.New("Error parsing 'communicationChannelId' field " + _communicationChannelIdErr.Error())
-    }
-
-    // Simple Field (sequenceCounter)
-    sequenceCounter, _sequenceCounterErr := io.ReadUint8(8)
-    if _sequenceCounterErr != nil {
-        return nil, errors.New("Error parsing 'sequenceCounter' field " + _sequenceCounterErr.Error())
-    }
-
-    // Enum field (status)
-    status, _statusErr := StatusParse(io)
-    if _statusErr != nil {
-        return nil, errors.New("Error parsing 'status' field " + _statusErr.Error())
-    }
-
-    // Create the instance
-    return NewDeviceConfigurationAckDataBlock(communicationChannelId, sequenceCounter, status), nil
-}
-
-func (m *DeviceConfigurationAckDataBlock) Serialize(io utils.WriteBuffer) error {
-
-    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    structureLength := uint8(uint8(m.LengthInBytes()))
-    _structureLengthErr := io.WriteUint8(8, (structureLength))
-    if _structureLengthErr != nil {
-        return errors.New("Error serializing 'structureLength' field " + _structureLengthErr.Error())
-    }
-
-    // Simple Field (communicationChannelId)
-    communicationChannelId := uint8(m.CommunicationChannelId)
-    _communicationChannelIdErr := io.WriteUint8(8, (communicationChannelId))
-    if _communicationChannelIdErr != nil {
-        return errors.New("Error serializing 'communicationChannelId' field " + _communicationChannelIdErr.Error())
-    }
-
-    // Simple Field (sequenceCounter)
-    sequenceCounter := uint8(m.SequenceCounter)
-    _sequenceCounterErr := io.WriteUint8(8, (sequenceCounter))
-    if _sequenceCounterErr != nil {
-        return errors.New("Error serializing 'sequenceCounter' field " + _sequenceCounterErr.Error())
-    }
-
-    // Enum field (status)
-    status := CastStatus(m.Status)
-    _statusErr := status.Serialize(io)
-    if _statusErr != nil {
-        return errors.New("Error serializing 'status' field " + _statusErr.Error())
-    }
-
-    return nil
-}
-
-func (m *DeviceConfigurationAckDataBlock) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    for {
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "communicationChannelId":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.CommunicationChannelId = data
-            case "sequenceCounter":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.SequenceCounter = data
-            case "status":
-                var data Status
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.Status = data
-            }
-        }
-    }
-}
-
-func (m *DeviceConfigurationAckDataBlock) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    className := "org.apache.plc4x.java.knxnetip.readwrite.DeviceConfigurationAckDataBlock"
-    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.CommunicationChannelId, xml.StartElement{Name: xml.Name{Local: "communicationChannelId"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.SequenceCounter, xml.StartElement{Name: xml.Name{Local: "sequenceCounter"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Status, xml.StartElement{Name: xml.Name{Local: "status"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go
deleted file mode 100644
index 7c924bc..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go
+++ /dev/null
@@ -1,186 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type DeviceConfigurationRequest struct {
-    DeviceConfigurationRequestDataBlock *DeviceConfigurationRequestDataBlock
-    Cemi *CEMI
-    Parent *KNXNetIPMessage
-    IDeviceConfigurationRequest
-}
-
-// The corresponding interface
-type IDeviceConfigurationRequest interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *DeviceConfigurationRequest) MsgType() uint16 {
-    return 0x0310
-}
-
-
-func (m *DeviceConfigurationRequest) InitializeParent(parent *KNXNetIPMessage) {
-}
-
-func NewDeviceConfigurationRequest(deviceConfigurationRequestDataBlock *DeviceConfigurationRequestDataBlock, cemi *CEMI, ) *KNXNetIPMessage {
-    child := &DeviceConfigurationRequest{
-        DeviceConfigurationRequestDataBlock: deviceConfigurationRequestDataBlock,
-        Cemi: cemi,
-        Parent: NewKNXNetIPMessage(),
-    }
-    child.Parent.Child = child
-    return child.Parent
-}
-
-func CastDeviceConfigurationRequest(structType interface{}) DeviceConfigurationRequest {
-    castFunc := func(typ interface{}) DeviceConfigurationRequest {
-        if casted, ok := typ.(DeviceConfigurationRequest); ok {
-            return casted
-        }
-        if casted, ok := typ.(*DeviceConfigurationRequest); ok {
-            return *casted
-        }
-        if casted, ok := typ.(KNXNetIPMessage); ok {
-            return CastDeviceConfigurationRequest(casted.Child)
-        }
-        if casted, ok := typ.(*KNXNetIPMessage); ok {
-            return CastDeviceConfigurationRequest(casted.Child)
-        }
-        return DeviceConfigurationRequest{}
-    }
-    return castFunc(structType)
-}
-
-func (m *DeviceConfigurationRequest) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Simple field (deviceConfigurationRequestDataBlock)
-    lengthInBits += m.DeviceConfigurationRequestDataBlock.LengthInBits()
-
-    // Simple field (cemi)
-    lengthInBits += m.Cemi.LengthInBits()
-
-    return lengthInBits
-}
-
-func (m *DeviceConfigurationRequest) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func DeviceConfigurationRequestParse(io *utils.ReadBuffer, totalLength uint16) (*KNXNetIPMessage, error) {
-
-    // Simple Field (deviceConfigurationRequestDataBlock)
-    deviceConfigurationRequestDataBlock, _deviceConfigurationRequestDataBlockErr := DeviceConfigurationRequestDataBlockParse(io)
-    if _deviceConfigurationRequestDataBlockErr != nil {
-        return nil, errors.New("Error parsing 'deviceConfigurationRequestDataBlock' field " + _deviceConfigurationRequestDataBlockErr.Error())
-    }
-
-    // Simple Field (cemi)
-    cemi, _cemiErr := CEMIParse(io, uint8(totalLength) - uint8(uint8(uint8(uint8(6)) + uint8(deviceConfigurationRequestDataBlock.LengthInBytes()))))
-    if _cemiErr != nil {
-        return nil, errors.New("Error parsing 'cemi' field " + _cemiErr.Error())
-    }
-
-    // Create a partially initialized instance
-    _child := &DeviceConfigurationRequest{
-        DeviceConfigurationRequestDataBlock: deviceConfigurationRequestDataBlock,
-        Cemi: cemi,
-        Parent: &KNXNetIPMessage{},
-    }
-    _child.Parent.Child = _child
-    return _child.Parent, nil
-}
-
-func (m *DeviceConfigurationRequest) Serialize(io utils.WriteBuffer) error {
-    ser := func() error {
-
-    // Simple Field (deviceConfigurationRequestDataBlock)
-    _deviceConfigurationRequestDataBlockErr := m.DeviceConfigurationRequestDataBlock.Serialize(io)
-    if _deviceConfigurationRequestDataBlockErr != nil {
-        return errors.New("Error serializing 'deviceConfigurationRequestDataBlock' field " + _deviceConfigurationRequestDataBlockErr.Error())
-    }
-
-    // Simple Field (cemi)
-    _cemiErr := m.Cemi.Serialize(io)
-    if _cemiErr != nil {
-        return errors.New("Error serializing 'cemi' field " + _cemiErr.Error())
-    }
-
-        return nil
-    }
-    return m.Parent.SerializeParent(io, m, ser)
-}
-
-func (m *DeviceConfigurationRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    token = start
-    for {
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "deviceConfigurationRequestDataBlock":
-                var data *DeviceConfigurationRequestDataBlock
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.DeviceConfigurationRequestDataBlock = data
-            case "cemi":
-                var dt *CEMI
-                if err := d.DecodeElement(&dt, &tok); err != nil {
-                    return err
-                }
-                m.Cemi = dt
-            }
-        }
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-    }
-}
-
-func (m *DeviceConfigurationRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    if err := e.EncodeElement(m.DeviceConfigurationRequestDataBlock, xml.StartElement{Name: xml.Name{Local: "deviceConfigurationRequestDataBlock"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.Cemi, xml.StartElement{Name: xml.Name{Local: "cemi"}}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.go
deleted file mode 100644
index 17f8f4b..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.go
+++ /dev/null
@@ -1,205 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type DeviceConfigurationRequestDataBlock struct {
-    CommunicationChannelId uint8
-    SequenceCounter uint8
-    IDeviceConfigurationRequestDataBlock
-}
-
-// The corresponding interface
-type IDeviceConfigurationRequestDataBlock interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-func NewDeviceConfigurationRequestDataBlock(communicationChannelId uint8, sequenceCounter uint8) *DeviceConfigurationRequestDataBlock {
-    return &DeviceConfigurationRequestDataBlock{CommunicationChannelId: communicationChannelId, SequenceCounter: sequenceCounter}
-}
-
-func CastDeviceConfigurationRequestDataBlock(structType interface{}) DeviceConfigurationRequestDataBlock {
-    castFunc := func(typ interface{}) DeviceConfigurationRequestDataBlock {
-        if casted, ok := typ.(DeviceConfigurationRequestDataBlock); ok {
-            return casted
-        }
-        if casted, ok := typ.(*DeviceConfigurationRequestDataBlock); ok {
-            return *casted
-        }
-        return DeviceConfigurationRequestDataBlock{}
-    }
-    return castFunc(structType)
-}
-
-func (m *DeviceConfigurationRequestDataBlock) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Implicit Field (structureLength)
-    lengthInBits += 8
-
-    // Simple field (communicationChannelId)
-    lengthInBits += 8
-
-    // Simple field (sequenceCounter)
-    lengthInBits += 8
-
-    // Reserved Field (reserved)
-    lengthInBits += 8
-
-    return lengthInBits
-}
-
-func (m *DeviceConfigurationRequestDataBlock) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func DeviceConfigurationRequestDataBlockParse(io *utils.ReadBuffer) (*DeviceConfigurationRequestDataBlock, error) {
-
-    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    _, _structureLengthErr := io.ReadUint8(8)
-    if _structureLengthErr != nil {
-        return nil, errors.New("Error parsing 'structureLength' field " + _structureLengthErr.Error())
-    }
-
-    // Simple Field (communicationChannelId)
-    communicationChannelId, _communicationChannelIdErr := io.ReadUint8(8)
-    if _communicationChannelIdErr != nil {
-        return nil, errors.New("Error parsing 'communicationChannelId' field " + _communicationChannelIdErr.Error())
-    }
-
-    // Simple Field (sequenceCounter)
-    sequenceCounter, _sequenceCounterErr := io.ReadUint8(8)
-    if _sequenceCounterErr != nil {
-        return nil, errors.New("Error parsing 'sequenceCounter' field " + _sequenceCounterErr.Error())
-    }
-
-    // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
-    {
-        reserved, _err := io.ReadUint8(8)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'reserved' field " + _err.Error())
-        }
-        if reserved != uint8(0x00) {
-            log.WithFields(log.Fields{
-                "expected value": uint8(0x00),
-                "got value": reserved,
-            }).Info("Got unexpected response.")
-        }
-    }
-
-    // Create the instance
-    return NewDeviceConfigurationRequestDataBlock(communicationChannelId, sequenceCounter), nil
-}
-
-func (m *DeviceConfigurationRequestDataBlock) Serialize(io utils.WriteBuffer) error {
-
-    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-    structureLength := uint8(uint8(m.LengthInBytes()))
-    _structureLengthErr := io.WriteUint8(8, (structureLength))
-    if _structureLengthErr != nil {
-        return errors.New("Error serializing 'structureLength' field " + _structureLengthErr.Error())
-    }
-
-    // Simple Field (communicationChannelId)
-    communicationChannelId := uint8(m.CommunicationChannelId)
-    _communicationChannelIdErr := io.WriteUint8(8, (communicationChannelId))
-    if _communicationChannelIdErr != nil {
-        return errors.New("Error serializing 'communicationChannelId' field " + _communicationChannelIdErr.Error())
-    }
-
-    // Simple Field (sequenceCounter)
-    sequenceCounter := uint8(m.SequenceCounter)
-    _sequenceCounterErr := io.WriteUint8(8, (sequenceCounter))
-    if _sequenceCounterErr != nil {
-        return errors.New("Error serializing 'sequenceCounter' field " + _sequenceCounterErr.Error())
-    }
-
-    // Reserved Field (reserved)
-    {
-        _err := io.WriteUint8(8, uint8(0x00))
-        if _err != nil {
-            return errors.New("Error serializing 'reserved' field " + _err.Error())
-        }
-    }
-
-    return nil
-}
-
-func (m *DeviceConfigurationRequestDataBlock) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    for {
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "communicationChannelId":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.CommunicationChannelId = data
-            case "sequenceCounter":
-                var data uint8
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.SequenceCounter = data
-            }
-        }
-    }
-}
-
-func (m *DeviceConfigurationRequestDataBlock) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    className := "org.apache.plc4x.java.knxnetip.readwrite.DeviceConfigurationRequestDataBlock"
-    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.CommunicationChannelId, xml.StartElement{Name: xml.Name{Local: "communicationChannelId"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeElement(m.SequenceCounter, xml.StartElement{Name: xml.Name{Local: "sequenceCounter"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceStatus.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceStatus.go
deleted file mode 100644
index 178d6c6..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceStatus.go
+++ /dev/null
@@ -1,163 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type DeviceStatus struct {
-    ProgramMode bool
-    IDeviceStatus
-}
-
-// The corresponding interface
-type IDeviceStatus interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-func NewDeviceStatus(programMode bool) *DeviceStatus {
-    return &DeviceStatus{ProgramMode: programMode}
-}
-
-func CastDeviceStatus(structType interface{}) DeviceStatus {
-    castFunc := func(typ interface{}) DeviceStatus {
-        if casted, ok := typ.(DeviceStatus); ok {
-            return casted
-        }
-        if casted, ok := typ.(*DeviceStatus); ok {
-            return *casted
-        }
-        return DeviceStatus{}
-    }
-    return castFunc(structType)
-}
-
-func (m *DeviceStatus) LengthInBits() uint16 {
-    lengthInBits := uint16(0)
-
-    // Reserved Field (reserved)
-    lengthInBits += 7
-
-    // Simple field (programMode)
-    lengthInBits += 1
-
-    return lengthInBits
-}
-
-func (m *DeviceStatus) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
-}
-
-func DeviceStatusParse(io *utils.ReadBuffer) (*DeviceStatus, error) {
-
-    // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
-    {
-        reserved, _err := io.ReadUint8(7)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'reserved' field " + _err.Error())
-        }
-        if reserved != uint8(0x00) {
-            log.WithFields(log.Fields{
-                "expected value": uint8(0x00),
-                "got value": reserved,
-            }).Info("Got unexpected response.")
-        }
-    }
-
-    // Simple Field (programMode)
-    programMode, _programModeErr := io.ReadBit()
-    if _programModeErr != nil {
-        return nil, errors.New("Error parsing 'programMode' field " + _programModeErr.Error())
-    }
-
-    // Create the instance
-    return NewDeviceStatus(programMode), nil
-}
-
-func (m *DeviceStatus) Serialize(io utils.WriteBuffer) error {
-
-    // Reserved Field (reserved)
-    {
-        _err := io.WriteUint8(7, uint8(0x00))
-        if _err != nil {
-            return errors.New("Error serializing 'reserved' field " + _err.Error())
-        }
-    }
-
-    // Simple Field (programMode)
-    programMode := bool(m.ProgramMode)
-    _programModeErr := io.WriteBit((programMode))
-    if _programModeErr != nil {
-        return errors.New("Error serializing 'programMode' field " + _programModeErr.Error())
-    }
-
-    return nil
-}
-
-func (m *DeviceStatus) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
-    var token xml.Token
-    var err error
-    for {
-        token, err = d.Token()
-        if err != nil {
-            if err == io.EOF {
-                return nil
-            }
-            return err
-        }
-        switch token.(type) {
-        case xml.StartElement:
-            tok := token.(xml.StartElement)
-            switch tok.Name.Local {
-            case "programMode":
-                var data bool
-                if err := d.DecodeElement(&data, &tok); err != nil {
-                    return err
-                }
-                m.ProgramMode = data
-            }
-        }
-    }
-}
-
-func (m *DeviceStatus) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
-    className := "org.apache.plc4x.java.knxnetip.readwrite.DeviceStatus"
-    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.ProgramMode, xml.StartElement{Name: xml.Name{Local: "programMode"}}); err != nil {
-        return err
-    }
-    if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
-        return err
-    }
-    return nil
-}
-
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go
deleted file mode 100644
index b87feaf..0000000
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go
+++ /dev/null
@@ -1,213 +0,0 @@
-//
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-//
-package model
-
-import (
-    "encoding/xml"
-    "errors"
-    "io"
-    log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-)
-
-// The data-structure of this message
-type DisconnectRequest struct {
-    CommunicationChannelId uint8
-    HpaiControlEndpoint *HPAIControlEndpoint
-    Parent *KNXNetIPMessage
-    IDisconnectRequest
-}
-
-// The corresponding interface
-type IDisconnectRequest interface {
-    LengthInBytes() uint16
-    LengthInBits() uint16
-    Serialize(io utils.WriteBuffer) error
-    xml.Marshaler
-}
-
-///////////////////////////////////////////////////////////
-// Accessors for discriminator values.
-///////////////////////////////////////////////////////////
-func (m *DisconnectRequest) MsgType() uint16 {
-    return 0x0209
-}
-
-
... 15421 lines suppressed ...


[plc4x] 03/04: - Continued implementing the Go KNX driver

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit cd5ddc4c6e3bffd1151f1d30c0b09e99d12fca3b
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sun Nov 8 17:14:31 2020 +0100

    - Continued implementing the Go KNX driver
---
 .../knxnetip/ParserSerializerTestsuite.xml         |   42 +-
 plc4go/cmd/main/drivers/bacnetip_test.go           |    4 +-
 plc4go/cmd/main/drivers/knxnetip_test.go           |  100 +-
 plc4go/cmd/main/drivers/modbus_test.go             |   10 +-
 plc4go/cmd/main/drivers/s7_test.go                 |    4 +-
 .../cmd/main/drivers/tests/modbus_driver_test.go   |    4 +-
 .../drivers/tests/modbus_parser_serializer_test.go |    2 +-
 plc4go/examples/read/hello_world_plc4go_read.go    |   10 +-
 plc4go/examples/write/hello_world_plc4go_write.go  |   10 +-
 plc4go/go.mod                                      |    2 +-
 plc4go/internal/plc4go/bacnetip/BacnetIpDriver.go  |    2 +-
 .../plc4go/bacnetip/readwrite/ParserHelper.go      |    6 +-
 .../plc4go/bacnetip/readwrite/XmlParserHelper.go   |    4 +-
 .../plc4go/bacnetip/readwrite/model/APDU.go        |    2 +-
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   |    2 +-
 .../bacnetip/readwrite/model/APDUComplexAck.go     |    2 +-
 .../readwrite/model/APDUConfirmedRequest.go        |    2 +-
 .../plc4go/bacnetip/readwrite/model/APDUError.go   |    2 +-
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  |    2 +-
 .../bacnetip/readwrite/model/APDUSegmentAck.go     |    2 +-
 .../bacnetip/readwrite/model/APDUSimpleAck.go      |    2 +-
 .../readwrite/model/APDUUnconfirmedRequest.go      |    2 +-
 .../bacnetip/readwrite/model/ApplicationTag.go     |    2 +-
 .../bacnetip/readwrite/model/BACnetAddress.go      |    2 +-
 .../readwrite/model/BACnetConfirmedServiceACK.go   |    2 +-
 .../BACnetConfirmedServiceACKAtomicReadFile.go     |    2 +-
 .../BACnetConfirmedServiceACKAtomicWriteFile.go    |    2 +-
 ...tConfirmedServiceACKConfirmedPrivateTransfer.go |    2 +-
 .../model/BACnetConfirmedServiceACKCreateObject.go |    2 +-
 .../BACnetConfirmedServiceACKGetAlarmSummary.go    |    2 +-
 ...ACnetConfirmedServiceACKGetEnrollmentSummary.go |    2 +-
 ...BACnetConfirmedServiceACKGetEventInformation.go |    2 +-
 .../model/BACnetConfirmedServiceACKReadProperty.go |    2 +-
 ...ACnetConfirmedServiceACKReadPropertyMultiple.go |    2 +-
 .../model/BACnetConfirmedServiceACKReadRange.go    |    2 +-
 ...BACnetConfirmedServiceACKRemovedAuthenticate.go |    2 +-
 ...rmedServiceACKRemovedReadPropertyConditional.go |    2 +-
 .../model/BACnetConfirmedServiceACKVTData.go       |    2 +-
 .../model/BACnetConfirmedServiceACKVTOpen.go       |    2 +-
 .../model/BACnetConfirmedServiceRequest.go         |    2 +-
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |    2 +-
 .../BACnetConfirmedServiceRequestAddListElement.go |    2 +-
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |    2 +-
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |    2 +-
 ...firmedServiceRequestConfirmedCOVNotification.go |    2 +-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |    2 +-
 ...rmedServiceRequestConfirmedEventNotification.go |    2 +-
 ...firmedServiceRequestConfirmedPrivateTransfer.go |    2 +-
 ...tConfirmedServiceRequestConfirmedTextMessage.go |    2 +-
 .../BACnetConfirmedServiceRequestCreateObject.go   |    2 +-
 .../BACnetConfirmedServiceRequestDeleteObject.go   |    2 +-
 ...rmedServiceRequestDeviceCommunicationControl.go |    2 +-
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |    2 +-
 ...etConfirmedServiceRequestGetEventInformation.go |    2 +-
 ...etConfirmedServiceRequestLifeSafetyOperation.go |    2 +-
 .../BACnetConfirmedServiceRequestReadProperty.go   |    2 +-
 ...tConfirmedServiceRequestReadPropertyMultiple.go |    2 +-
 .../BACnetConfirmedServiceRequestReadRange.go      |    2 +-
 ...netConfirmedServiceRequestReinitializeDevice.go |    2 +-
 ...CnetConfirmedServiceRequestRemoveListElement.go |    2 +-
 ...etConfirmedServiceRequestRemovedAuthenticate.go |    2 +-
 ...ServiceRequestRemovedReadPropertyConditional.go |    2 +-
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |    2 +-
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |    2 +-
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |    2 +-
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |    2 +-
 .../model/BACnetConfirmedServiceRequestVTClose.go  |    2 +-
 .../model/BACnetConfirmedServiceRequestVTData.go   |    2 +-
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |    2 +-
 .../BACnetConfirmedServiceRequestWriteProperty.go  |    2 +-
 ...ConfirmedServiceRequestWritePropertyMultiple.go |    2 +-
 .../plc4go/bacnetip/readwrite/model/BACnetError.go |    2 +-
 .../readwrite/model/BACnetErrorAtomicReadFile.go   |    2 +-
 .../readwrite/model/BACnetErrorAtomicWriteFile.go  |    2 +-
 .../model/BACnetErrorConfirmedPrivateTransfer.go   |    2 +-
 .../readwrite/model/BACnetErrorCreateObject.go     |    2 +-
 .../readwrite/model/BACnetErrorGetAlarmSummary.go  |    2 +-
 .../model/BACnetErrorGetEnrollmentSummary.go       |    2 +-
 .../model/BACnetErrorGetEventInformation.go        |    2 +-
 .../readwrite/model/BACnetErrorReadProperty.go     |    2 +-
 .../model/BACnetErrorReadPropertyMultiple.go       |    2 +-
 .../readwrite/model/BACnetErrorReadRange.go        |    2 +-
 .../model/BACnetErrorRemovedAuthenticate.go        |    2 +-
 .../BACnetErrorRemovedReadPropertyConditional.go   |    2 +-
 .../bacnetip/readwrite/model/BACnetErrorVTData.go  |    2 +-
 .../bacnetip/readwrite/model/BACnetErrorVTOpen.go  |    2 +-
 .../bacnetip/readwrite/model/BACnetNetworkType.go  |    2 +-
 .../bacnetip/readwrite/model/BACnetNodeType.go     |    2 +-
 .../bacnetip/readwrite/model/BACnetNotifyType.go   |    2 +-
 .../bacnetip/readwrite/model/BACnetObjectType.go   |    2 +-
 .../bacnetip/readwrite/model/BACnetServiceAck.go   |    2 +-
 .../model/BACnetServiceAckAtomicReadFile.go        |    2 +-
 .../model/BACnetServiceAckAtomicWriteFile.go       |    2 +-
 .../BACnetServiceAckConfirmedPrivateTransfer.go    |    2 +-
 .../model/BACnetServiceAckCreateObject.go          |    2 +-
 .../model/BACnetServiceAckGetAlarmSummary.go       |    2 +-
 .../model/BACnetServiceAckGetEnrollmentSummary.go  |    2 +-
 .../model/BACnetServiceAckGetEventInformation.go   |    2 +-
 .../model/BACnetServiceAckReadProperty.go          |    2 +-
 .../model/BACnetServiceAckReadPropertyMultiple.go  |    2 +-
 .../readwrite/model/BACnetServiceAckReadRange.go   |    2 +-
 .../model/BACnetServiceAckRemovedAuthenticate.go   |    2 +-
 ...CnetServiceAckRemovedReadPropertyConditional.go |    2 +-
 .../readwrite/model/BACnetServiceAckVTData.go      |    2 +-
 .../readwrite/model/BACnetServiceAckVTOpen.go      |    2 +-
 .../plc4go/bacnetip/readwrite/model/BACnetTag.go   |    2 +-
 .../model/BACnetTagApplicationBitString.go         |    2 +-
 .../readwrite/model/BACnetTagApplicationBoolean.go |    2 +-
 .../model/BACnetTagApplicationCharacterString.go   |    2 +-
 .../readwrite/model/BACnetTagApplicationDate.go    |    2 +-
 .../readwrite/model/BACnetTagApplicationDouble.go  |    2 +-
 .../model/BACnetTagApplicationEnumerated.go        |    2 +-
 .../readwrite/model/BACnetTagApplicationNull.go    |    2 +-
 .../model/BACnetTagApplicationObjectIdentifier.go  |    2 +-
 .../model/BACnetTagApplicationOctetString.go       |    2 +-
 .../readwrite/model/BACnetTagApplicationReal.go    |    2 +-
 .../model/BACnetTagApplicationSignedInteger.go     |    2 +-
 .../readwrite/model/BACnetTagApplicationTime.go    |    2 +-
 .../model/BACnetTagApplicationUnsignedInteger.go   |    2 +-
 .../bacnetip/readwrite/model/BACnetTagContext.go   |    2 +-
 .../readwrite/model/BACnetTagWithContent.go        |    2 +-
 .../model/BACnetUnconfirmedServiceRequest.go       |    2 +-
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |    2 +-
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |    2 +-
 ...UnconfirmedServiceRequestTimeSynchronization.go |    2 +-
 ...onfirmedServiceRequestUTCTimeSynchronization.go |    2 +-
 ...rmedServiceRequestUnconfirmedCOVNotification.go |    2 +-
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |    2 +-
 ...edServiceRequestUnconfirmedEventNotification.go |    2 +-
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go |    2 +-
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |    2 +-
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |    2 +-
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |    2 +-
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |    2 +-
 .../plc4go/bacnetip/readwrite/model/BVLC.go        |    2 +-
 .../model/BVLCDeleteForeignDeviceTableEntry.go     |    2 +-
 .../model/BVLCDistributeBroadcastToNetwork.go      |    2 +-
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |    2 +-
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |    2 +-
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |    2 +-
 .../model/BVLCReadBroadcastDistributionTable.go    |    2 +-
 .../model/BVLCReadBroadcastDistributionTableAck.go |    2 +-
 .../readwrite/model/BVLCReadForeignDeviceTable.go  |    2 +-
 .../model/BVLCReadForeignDeviceTableAck.go         |    2 +-
 .../readwrite/model/BVLCRegisterForeignDevice.go   |    2 +-
 .../plc4go/bacnetip/readwrite/model/BVLCResult.go  |    2 +-
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |    2 +-
 .../model/BVLCWideBroadcastDistributionTable.go    |    2 +-
 .../plc4go/bacnetip/readwrite/model/NLM.go         |    2 +-
 .../readwrite/model/NLMIAmRouterToNetwork.go       |    2 +-
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |    2 +-
 .../plc4go/bacnetip/readwrite/model/NPDU.go        |    2 +-
 .../KncNetIpConnection.go}                         |   69 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go  |   19 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpField.go   |   50 +-
 .../plc4go/knxnetip/KnxNetIpFieldHandler.go        |   14 +-
 .../plc4go/knxnetip/KnxNetIpMessageCodec.go        |   30 +-
 .../KnxNetIpValueHandler.go}                       |   21 +-
 plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go  |   72 +
 .../plc4go/knxnetip/readwrite/ParserHelper.go      |   26 +-
 .../plc4go/knxnetip/readwrite/XmlParserHelper.go   |   44 +-
 .../plc4go/knxnetip/readwrite/model/APCI.go        |  114 +
 .../APDU.go => knxnetip/readwrite/model/CEMI.go}   |  200 +-
 .../readwrite/model/CEMIAdditionalInformation.go}  |  134 +-
 .../CEMIAdditionalInformationBusmonitorInfo.go     |  322 ++
 .../CEMIAdditionalInformationRelativeTimestamp.go  |  181 +
 .../knxnetip/readwrite/model/CEMIBusmonInd.go      |  237 +
 .../plc4go/knxnetip/readwrite/model/CEMIDataCon.go |  237 +
 .../knxnetip/readwrite/model/CEMIDataFrame.go      |  613 +++
 .../plc4go/knxnetip/readwrite/model/CEMIDataInd.go |  237 +
 .../plc4go/knxnetip/readwrite/model/CEMIDataReq.go |  237 +
 .../plc4go/knxnetip/readwrite/model/CEMIFrame.go   |  382 ++
 .../readwrite/model/CEMIFrameAck.go}               |   68 +-
 .../knxnetip/readwrite/model/CEMIFrameData.go      |  486 ++
 .../knxnetip/readwrite/model/CEMIFrameDataExt.go   |  514 +++
 .../readwrite/model/CEMIFramePollingData.go}       |   68 +-
 .../readwrite/model/CEMIFramePollingDataExt.go}    |   68 +-
 .../knxnetip/readwrite/model/CEMIMPropReadCon.go   |  300 ++
 .../knxnetip/readwrite/model/CEMIMPropReadReq.go   |  272 ++
 .../readwrite/model/CEMIPollDataCon.go}            |   56 +-
 .../readwrite/model/CEMIPollDataReq.go}            |   56 +-
 .../readwrite/model/CEMIPriority.go}               |   41 +-
 .../readwrite/model/CEMIRawCon.go}                 |   56 +-
 .../readwrite/model/CEMIRawInd.go}                 |   56 +-
 .../readwrite/model/CEMIRawReq.go}                 |   56 +-
 .../knxnetip/readwrite/model/ConnectionRequest.go  |  213 +
 .../model/ConnectionRequestInformation.go          |  218 +
 ...onnectionRequestInformationDeviceManagement.go} |   56 +-
 ...ConnectionRequestInformationTunnelConnection.go |  186 +
 .../knxnetip/readwrite/model/ConnectionResponse.go |  262 ++
 .../readwrite/model/ConnectionResponseDataBlock.go |  218 +
 ...ConnectionResponseDataBlockDeviceManagement.go} |   56 +-
 .../ConnectionResponseDataBlockTunnelConnection.go |  159 +
 .../readwrite/model/ConnectionStateRequest.go      |  213 +
 .../readwrite/model/ConnectionStateResponse.go     |  188 +
 .../knxnetip/readwrite/model/DIBDeviceInfo.go      |  391 ++
 .../knxnetip/readwrite/model/DIBSuppSvcFamilies.go |  199 +
 .../knxnetip/readwrite/model/DescriptionRequest.go |  159 +
 .../readwrite/model/DescriptionResponse.go         |  186 +
 .../readwrite/model/DeviceConfigurationAck.go      |  159 +
 .../model/DeviceConfigurationAckDataBlock.go       |  205 +
 .../readwrite/model/DeviceConfigurationRequest.go  |  186 +
 .../model/DeviceConfigurationRequestDataBlock.go   |  205 +
 .../knxnetip/readwrite/model/DeviceStatus.go       |  163 +
 .../knxnetip/readwrite/model/DisconnectRequest.go  |  213 +
 .../knxnetip/readwrite/model/DisconnectResponse.go |  188 +
 .../readwrite/model/HPAIControlEndpoint.go         |  204 +
 .../knxnetip/readwrite/model/HPAIDataEndpoint.go   |  204 +
 .../readwrite/model/HPAIDiscoveryEndpoint.go       |  204 +
 .../readwrite/model/HostProtocolCode.go}           |   35 +-
 .../plc4go/knxnetip/readwrite/model/IPAddress.go   |  155 +
 .../plc4go/knxnetip/readwrite/model/KnxAddress.go  |  189 +
 .../knxnetip/readwrite/model/KnxDatapoint.go       | 4821 ++++++++++++++++++++
 .../knxnetip/readwrite/model/KnxDatapointType.go   | 4377 ++++++++++++++++++
 .../readwrite/model/KnxGroupAddress.go}            |  101 +-
 .../readwrite/model/KnxGroupAddress2Level.go       |  188 +
 .../readwrite/model/KnxGroupAddress3Level.go       |  216 +
 .../readwrite/model/KnxGroupAddressFreeLevel.go}   |   88 +-
 .../readwrite/model/KnxLayer.go}                   |   40 +-
 .../readwrite/model/KnxNetIpCore.go}               |   88 +-
 .../readwrite/model/KnxNetIpDeviceManagement.go}   |   92 +-
 .../knxnetip/readwrite/model/KnxNetIpMessage.go    |  452 ++
 .../readwrite/model/KnxNetIpTunneling.go}          |   88 +-
 .../readwrite/model/KnxNetObjectServer.go}         |   88 +-
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |  160 +
 .../readwrite/model/KnxNetRemoteLogging.go}        |   88 +-
 .../plc4go/knxnetip/readwrite/model/MACAddress.go  |  155 +
 .../model/ProjectInstallationIdentifier.go         |  163 +
 .../readwrite/model/RelativeTimestamp.go}          |   74 +-
 .../readwrite/model/RoutingIndication.go}          |   56 +-
 .../knxnetip/readwrite/model/SearchRequest.go      |  159 +
 .../knxnetip/readwrite/model/SearchResponse.go     |  213 +
 .../readwrite/model/ServiceId.go}                  |  137 +-
 .../plc4go/knxnetip/readwrite/model/Status.go      |  102 +
 .../readwrite/model/TPCI.go}                       |   47 +-
 .../knxnetip/readwrite/model/TunnelingRequest.go   |  186 +
 .../readwrite/model/TunnelingRequestDataBlock.go   |  205 +
 .../knxnetip/readwrite/model/TunnelingResponse.go  |  159 +
 .../readwrite/model/TunnelingResponseDataBlock.go  |  205 +
 .../knxnetip/readwrite/model/UnknownMessage.go     |  178 +
 plc4go/internal/plc4go/modbus/ModbusConnection.go  |   14 +-
 plc4go/internal/plc4go/modbus/ModbusDriver.go      |   10 +-
 plc4go/internal/plc4go/modbus/ModbusField.go       |    2 +-
 .../internal/plc4go/modbus/ModbusFieldHandler.go   |    6 +-
 .../internal/plc4go/modbus/ModbusMessageCodec.go   |    8 +-
 plc4go/internal/plc4go/modbus/ModbusReader.go      |   12 +-
 .../internal/plc4go/modbus/ModbusValueHandler.go   |    2 +-
 plc4go/internal/plc4go/modbus/ModbusWriter.go      |   10 +-
 .../plc4go/modbus/readwrite/ParserHelper.go        |    6 +-
 .../plc4go/modbus/readwrite/XmlParserHelper.go     |    4 +-
 .../plc4go/modbus/readwrite/model/DataItem.go      |    6 +-
 .../modbus/readwrite/model/ModbusConstants.go      |    2 +-
 .../modbus/readwrite/model/ModbusDataTypeSizes.go  |    2 +-
 .../modbus/readwrite/model/ModbusErrorCode.go      |    2 +-
 .../plc4go/modbus/readwrite/model/ModbusPDU.go     |    2 +-
 .../readwrite/model/ModbusPDUDiagnosticRequest.go  |    2 +-
 .../readwrite/model/ModbusPDUDiagnosticResponse.go |    2 +-
 .../modbus/readwrite/model/ModbusPDUError.go       |    2 +-
 .../model/ModbusPDUGetComEventCounterRequest.go    |    2 +-
 .../model/ModbusPDUGetComEventCounterResponse.go   |    2 +-
 .../model/ModbusPDUGetComEventLogRequest.go        |    2 +-
 .../model/ModbusPDUGetComEventLogResponse.go       |    2 +-
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |    2 +-
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |    2 +-
 .../readwrite/model/ModbusPDUReadCoilsRequest.go   |    2 +-
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |    2 +-
 .../ModbusPDUReadDeviceIdentificationRequest.go    |    2 +-
 .../ModbusPDUReadDeviceIdentificationResponse.go   |    2 +-
 .../model/ModbusPDUReadDiscreteInputsRequest.go    |    2 +-
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |    2 +-
 .../model/ModbusPDUReadExceptionStatusRequest.go   |    2 +-
 .../model/ModbusPDUReadExceptionStatusResponse.go  |    2 +-
 .../model/ModbusPDUReadFifoQueueRequest.go         |    2 +-
 .../model/ModbusPDUReadFifoQueueResponse.go        |    2 +-
 .../model/ModbusPDUReadFileRecordRequest.go        |    2 +-
 .../model/ModbusPDUReadFileRecordRequestItem.go    |    2 +-
 .../model/ModbusPDUReadFileRecordResponse.go       |    2 +-
 .../model/ModbusPDUReadFileRecordResponseItem.go   |    2 +-
 .../model/ModbusPDUReadHoldingRegistersRequest.go  |    2 +-
 .../model/ModbusPDUReadHoldingRegistersResponse.go |    2 +-
 .../model/ModbusPDUReadInputRegistersRequest.go    |    2 +-
 .../model/ModbusPDUReadInputRegistersResponse.go   |    2 +-
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |    2 +-
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |    2 +-
 .../model/ModbusPDUReportServerIdRequest.go        |    2 +-
 .../model/ModbusPDUReportServerIdResponse.go       |    2 +-
 .../model/ModbusPDUWriteFileRecordRequest.go       |    2 +-
 .../model/ModbusPDUWriteFileRecordRequestItem.go   |    2 +-
 .../model/ModbusPDUWriteFileRecordResponse.go      |    2 +-
 .../model/ModbusPDUWriteFileRecordResponseItem.go  |    2 +-
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |    2 +-
 .../model/ModbusPDUWriteMultipleCoilsResponse.go   |    2 +-
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |    2 +-
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |    2 +-
 .../model/ModbusPDUWriteSingleCoilRequest.go       |    2 +-
 .../model/ModbusPDUWriteSingleCoilResponse.go      |    2 +-
 .../model/ModbusPDUWriteSingleRegisterRequest.go   |    2 +-
 .../model/ModbusPDUWriteSingleRegisterResponse.go  |    2 +-
 .../modbus/readwrite/model/ModbusSerialADU.go      |    2 +-
 .../plc4go/modbus/readwrite/model/ModbusTcpADU.go  |    2 +-
 .../internal/plc4go/model/DefaultPlcReadRequest.go |    4 +-
 .../plc4go/model/DefaultPlcReadResponse.go         |    4 +-
 ...Request.go => DefaultPlcSubscriptionRequest.go} |   48 +-
 .../plc4go/model/DefaultPlcWriteRequest.go         |    8 +-
 .../plc4go/model/DefaultPlcWriteResponse.go        |    2 +-
 plc4go/internal/plc4go/model/RequestInterceptor.go |    2 +-
 .../plc4go/model/values/IEC61131ValueHandler.go    |    4 +-
 plc4go/internal/plc4go/model/values/PlcList.go     |    2 +-
 plc4go/internal/plc4go/model/values/PlcStruct.go   |    2 +-
 .../plc4go/model/values/PlcValueAdapter.go         |    2 +-
 plc4go/internal/plc4go/s7/S7Driver.go              |    2 +-
 .../internal/plc4go/s7/readwrite/ParserHelper.go   |    6 +-
 .../plc4go/s7/readwrite/XmlParserHelper.go         |    4 +-
 .../plc4go/s7/readwrite/model/COTPPacket.go        |    2 +-
 .../readwrite/model/COTPPacketConnectionRequest.go |    2 +-
 .../model/COTPPacketConnectionResponse.go          |    2 +-
 .../plc4go/s7/readwrite/model/COTPPacketData.go    |    2 +-
 .../readwrite/model/COTPPacketDisconnectRequest.go |    2 +-
 .../model/COTPPacketDisconnectResponse.go          |    2 +-
 .../s7/readwrite/model/COTPPacketTpduError.go      |    2 +-
 .../plc4go/s7/readwrite/model/COTPParameter.go     |    2 +-
 .../s7/readwrite/model/COTPParameterCalledTsap.go  |    2 +-
 .../s7/readwrite/model/COTPParameterCallingTsap.go |    2 +-
 .../s7/readwrite/model/COTPParameterChecksum.go    |    2 +-
 ...COTPParameterDisconnectAdditionalInformation.go |    2 +-
 .../s7/readwrite/model/COTPParameterTpduSize.go    |    2 +-
 .../plc4go/s7/readwrite/model/COTPProtocolClass.go |    2 +-
 .../plc4go/s7/readwrite/model/COTPTpduSize.go      |    2 +-
 .../internal/plc4go/s7/readwrite/model/DataItem.go |    6 +-
 .../s7/readwrite/model/DataTransportErrorCode.go   |    2 +-
 .../plc4go/s7/readwrite/model/DataTransportSize.go |    2 +-
 .../plc4go/s7/readwrite/model/DeviceGroup.go       |    2 +-
 .../plc4go/s7/readwrite/model/MemoryArea.go        |    2 +-
 .../plc4go/s7/readwrite/model/S7Address.go         |    2 +-
 .../plc4go/s7/readwrite/model/S7AddressAny.go      |    2 +-
 .../plc4go/s7/readwrite/model/S7Message.go         |    2 +-
 .../plc4go/s7/readwrite/model/S7MessageRequest.go  |    2 +-
 .../plc4go/s7/readwrite/model/S7MessageResponse.go |    2 +-
 .../s7/readwrite/model/S7MessageResponseData.go    |    2 +-
 .../plc4go/s7/readwrite/model/S7MessageUserData.go |    2 +-
 .../plc4go/s7/readwrite/model/S7Parameter.go       |    2 +-
 .../readwrite/model/S7ParameterReadVarRequest.go   |    2 +-
 .../readwrite/model/S7ParameterReadVarResponse.go  |    2 +-
 .../model/S7ParameterSetupCommunication.go         |    2 +-
 .../s7/readwrite/model/S7ParameterUserData.go      |    2 +-
 .../s7/readwrite/model/S7ParameterUserDataItem.go  |    2 +-
 .../model/S7ParameterUserDataItemCPUFunctions.go   |    2 +-
 .../readwrite/model/S7ParameterWriteVarRequest.go  |    2 +-
 .../readwrite/model/S7ParameterWriteVarResponse.go |    2 +-
 .../plc4go/s7/readwrite/model/S7Payload.go         |    2 +-
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |    2 +-
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |    2 +-
 .../s7/readwrite/model/S7PayloadUserDataItem.go    |    2 +-
 ...PayloadUserDataItemCpuFunctionReadSzlRequest.go |    2 +-
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |    2 +-
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |    2 +-
 .../readwrite/model/S7PayloadWriteVarResponse.go   |    2 +-
 .../plc4go/s7/readwrite/model/S7StaticHelper.go    |    4 +-
 .../s7/readwrite/model/S7VarPayloadDataItem.go     |    2 +-
 .../s7/readwrite/model/S7VarPayloadStatusItem.go   |    2 +-
 .../readwrite/model/S7VarRequestParameterItem.go   |    2 +-
 .../model/S7VarRequestParameterItemAddress.go      |    2 +-
 .../plc4go/s7/readwrite/model/SzlDataTreeItem.go   |    2 +-
 plc4go/internal/plc4go/s7/readwrite/model/SzlId.go |    2 +-
 .../s7/readwrite/model/SzlModuleTypeClass.go       |    2 +-
 .../plc4go/s7/readwrite/model/SzlSublist.go        |    2 +-
 .../plc4go/s7/readwrite/model/TPKTPacket.go        |    2 +-
 .../plc4go/s7/readwrite/model/TransportSize.go     |    2 +-
 plc4go/internal/plc4go/spi/Message.go              |    2 +-
 plc4go/internal/plc4go/spi/PlcFieldHandler.go      |    2 +-
 plc4go/internal/plc4go/spi/PlcReader.go            |    2 +-
 .../spi/{PlcFieldHandler.go => PlcSubscriber.go}   |    9 +-
 plc4go/internal/plc4go/spi/PlcValueHandler.go      |    4 +-
 plc4go/internal/plc4go/spi/PlcWriter.go            |    2 +-
 .../plc4go/spi/TransportInstanceExposer.go         |    2 +-
 .../interceptors/SingleItemRequestInterceptor.go   |    6 +-
 .../internal/plc4go/testutils/DriverTestRunner.go  |   14 +-
 .../plc4go/testutils/ParserSerializerTestRunner.go |    4 +-
 .../internal/plc4go/transports/tcp/TcpTransport.go |   19 +-
 .../plc4go/transports/test/TestTransport.go        |    2 +-
 .../{tcp/TcpTransport.go => udp/UdpTransport.go}   |   81 +-
 plc4go/pkg/plc4go/connection.go                    |    2 +-
 plc4go/pkg/plc4go/driver.go                        |    2 +-
 plc4go/pkg/plc4go/driverManager.go                 |    2 +-
 plc4go/pkg/plc4go/model/plc_read_response.go       |    2 +-
 plc4go/pkg/plc4go/model/plc_write_request.go       |    2 +-
 plc4go/pom.xml                                     |    2 +-
 387 files changed, 22716 insertions(+), 1583 deletions(-)

diff --git a/plc4go/assets/testing/protocols/knxnetip/ParserSerializerTestsuite.xml b/plc4go/assets/testing/protocols/knxnetip/ParserSerializerTestsuite.xml
index 939c1b9..90217fe 100644
--- a/plc4go/assets/testing/protocols/knxnetip/ParserSerializerTestsuite.xml
+++ b/plc4go/assets/testing/protocols/knxnetip/ParserSerializerTestsuite.xml
@@ -40,7 +40,7 @@
     Differences from normal:
     Repeat: True
     Last two reserved bits are true
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <TunnelingRequest className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingRequest">
         <tunnelingRequestDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingRequestDataBlock">
@@ -80,7 +80,7 @@
     Raw CEMI Frame: bab8b838bb
     Control Field: ba
     First of the last two reserved bits is true
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <TunnelingRequest className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingRequest">
         <tunnelingRequestDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingRequestDataBlock">
@@ -117,7 +117,7 @@
   <testcase>
     <name>Search Request</name>
     <raw>06100201000e0801c0a82a46ef8e</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <SearchRequest className="org.apache.plc4x.java.knxnetip.readwrite.SearchRequest">
         <hpaiIDiscoveryEndpoint className="org.apache.plc4x.java.knxnetip.readwrite.HPAIDiscoveryEndpoint">
@@ -134,7 +134,7 @@
   <testcase>
     <name>Search Response</name>
     <raw>06100202004c0801c0a82a0b0e5736010200ffff000000082d409852e000170c000ab327553647697261204b4e582f49502d5363686e6974747374656c6c6500000000000802020103010401</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <SearchResponse className="org.apache.plc4x.java.knxnetip.readwrite.SearchResponse">
         <hpaiControlEndpoint className="org.apache.plc4x.java.knxnetip.readwrite.HPAIControlEndpoint">
@@ -150,7 +150,7 @@
           <deviceStatus className="org.apache.plc4x.java.knxnetip.readwrite.DeviceStatus">
             <programMode>false</programMode>
           </deviceStatus>
-          <knxAddress className="org.apache.plc4x.java.knxnetip.readwrite.KNXAddress">
+          <knxAddress className="org.apache.plc4x.java.knxnetip.readwrite.KnxAddress">
             <mainGroup>15</mainGroup>
             <middleGroup>15</middleGroup>
             <subGroup>255</subGroup>
@@ -189,7 +189,7 @@
   <testcase>
     <name>Description Request</name>
     <raw>06100203000e0801000000000000</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <DescriptionRequest className="org.apache.plc4x.java.knxnetip.readwrite.DescriptionRequest">
         <hpaiControlEndpoint className="org.apache.plc4x.java.knxnetip.readwrite.HPAIControlEndpoint">
@@ -206,7 +206,7 @@
   <testcase>
     <name>Description Response</name>
     <raw>06100204004436010200ffff000000082d409852e000170c000ab327553647697261204b4e582f49502d5363686e6974747374656c6c6500000000000802020103010401</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <DescriptionResponse className="org.apache.plc4x.java.knxnetip.readwrite.DescriptionResponse">
         <dibDeviceInfo className="org.apache.plc4x.java.knxnetip.readwrite.DIBDeviceInfo">
@@ -215,7 +215,7 @@
           <deviceStatus className="org.apache.plc4x.java.knxnetip.readwrite.DeviceStatus">
             <programMode>false</programMode>
           </deviceStatus>
-          <knxAddress className="org.apache.plc4x.java.knxnetip.readwrite.KNXAddress">
+          <knxAddress className="org.apache.plc4x.java.knxnetip.readwrite.KnxAddress">
             <mainGroup>15</mainGroup>
             <middleGroup>15</middleGroup>
             <subGroup>255</subGroup>
@@ -254,7 +254,7 @@
   <testcase>
     <name>Connect Request</name>
     <raw>06100205001a0801c0a82a46f4310801c0a82a46f43204040200</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <ConnectionRequest className="org.apache.plc4x.java.knxnetip.readwrite.ConnectionRequest">
         <hpaiDiscoveryEndpoint className="org.apache.plc4x.java.knxnetip.readwrite.HPAIDiscoveryEndpoint">
@@ -281,7 +281,7 @@
   <testcase>
     <name>Connect Response</name>
     <raw>06100206001466000801c0a82a0b0e5704041101</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <ConnectionResponse className="org.apache.plc4x.java.knxnetip.readwrite.ConnectionResponse">
         <communicationChannelId>102</communicationChannelId>
@@ -294,7 +294,7 @@
           <ipPort>3671</ipPort>
         </hpaiDataEndpoint>
         <connectionResponseDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.ConnectionResponseDataBlockTunnelConnection">
-          <knxAddress className="org.apache.plc4x.java.knxnetip.readwrite.KNXAddress">
+          <knxAddress className="org.apache.plc4x.java.knxnetip.readwrite.KnxAddress">
             <mainGroup>1</mainGroup>
             <middleGroup>1</middleGroup>
             <subGroup>1</subGroup>
@@ -307,7 +307,7 @@
   <testcase>
     <name>Connection State Request</name>
     <raw>06100207001066000801c0a82a46f431</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <ConnectionStateRequest className="org.apache.plc4x.java.knxnetip.readwrite.ConnectionStateRequest">
         <communicationChannelId>102</communicationChannelId>
@@ -325,7 +325,7 @@
   <testcase>
     <name>Connection State Response</name>
     <raw>0610020800086600</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <ConnectionStateResponse className="org.apache.plc4x.java.knxnetip.readwrite.ConnectionStateResponse">
         <communicationChannelId>102</communicationChannelId>
@@ -337,7 +337,7 @@
   <testcase>
     <name>Device Configuration Request</name>
     <raw>06100310001104670000fc000001531001</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <DeviceConfigurationRequest className="org.apache.plc4x.java.knxnetip.readwrite.DeviceConfigurationRequest">
         <deviceConfigurationRequestDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.DeviceConfigurationRequestDataBlock">
@@ -358,7 +358,7 @@
   <testcase>
     <name>Device Configuration Ack</name>
     <raw>06100311000a04670000</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <DeviceConfigurationAck className="org.apache.plc4x.java.knxnetip.readwrite.DeviceConfigurationAck">
         <deviceConfigurationAckDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.DeviceConfigurationAckDataBlock">
@@ -373,7 +373,7 @@
   <testcase>
     <name>Disconnect Request</name>
     <raw>06100209001067000801c0a82a46f431</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <DisconnectRequest className="org.apache.plc4x.java.knxnetip.readwrite.DisconnectRequest">
         <communicationChannelId>103</communicationChannelId>
@@ -391,7 +391,7 @@
   <testcase>
     <name>Disconnect Response</name>
     <raw>0610020a00086600</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <DisconnectResponse className="org.apache.plc4x.java.knxnetip.readwrite.DisconnectResponse">
         <communicationChannelId>102</communicationChannelId>
@@ -407,7 +407,7 @@
     Raw CEMI Frame: bc360a1e0ce100810d
     Control Field: bc
     -->
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <TunnelingRequest className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingRequest">
         <tunnelingRequestDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingRequestDataBlock">
@@ -436,7 +436,7 @@
             <priority>LOW</priority>
             <acknowledgeRequested>false</acknowledgeRequested>
             <errorFlag>false</errorFlag>
-            <sourceAddress className="org.apache.plc4x.java.knxnetip.readwrite.KNXAddress">
+            <sourceAddress className="org.apache.plc4x.java.knxnetip.readwrite.KnxAddress">
               <mainGroup>3</mainGroup>
               <middleGroup>6</middleGroup>
               <subGroup>10</subGroup>
@@ -460,7 +460,7 @@
   <testcase>
     <name>Tunneling Response</name>
     <raw>06100421000a046b0000</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <TunnelingResponse className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingResponse">
         <tunnelingResponseDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingResponseDataBlock">
@@ -475,7 +475,7 @@
   <testcase>
     <name>Default</name>
     <raw>0610020500180801c0a82a46c4090801c0a82a46c40a0203</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <ConnectionRequest className="org.apache.plc4x.java.knxnetip.readwrite.ConnectionRequest">
         <hpaiDiscoveryEndpoint className="org.apache.plc4x.java.knxnetip.readwrite.HPAIDiscoveryEndpoint">
diff --git a/plc4go/cmd/main/drivers/bacnetip_test.go b/plc4go/cmd/main/drivers/bacnetip_test.go
index b7b9441..028c65b 100644
--- a/plc4go/cmd/main/drivers/bacnetip_test.go
+++ b/plc4go/cmd/main/drivers/bacnetip_test.go
@@ -20,8 +20,8 @@ package drivers
 
 import (
 	"encoding/hex"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/bacnetip/readwrite/model"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+	"plc4x.apache.org/plc4go/v0/internal/plc4go/bacnetip/readwrite/model"
+	"plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 	"testing"
 )
 
diff --git a/plc4go/cmd/main/drivers/knxnetip_test.go b/plc4go/cmd/main/drivers/knxnetip_test.go
index 15549cf..1a2667a 100644
--- a/plc4go/cmd/main/drivers/knxnetip_test.go
+++ b/plc4go/cmd/main/drivers/knxnetip_test.go
@@ -19,20 +19,24 @@
 package drivers
 
 import (
-	"encoding/hex"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/knxnetip/readwrite/model"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-	"testing"
+    "encoding/hex"
+    "fmt"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/knxnetip"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/knxnetip/readwrite/model"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/transports/udp"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/pkg/plc4go"
+    "testing"
 )
 
-func TestKnxNetIp(t *testing.T) {
+func KnxNetIp(t *testing.T) {
 	t.Skip()
 	request, err := hex.DecodeString("000a00000006010300000004")
 	if err != nil {
 		t.Errorf("Error decoding test input")
 	}
 	rb := utils.NewReadBuffer(request)
-	adu, err := model.KNXNetIPMessageParse(rb)
+	adu, err := model.KnxNetIpMessageParse(rb)
 	if err != nil {
 		t.Errorf("Error parsing: %s", err)
 	}
@@ -41,3 +45,87 @@ func TestKnxNetIp(t *testing.T) {
 	}
 
 }
+
+func TestKnxNetIpPlc4goDriver(t *testing.T) {
+    driverManager := plc4go.NewPlcDriverManager()
+    driverManager.RegisterDriver(knxnetip.NewKnxNetIpDriver())
+    driverManager.RegisterTransport(udp.NewUdpTransport())
+
+    // Get a connection to a remote PLC
+    crc := driverManager.GetConnection("knxnet-ip://192.168.42.11")
+
+    // Wait for the driver to connect (or not)
+    connectionResult := <-crc
+    if connectionResult.Err != nil {
+        t.Errorf("error connecting to PLC: %s", connectionResult.Err.Error())
+        t.Fail()
+        return
+    }
+    connection := connectionResult.Connection
+
+    // Try to ping the remote device
+    pingResultChannel := connection.Ping()
+    pingResult := <-pingResultChannel
+    if pingResult.Err != nil {
+        t.Errorf("couldn't ping device: %s", pingResult.Err.Error())
+        t.Fail()
+        return
+    }
+
+    // Make sure the connection is closed at the end
+    defer connection.Close()
+
+    // Prepare a read-request
+    rrb := connection.ReadRequestBuilder()
+    rrb.AddItem("field1", "holding-register:1:REAL")
+    rrb.AddItem("field2", "holding-register:3:REAL")
+    readRequest, err := rrb.Build()
+    if err != nil {
+        t.Errorf("error preparing read-request: %s", connectionResult.Err.Error())
+        t.Fail()
+        return
+    }
+
+    // Execute a read-request
+    rrc := readRequest.Execute()
+
+    // Wait for the response to finish
+    rrr := <-rrc
+    if rrr.Err != nil {
+        t.Errorf("error executing read-request: %s", rrr.Err.Error())
+        t.Fail()
+        return
+    }
+
+    // Do something with the response
+    value1 := rrr.Response.GetValue("field1")
+    value2 := rrr.Response.GetValue("field2")
+    fmt.Printf("\n\nResult field1: %f\n", value1.GetFloat32())
+    fmt.Printf("\n\nResult field1: %f\n", value2.GetFloat32())
+
+    // Prepare a write-request
+    wrb := connection.WriteRequestBuilder()
+    wrb.AddItem("field1", "holding-register:1:REAL", 1.2345)
+    wrb.AddItem("field2", "holding-register:3:REAL", 2.3456)
+    writeRequest, err := rrb.Build()
+    if err != nil {
+        t.Errorf("error preparing read-request: %s", connectionResult.Err.Error())
+        t.Fail()
+        return
+    }
+
+    // Execute a write-request
+    wrc := writeRequest.Execute()
+
+    // Wait for the response to finish
+    wrr := <-wrc
+    if wrr.Err != nil {
+        t.Errorf("error executing read-request: %s", rrr.Err.Error())
+        t.Fail()
+        return
+    }
+
+    fmt.Printf("\n\nResult field1: %d\n", wrr.Response.GetResponseCode("field1"))
+    fmt.Printf("\n\nResult field2: %d\n", wrr.Response.GetResponseCode("field2"))
+}
+
diff --git a/plc4go/cmd/main/drivers/modbus_test.go b/plc4go/cmd/main/drivers/modbus_test.go
index fa3a75a..9f8c649 100644
--- a/plc4go/cmd/main/drivers/modbus_test.go
+++ b/plc4go/cmd/main/drivers/modbus_test.go
@@ -24,11 +24,11 @@ import (
 	"fmt"
 	"net"
 	"os"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/modbus"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/modbus/readwrite/model"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/transports/tcp"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/pkg/plc4go"
+	"plc4x.apache.org/plc4go/v0/internal/plc4go/modbus"
+	"plc4x.apache.org/plc4go/v0/internal/plc4go/modbus/readwrite/model"
+	"plc4x.apache.org/plc4go/v0/internal/plc4go/transports/tcp"
+	"plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+	"plc4x.apache.org/plc4go/v0/pkg/plc4go"
 	"strings"
 	"testing"
 )
diff --git a/plc4go/cmd/main/drivers/s7_test.go b/plc4go/cmd/main/drivers/s7_test.go
index 8856f9e..96969c3 100644
--- a/plc4go/cmd/main/drivers/s7_test.go
+++ b/plc4go/cmd/main/drivers/s7_test.go
@@ -20,8 +20,8 @@ package drivers
 
 import (
 	"encoding/hex"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/s7/readwrite/model"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+	"plc4x.apache.org/plc4go/v0/internal/plc4go/s7/readwrite/model"
+	"plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 	"testing"
 )
 
diff --git a/plc4go/cmd/main/drivers/tests/modbus_driver_test.go b/plc4go/cmd/main/drivers/tests/modbus_driver_test.go
index 0cc07db..5675045 100644
--- a/plc4go/cmd/main/drivers/tests/modbus_driver_test.go
+++ b/plc4go/cmd/main/drivers/tests/modbus_driver_test.go
@@ -19,8 +19,8 @@
 package tests
 
 import (
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/modbus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/testutils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/modbus"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/testutils"
     "testing"
 )
 
diff --git a/plc4go/cmd/main/drivers/tests/modbus_parser_serializer_test.go b/plc4go/cmd/main/drivers/tests/modbus_parser_serializer_test.go
index 7594366..a549cbf 100644
--- a/plc4go/cmd/main/drivers/tests/modbus_parser_serializer_test.go
+++ b/plc4go/cmd/main/drivers/tests/modbus_parser_serializer_test.go
@@ -19,7 +19,7 @@
 package tests
 
 import (
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/testutils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/testutils"
     "testing"
 )
 
diff --git a/plc4go/examples/read/hello_world_plc4go_read.go b/plc4go/examples/read/hello_world_plc4go_read.go
index c371359..5963a53 100644
--- a/plc4go/examples/read/hello_world_plc4go_read.go
+++ b/plc4go/examples/read/hello_world_plc4go_read.go
@@ -21,7 +21,7 @@ package read
 import (
 	"encoding/json"
 	"fmt"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/pkg/plc4go"
+	"plc4x.apache.org/plc4go/v0/pkg/plc4go"
 )
 
 func main() int {
@@ -31,7 +31,7 @@ func main() int {
 	// Wait for the driver to connect (or not)
 	connectionResult := <-crc
 	if connectionResult.Err != nil {
-		_ = fmt.Errorf("error connecting to PLC: %s", connectionResult.Err.Error())
+		fmt.Printf("error connecting to PLC: %s", connectionResult.Err.Error())
 		return 1
 	}
 	connection := connectionResult.Connection
@@ -44,7 +44,7 @@ func main() int {
 	rrb.AddItem("field", "holding-register:1:REAL[2]")
 	readRequest, err := rrb.Build()
 	if err != nil {
-		_ = fmt.Errorf("error preparing read-request: %s", connectionResult.Err.Error())
+        fmt.Printf("error preparing read-request: %s", connectionResult.Err.Error())
 		return 2
 	}
 
@@ -54,14 +54,14 @@ func main() int {
 	// Wait for the response to finish
 	rrr := <-rrc
 	if rrr.Err != nil {
-		_ = fmt.Errorf("error executing read-request: %s", rrr.Err.Error())
+        fmt.Printf("error executing read-request: %s", rrr.Err.Error())
 		return 3
 	}
 
 	// Do something with the response
 	readResponseJson, err := json.Marshal(rrr.Response)
 	if err != nil {
-		_ = fmt.Errorf("error serializing read-response: %s", err.Error())
+        fmt.Printf("error serializing read-response: %s", err.Error())
 		return 4
 	}
 	fmt.Printf("Result: %s\n", string(readResponseJson))
diff --git a/plc4go/examples/write/hello_world_plc4go_write.go b/plc4go/examples/write/hello_world_plc4go_write.go
index a570054..80b4a06 100644
--- a/plc4go/examples/write/hello_world_plc4go_write.go
+++ b/plc4go/examples/write/hello_world_plc4go_write.go
@@ -21,7 +21,7 @@ package write
 import (
 	"encoding/json"
 	"fmt"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/pkg/plc4go"
+	"plc4x.apache.org/plc4go/v0/pkg/plc4go"
 )
 
 func main() int {
@@ -31,7 +31,7 @@ func main() int {
 	// Wait for the driver to connect (or not)
 	connectionResult := <-crc
 	if connectionResult.Err != nil {
-		_ = fmt.Errorf("error connecting to PLC: %s", connectionResult.Err.Error())
+        fmt.Printf("error connecting to PLC: %s", connectionResult.Err.Error())
 		return 1
 	}
 	connection := connectionResult.Connection
@@ -45,7 +45,7 @@ func main() int {
 	wrb.AddItem("input-field", "%I0.0:USINT", 42)
 	writeRequest, err := wrb.Build()
 	if err != nil {
-		_ = fmt.Errorf("error preparing read-request: %s", connectionResult.Err.Error())
+        fmt.Printf("error preparing read-request: %s", connectionResult.Err.Error())
 		return 2
 	}
 
@@ -55,14 +55,14 @@ func main() int {
 	// Wait for the response to finish
 	wrr := <-wrc
 	if wrr.Err != nil {
-		_ = fmt.Errorf("error executing write-request: %s", wrr.Err.Error())
+        fmt.Printf("error executing write-request: %s", wrr.Err.Error())
 		return 3
 	}
 
 	// Do something with the response
 	writeResponseJson, err := json.Marshal(wrr.Response)
 	if err != nil {
-		_ = fmt.Errorf("error serializing write-response: %s", err.Error())
+        fmt.Printf("error serializing write-response: %s", err.Error())
 		return 4
 	}
 	fmt.Printf("Result: %s\n", string(writeResponseJson))
diff --git a/plc4go/go.mod b/plc4go/go.mod
index 99673e6..f14f276 100644
--- a/plc4go/go.mod
+++ b/plc4go/go.mod
@@ -16,7 +16,7 @@
 // specific language governing permissions and limitations
 // under the License.
 //
-module plc4x.apache.org/plc4go-modbus-driver/v0
+module plc4x.apache.org/plc4go/v0
 
 go 1.15
 
diff --git a/plc4go/internal/plc4go/bacnetip/BacnetIpDriver.go b/plc4go/internal/plc4go/bacnetip/BacnetIpDriver.go
index 9a76fe1..c5ff371 100644
--- a/plc4go/internal/plc4go/bacnetip/BacnetIpDriver.go
+++ b/plc4go/internal/plc4go/bacnetip/BacnetIpDriver.go
@@ -18,7 +18,7 @@
 //
 package bacnetip
 
-import "plc4x.apache.org/plc4go-modbus-driver/v0/pkg/plc4go"
+import "plc4x.apache.org/plc4go/v0/pkg/plc4go"
 
 func NewBacnetIpDriver() plc4go.PlcDriver {
 	return nil
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go b/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
index 0eab689..09818c3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
@@ -20,9 +20,9 @@ package model
 
 import (
     "errors"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/bacnetip/readwrite/model"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/spi"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/bacnetip/readwrite/model"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 type BacnetipParserHelper struct {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go b/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
index 56e2355..0333d1a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
@@ -21,8 +21,8 @@ package model
 import (
     "encoding/xml"
     "errors"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/bacnetip/readwrite/model"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/spi"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/bacnetip/readwrite/model"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
 )
 
 type BacnetipXmlParserHelper struct {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
index 61e5b71..e2fac96 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "reflect"
     "strings"
 )
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
index 8b80b4c..63499cb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
@@ -23,7 +23,7 @@ import (
     "errors"
     "io"
     log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
index 74a7988..c334e12 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
@@ -23,7 +23,7 @@ import (
     "errors"
     "io"
     log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
index 9a5693d..e49084b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
@@ -23,7 +23,7 @@ import (
     "errors"
     "io"
     log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
index 1ba83a3..2937281 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
@@ -23,7 +23,7 @@ import (
     "errors"
     "io"
     log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
index 30285bf..f8821e7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
@@ -23,7 +23,7 @@ import (
     "errors"
     "io"
     log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
index 72e737c..83e00ee 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
@@ -23,7 +23,7 @@ import (
     "errors"
     "io"
     log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
index 9cbd3ad..8788a31 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
@@ -23,7 +23,7 @@ import (
     "errors"
     "io"
     log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
index 1ece34b..f00baf8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
@@ -23,7 +23,7 @@ import (
     "errors"
     "io"
     log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go
index 89adbe5..9766c1c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go
@@ -19,7 +19,7 @@
 package model
 
 import (
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 type ApplicationTag int8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
index 50620a7..5baa0ff 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
index 6de7127..2c72e86 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "reflect"
     "strings"
 )
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
index 35fb1e6..63e8b94 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
index 439c8ef..c36240a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
index b6ac7b8..55a3169 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
index 88c2b4c..29d7362 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
index 31d3716..a136026 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
index 7f0225b..f7b61f3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
index 3b384f2..4766f15 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
index c8752de..c815c3b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
index 356ad40..3aa6d86 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
index 841441b..afa5dc2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
index cfdc031..74e8327 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
index eb26de7..837e08f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
index c5a6b22..b0894b1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
index dbc1b99..c512f64 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
index f793c18..1eeefee 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "reflect"
     "strings"
 )
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
index 2b75e28..405bf8f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
index 5eb16e0..2cb69a0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
index 8524e61..36cae7e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
index ac72bdf..9c7b685 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
index a5ed7a1..2de3cef 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "strconv"
 )
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
index 765bad7..5967c09 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
index a68e2c3..95b5e3b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
index d187582..09716dd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
index 2421f49..24cfb5a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
index b5fe1e4..c67a760 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
index d76c4c3..3657e53 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
index 1bef2fd..d3e7730 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
index 9d4d862..98fc99f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
index bae4f91..b1c324d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
index 9f8951e..cffb4d8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
index be052ce..4704e60 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "strconv"
 )
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
index 80beb00..2d96b7d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
index 3cbdafb..378391d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
index a4084ea..73f7994 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
index d46fb14..9673554 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
index b43f954..db1d878 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
index 44a5252..125465a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
index 4b18545..a072cb6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
index dfeee76..4bf19d6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "strconv"
 )
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
index 72fabcb..3172f89 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
index 7bf37ca..44d0fdc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
index 0dc2381..f591758 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
index e83bfad..8780e32 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
index ccea387..dc362da 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
index d646a77..e9a0de7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "strconv"
 )
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
index cf17455..b6a5727 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
index 1e4e402..b6c4af7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "reflect"
     "strings"
 )
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
index 31951dc..1870b4d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
index f69722f..84e70a9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
index 387748b..7a4a946 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
index 5de6d40..44d5a79 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
index ad543ff..6f4651c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
index 5ba52fe..07772fc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
index 9dd031a..095f3b2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
index e559970..39d6aa6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "strconv"
 )
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
index f2d5ff0..9defcdf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
index 4c63c75..ab99f44 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
index a983e32..13b0cbb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
index 05c7314..ec6285c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
index bff625d..9621635 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
index 06a9315..58b6a5a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go
index 34cb0c8..6ef07fb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go
@@ -19,7 +19,7 @@
 package model
 
 import (
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 type BACnetNetworkType uint8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go
index 5c03427..cf3ebbb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go
@@ -19,7 +19,7 @@
 package model
 
 import (
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 type BACnetNodeType uint8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
index 5107a3b..5cbc228 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
@@ -19,7 +19,7 @@
 package model
 
 import (
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 type BACnetNotifyType uint8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go
index d2f7afa..69dbbc8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go
@@ -19,7 +19,7 @@
 package model
 
 import (
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 type BACnetObjectType uint16
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
index 9765ffb..c4e6e1f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "reflect"
     "strings"
 )
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
index 43a97d5..eb572d5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
index 5ef4d69..1c731ad 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
index f6e8af9..73fcc59 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
index 7da6e23..d29fe14 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
index 9f21196..6f4c089 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
index 9c54c33..923c9f6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
index bb3b825..cd72d4f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
index a18410f..bdedfb8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "strconv"
 )
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
index d549d93..7a4551f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
index 231497a..3871c9d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
index 4ed30c5..6c8b40d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
index bba9792..a5819b1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
index 6ed0540..a292f3f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
index c52464c..8a5b87c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
index 68eb0c6..bff70e5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "reflect"
     "strings"
 )
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
index ea34b90..984c9b6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
index 2e655bb..472ebc8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
index 8c42bff..3a117dd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
index 4708c1f..629358b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
index cfcbfdf..f03c848 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
index 522b992..e077ba8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
index 96f075c..d5db62b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
index b29ee41..3345abc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
index 23fb917..a50d6e6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
index 8fc78ae..c7023d5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
index 2069e11..a4027f8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go
index ab8d9f8..ec490bd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
index 43813d8..a3cffb6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
index 9dc9ea0..090949c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go
index 0ba4780..164f33e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "strconv"
 )
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
index 7f43e41..14117c8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "reflect"
     "strings"
 )
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
index 7eafb51..f4e2463 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "strconv"
 )
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
index c5b7ea9..a75d0cd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
index 8181cd4..0094f86 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
index a3f7f70..1bedadf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
index b8ba695..d735d68 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
index 35ca967..7fc68dd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
index c2ff952..4c845b9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
index 4f1beb0..cd6a795 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "strconv"
 )
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
index 6d1a4d6..0be5e34 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
index bf78fba..67992ee 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "strconv"
 )
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
index 87cddb9..e19ca71 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
@@ -23,7 +23,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "strconv"
 )
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
index 88e568b..cc96754 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
index 687619b..e63b0b5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "strconv"
     "reflect"
     "strings"
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
index d57c261..4d1efef 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
index abcfd1d..d76495b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
index fc9af06..0343002 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
index f904db0..ba47760 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
index b61ab75..55c58e7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
index 7a3291e..b84e7d0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
index 80f80d1..195b2a5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
index 05c97a7..2415723 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
index 7c6e1c3..5ff6848 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
index 5f4b431..a0a1c74 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
index 19cace1..32cb52a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
index b56db63..6b2a16c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go
index ce7099f..bf0263b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go
@@ -21,7 +21,7 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
index 8946810..111ae12 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "reflect"
     "strings"
 )
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
index 343c43e..1289b56 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
index 9c14739..217e24d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
@@ -22,7 +22,7 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
index 55cacb6..7f194f8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
@@ -23,7 +23,7 @@ import (
     "errors"
     "io"
     log "github.com/sirupsen/logrus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
diff --git a/plc4go/internal/plc4go/modbus/ModbusConnection.go b/plc4go/internal/plc4go/knxnetip/KncNetIpConnection.go
similarity index 58%
copy from plc4go/internal/plc4go/modbus/ModbusConnection.go
copy to plc4go/internal/plc4go/knxnetip/KncNetIpConnection.go
index 1f4ed78..78609d7 100644
--- a/plc4go/internal/plc4go/modbus/ModbusConnection.go
+++ b/plc4go/internal/plc4go/knxnetip/KncNetIpConnection.go
@@ -16,17 +16,15 @@
 // specific language governing permissions and limitations
 // under the License.
 //
-package modbus
+package knxnetip
 
 import (
-	"errors"
-	driverModel "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/modbus/readwrite/model"
-	internalModel "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/model"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/spi"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/spi/interceptors"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/transports"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/pkg/plc4go"
-	apiModel "plc4x.apache.org/plc4go-modbus-driver/v0/pkg/plc4go/model"
+    internalModel "plc4x.apache.org/plc4go/v0/internal/plc4go/model"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/spi/interceptors"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/transports"
+    "plc4x.apache.org/plc4go/v0/pkg/plc4go"
+    apiModel "plc4x.apache.org/plc4go/v0/pkg/plc4go/model"
 )
 
 type ConnectionMetadata struct {
@@ -34,7 +32,7 @@ type ConnectionMetadata struct {
 }
 
 func (m ConnectionMetadata) CanRead() bool {
-	return true
+	return false
 }
 
 func (m ConnectionMetadata) CanWrite() bool {
@@ -42,11 +40,10 @@ func (m ConnectionMetadata) CanWrite() bool {
 }
 
 func (m ConnectionMetadata) CanSubscribe() bool {
-	return false
+	return true
 }
 
-type ModbusConnection struct {
-	unitIdentifier     uint8
+type KnxNetIpConnection struct {
 	messageCodec       spi.MessageCodec
 	options            map[string][]string
 	fieldHandler       spi.PlcFieldHandler
@@ -55,9 +52,8 @@ type ModbusConnection struct {
 	plc4go.PlcConnection
 }
 
-func NewModbusConnection(unitIdentifier uint8, messageCodec spi.MessageCodec, options map[string][]string, fieldHandler spi.PlcFieldHandler) ModbusConnection {
-	return ModbusConnection{
-		unitIdentifier:     unitIdentifier,
+func NewKnxNetIpConnection(messageCodec spi.MessageCodec, options map[string][]string, fieldHandler spi.PlcFieldHandler) KnxNetIpConnection {
+	return KnxNetIpConnection{
 		messageCodec:       messageCodec,
 		options:            options,
 		fieldHandler:       fieldHandler,
@@ -66,7 +62,7 @@ func NewModbusConnection(unitIdentifier uint8, messageCodec spi.MessageCodec, op
 	}
 }
 
-func (m ModbusConnection) Connect() <-chan plc4go.PlcConnectionConnectResult {
+func (m KnxNetIpConnection) Connect() <-chan plc4go.PlcConnectionConnectResult {
 	ch := make(chan plc4go.PlcConnectionConnectResult)
 	go func() {
 		err := m.messageCodec.Connect()
@@ -75,7 +71,7 @@ func (m ModbusConnection) Connect() <-chan plc4go.PlcConnectionConnectResult {
 	return ch
 }
 
-func (m ModbusConnection) Close() <-chan plc4go.PlcConnectionCloseResult {
+func (m KnxNetIpConnection) Close() <-chan plc4go.PlcConnectionCloseResult {
 	// TODO: Implement ...
 	ch := make(chan plc4go.PlcConnectionCloseResult)
 	go func() {
@@ -84,15 +80,15 @@ func (m ModbusConnection) Close() <-chan plc4go.PlcConnectionCloseResult {
 	return ch
 }
 
-func (m ModbusConnection) IsConnected() bool {
+func (m KnxNetIpConnection) IsConnected() bool {
 	panic("implement me")
 }
 
-func (m ModbusConnection) Ping() <-chan plc4go.PlcConnectionPingResult {
+func (m KnxNetIpConnection) Ping() <-chan plc4go.PlcConnectionPingResult {
 	result := make(chan plc4go.PlcConnectionPingResult)
-	diagnosticRequestPdu := driverModel.NewModbusPDUDiagnosticRequest(0, 0x42)
+//	diagnosticRequestPdu := driverModel.NewModbusPDUDiagnosticRequest(0, 0x42)
 	go func() {
-		pingRequest := driverModel.NewModbusTcpADU(1, m.unitIdentifier, diagnosticRequestPdu)
+/*		pingRequest := driverModel.NewModbusTcpADU(1, diagnosticRequestPdu)
 		err := m.messageCodec.Send(pingRequest)
 		if err != nil {
 			result <- plc4go.NewPlcConnectionPingResult(err)
@@ -117,45 +113,46 @@ func (m ModbusConnection) Ping() <-chan plc4go.PlcConnectionPingResult {
 			return
 		}
 		// If we got a valid response (even if it will probably contain an error, we know the remote is available)
-		result <- plc4go.NewPlcConnectionPingResult(nil)
+		result <- plc4go.NewPlcConnectionPingResult(nil)*/
 	}()
 
 	return result
 }
 
-func (m ModbusConnection) GetMetadata() apiModel.PlcConnectionMetadata {
+func (m KnxNetIpConnection) GetMetadata() apiModel.PlcConnectionMetadata {
 	return ConnectionMetadata{}
 }
 
-func (m ModbusConnection) ReadRequestBuilder() apiModel.PlcReadRequestBuilder {
-	return internalModel.NewDefaultPlcReadRequestBuilderWithInterceptor(m.fieldHandler,
-		NewModbusReader(m.unitIdentifier, m.messageCodec), m.requestInterceptor)
+func (m KnxNetIpConnection) ReadRequestBuilder() apiModel.PlcReadRequestBuilder {
+    panic("this connection doesn't support reading")
 }
 
-func (m ModbusConnection) WriteRequestBuilder() apiModel.PlcWriteRequestBuilder {
+func (m KnxNetIpConnection) WriteRequestBuilder() apiModel.PlcWriteRequestBuilder {
 	return internalModel.NewDefaultPlcWriteRequestBuilder(
-		m.fieldHandler, m.valueHandler, NewModbusWriter(m.unitIdentifier, m.messageCodec))
+		m.fieldHandler, m.valueHandler, NewKnxNetIpWriter(m.messageCodec))
 }
 
-func (m ModbusConnection) SubscriptionRequestBuilder() apiModel.PlcSubscriptionRequestBuilder {
-	panic("implement me")
+func (m KnxNetIpConnection) SubscriptionRequestBuilder() apiModel.PlcSubscriptionRequestBuilder {
+    return nil/*internalModel.NewDefaultPlcSubscriptionRequestBuilder(
+        m.fieldHandler, m.valueHandler, NewKnxNetIpSubscriber(m.unitIdentifier, m.messageCodec))*/
 }
 
-func (m ModbusConnection) UnsubscriptionRequestBuilder() apiModel.PlcUnsubscriptionRequestBuilder {
-	panic("implement me")
+func (m KnxNetIpConnection) UnsubscriptionRequestBuilder() apiModel.PlcUnsubscriptionRequestBuilder {
+    return nil/*internalModel.NewDefaultPlcUnsubscriptionRequestBuilder(
+        m.fieldHandler, m.valueHandler, NewKnxNetIpSubscriber(m.unitIdentifier, m.messageCodec))*/
 }
 
-func (m ModbusConnection) GetTransportInstance() transports.TransportInstance {
+func (m KnxNetIpConnection) GetTransportInstance() transports.TransportInstance {
 	if mc, ok := m.messageCodec.(spi.TransportInstanceExposer); ok {
 		return mc.GetTransportInstance()
 	}
 	return nil
 }
 
-func (m ModbusConnection) GetPlcFieldHandler() spi.PlcFieldHandler {
+func (m KnxNetIpConnection) GetPlcFieldHandler() spi.PlcFieldHandler {
 	return m.fieldHandler
 }
 
-func (m ModbusConnection) GetPlcValueHandler() spi.PlcValueHandler {
+func (m KnxNetIpConnection) GetPlcValueHandler() spi.PlcValueHandler {
 	return m.valueHandler
 }
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go
index 8e0746f..7600ff9 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go
@@ -19,15 +19,12 @@
 package knxnetip
 
 import (
-    "encoding/json"
     "errors"
-    "fmt"
     "net/url"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/modbus"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/modbus/readwrite/model"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/spi"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/transports"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/pkg/plc4go"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/modbus"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/transports"
+    "plc4x.apache.org/plc4go/v0/pkg/plc4go"
 )
 
 type KnxNetIpDriver struct {
@@ -80,14 +77,14 @@ func (m KnxNetIpDriver) GetConnection(transportUrl url.URL, transports map[strin
     defaultChanel := make(chan interface{})
     go func() {
         for {
-            msg := <-defaultChanel
-            adu := model.CastModbusTcpADU(msg)
+            _ = <-defaultChanel
+/*            adu := model.CastModbusTcpADU(msg)
             serialized, err := json.Marshal(adu)
             if err != nil {
-                fmt.Errorf("got error serializing adu: %s\n", err.Error())
+                fmt.Printf("got error serializing adu: %s\n", err.Error())
             } else {
                 fmt.Printf("got message in the default handler %s\n", serialized)
-            }
+            }*/
         }
     }()
     codec := modbus.NewModbusMessageCodec(transportInstance, nil)
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpField.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpField.go
index 02fbee5..fee5a54 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpField.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpField.go
@@ -18,24 +18,33 @@
 //
 package knxnetip
 
-import "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/knxnetip/readwrite/model"
+import (
+    "errors"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/knxnetip/readwrite/model"
+    model2 "plc4x.apache.org/plc4go/v0/pkg/plc4go/model"
+)
+
+type KnxNetIpField interface {
+     model2.PlcField
+}
 
 type KnxNetIpGroupAddress3LevelPlcField struct {
-    FieldType   model.KnxDatapointType
+    FieldType   *model.KnxDatapointType
     // 5 Bits: Values 0-31
     MainGroup   string
     // 3 Bits: values 0-7
     MiddleGroup string
     // 8 Bits
     SubGroup    string
+    KnxNetIpField
 }
 
-func NewKnxNetIpGroupAddress3LevelPlcField(FieldType model.KnxDatapointType, MainGroup string, MiddleGroup string, SubGroup string) KnxNetIpGroupAddress3LevelPlcField {
+func NewKnxNetIpGroupAddress3LevelPlcField(fieldType *model.KnxDatapointType, mainGroup string, middleGroup string, subGroup string) KnxNetIpGroupAddress3LevelPlcField {
     return KnxNetIpGroupAddress3LevelPlcField{
-        FieldType:   FieldType,
-        MainGroup:   MainGroup,
-        MiddleGroup: MiddleGroup,
-        SubGroup:    SubGroup,
+        FieldType:   fieldType,
+        MainGroup:   mainGroup,
+        MiddleGroup: middleGroup,
+        SubGroup:    subGroup,
     }
 }
 
@@ -48,18 +57,19 @@ func (k KnxNetIpGroupAddress3LevelPlcField) GetQuantity() uint16 {
 }
 
 type KnxNetIpGroupAddress2LevelPlcField struct {
-    FieldType   model.KnxDatapointType
+    FieldType   *model.KnxDatapointType
     // 5 Bits: Values 0-31
     MainGroup   string
     // 11 Bits
     SubGroup    string
+    KnxNetIpField
 }
 
-func NewKnxNetIpGroupAddress2LevelPlcField(FieldType model.KnxDatapointType, MainGroup string, SubGroup string) KnxNetIpGroupAddress2LevelPlcField {
+func NewKnxNetIpGroupAddress2LevelPlcField(fieldType *model.KnxDatapointType, mainGroup string, subGroup string) KnxNetIpGroupAddress2LevelPlcField {
     return KnxNetIpGroupAddress2LevelPlcField{
-        FieldType:   FieldType,
-        MainGroup:   MainGroup,
-        SubGroup:    SubGroup,
+        FieldType:   fieldType,
+        MainGroup:   mainGroup,
+        SubGroup:    subGroup,
     }
 }
 
@@ -72,15 +82,16 @@ func (k KnxNetIpGroupAddress2LevelPlcField) GetQuantity() uint16 {
 }
 
 type KnxNetIpGroupAddress1LevelPlcField struct {
-    FieldType   model.KnxDatapointType
+    FieldType   *model.KnxDatapointType
     // 16 Bits
     MainGroup   string
+    KnxNetIpField
 }
 
-func NewKnxNetIpGroupAddress1LevelPlcField(FieldType model.KnxDatapointType, MainGroup string) KnxNetIpGroupAddress1LevelPlcField {
+func NewKnxNetIpGroupAddress1LevelPlcField(fieldType *model.KnxDatapointType, mainGroup string) KnxNetIpGroupAddress1LevelPlcField {
     return KnxNetIpGroupAddress1LevelPlcField{
-        FieldType:   FieldType,
-        MainGroup:   MainGroup,
+        FieldType:   fieldType,
+        MainGroup:   mainGroup,
     }
 }
 
@@ -91,3 +102,10 @@ func (k KnxNetIpGroupAddress1LevelPlcField) GetTypeName() string {
 func (k KnxNetIpGroupAddress1LevelPlcField) GetQuantity() uint16 {
     return 1
 }
+
+func CastToKnxNetIpFieldFromPlcField(plcField model2.PlcField) (KnxNetIpField, error) {
+    if knxNetIpField, ok := plcField.(KnxNetIpField); ok {
+        return knxNetIpField, nil
+    }
+    return nil, errors.New("couldn't cast to KnxNetIpField")
+}
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpFieldHandler.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpFieldHandler.go
index a0a8277..21fd7c6 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpFieldHandler.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpFieldHandler.go
@@ -20,10 +20,10 @@ package knxnetip
 
 import (
     "errors"
-    model2 "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/knxnetip/readwrite/model"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/spi"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/pkg/plc4go/model"
+    model2 "plc4x.apache.org/plc4go/v0/internal/plc4go/knxnetip/readwrite/model"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/pkg/plc4go/model"
     "regexp"
 )
 
@@ -63,21 +63,21 @@ func (m FieldHandler) ParseQuery(query string) (model.PlcField, error) {
         if ok {
             fieldType = model2.KnxDatapointTypeValueOf(fieldTypeName)
         }
-        return NewKnxNetIpGroupAddress3LevelPlcField(fieldType, match["mainGroup"], match["middleGroup"], match["subGroup"]), nil
+        return NewKnxNetIpGroupAddress3LevelPlcField(&fieldType, match["mainGroup"], match["middleGroup"], match["subGroup"]), nil
     } else if match := utils.GetSubgropMatches(m.knxNetIpGroupAddress2Level, query); match != nil {
         fieldTypeName, ok := match["datatype"]
         var fieldType model2.KnxDatapointType
         if ok {
             fieldType = model2.KnxDatapointTypeValueOf(fieldTypeName)
         }
-        return NewKnxNetIpGroupAddress2LevelPlcField(fieldType, match["mainGroup"], match["subGroup"]), nil
+        return NewKnxNetIpGroupAddress2LevelPlcField(&fieldType, match["mainGroup"], match["subGroup"]), nil
     } else if match := utils.GetSubgropMatches(m.knxNetIpGroupAddress1Level, query); match != nil {
         fieldTypeName, ok := match["datatype"]
         var fieldType model2.KnxDatapointType
         if ok {
             fieldType = model2.KnxDatapointTypeValueOf(fieldTypeName)
         }
-        return NewKnxNetIpGroupAddress1LevelPlcField(fieldType, match["mainGroup"]), nil
+        return NewKnxNetIpGroupAddress1LevelPlcField(&fieldType, match["mainGroup"]), nil
     }
     return nil, errors.New("Invalid address format for address '" + query + "'")
 }
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpMessageCodec.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpMessageCodec.go
index 76782de..c6d46f2 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpMessageCodec.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpMessageCodec.go
@@ -21,9 +21,9 @@ package knxnetip
 import (
     "errors"
 	"fmt"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/knxnetip/readwrite/model"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/transports"
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/knxnetip/readwrite/model"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/transports"
+	"plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 	"time"
 )
 
@@ -51,7 +51,11 @@ func NewKnxNetIpMessageCodec(transportInstance transports.TransportInstance, def
 }
 
 func (m *KnxNetIpMessageCodec) Connect() error {
-	return m.transportInstance.Connect()
+	// "connect" to the remote UDP server
+    err := m.transportInstance.Connect()
+	
+
+	return err
 }
 
 func (m *KnxNetIpMessageCodec) Disconnect() error {
@@ -60,10 +64,10 @@ func (m *KnxNetIpMessageCodec) Disconnect() error {
 
 func (m *KnxNetIpMessageCodec) Send(message interface{}) error {
 	// Cast the message to the correct type of struct
-	knxMessage := model.CastKNXNetIPMessage(message)
+	knxMessage := model.CastKnxNetIpMessage(message)
 	// Serialize the request
 	wb := utils.NewWriteBuffer()
-	err := model.KNXNetIPMessageSerialize(*wb)
+	err := knxMessage.Serialize(*wb)
 	if err != nil {
 		return errors.New("error serializing request " + err.Error())
 	}
@@ -76,7 +80,7 @@ func (m *KnxNetIpMessageCodec) Send(message interface{}) error {
 	return nil
 }
 
-func (m *ModbusMessageCodec) Receive() (interface{}, error) {
+func (m *KnxNetIpMessageCodec) Receive() (interface{}, error) {
 	// We need at least 6 bytes in order to know how big the packet is in total
 	if num, err := m.transportInstance.GetNumReadableBytes(); (err == nil) && (num >= 6) {
 		data, err := m.transportInstance.PeekReadableBytes(6)
@@ -93,7 +97,7 @@ func (m *ModbusMessageCodec) Receive() (interface{}, error) {
 				return nil, nil
 			}
 			rb := utils.NewReadBuffer(data)
-			adu, err := model.ModbusTcpADUParse(rb, true)
+			adu, err := model.KnxNetIpMessageParse(rb)
 			if err != nil {
 				// TODO: Possibly clean up ...
 				return nil, nil
@@ -104,9 +108,9 @@ func (m *ModbusMessageCodec) Receive() (interface{}, error) {
 	return nil, nil
 }
 
-func (m *ModbusMessageCodec) Expect(check func(interface{}) bool) chan interface{} {
+func (m *KnxNetIpMessageCodec) Expect(check func(interface{}) bool) chan interface{} {
 	responseChanel := make(chan interface{})
-	expectation := ModbusExpectation{
+	expectation := KnxNetIpExpectation{
 		timestamp:       time.Now(),
 		check:           check,
 		responseChannel: responseChanel,
@@ -115,14 +119,14 @@ func (m *ModbusMessageCodec) Expect(check func(interface{}) bool) chan interface
 	return responseChanel
 }
 
-func work(codec *ModbusMessageCodec) {
+func work(codec *KnxNetIpMessageCodec) {
 	// Start an endless loop
 	// TODO: Provide some means to terminate this ...
 	for {
 		if len(codec.expectations) > 0 {
 			message, err := codec.Receive()
 			if err != nil {
-				fmt.Errorf("got an error reading from transport %s", err.Error())
+				fmt.Printf("got an error reading from transport %s", err.Error())
 			} else if message != nil {
 				messageHandled := false
 				// Go through all expectations
@@ -153,6 +157,6 @@ func work(codec *ModbusMessageCodec) {
 	}
 }
 
-func (m ModbusMessageCodec) GetTransportInstance() transports.TransportInstance {
+func (m KnxNetIpMessageCodec) GetTransportInstance() transports.TransportInstance {
 	return m.transportInstance
 }
diff --git a/plc4go/internal/plc4go/modbus/ModbusValueHandler.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpValueHandler.go
similarity index 64%
copy from plc4go/internal/plc4go/modbus/ModbusValueHandler.go
copy to plc4go/internal/plc4go/knxnetip/KnxNetIpValueHandler.go
index 1890279..7d56f21 100644
--- a/plc4go/internal/plc4go/modbus/ModbusValueHandler.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpValueHandler.go
@@ -16,16 +16,25 @@
 // specific language governing permissions and limitations
 // under the License.
 //
-package modbus
+package knxnetip
 
 import (
-	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/model/values"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
+    "plc4x.apache.org/plc4go/v0/pkg/plc4go/model"
+    "plc4x.apache.org/plc4go/v0/pkg/plc4go/values"
 )
 
-type ValueHandler struct {
-	values.IEC61131ValueHandler
+type KnxNetIpValueHandler struct {
+    spi.PlcValueHandler
 }
 
-func NewValueHandler() ValueHandler {
-	return ValueHandler{}
+func NewValueHandler() KnxNetIpValueHandler {
+    return KnxNetIpValueHandler{}
 }
+
+func (m KnxNetIpValueHandler) NewPlcValue(field model.PlcField, value interface{}) (values.PlcValue, error) {
+    return nil, nil
+}
+
+
+
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go
new file mode 100644
index 0000000..e1be588
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go
@@ -0,0 +1,72 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package knxnetip
+
+import (
+	"errors"
+	knxnetipModel "plc4x.apache.org/plc4go/v0/internal/plc4go/knxnetip/readwrite/model"
+	"plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
+	"plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+	"plc4x.apache.org/plc4go/v0/pkg/plc4go/model"
+)
+
+type KnxNetIpWriter struct {
+	messageCodec          spi.MessageCodec
+	spi.PlcWriter
+}
+
+func NewKnxNetIpWriter(messageCodec spi.MessageCodec) KnxNetIpWriter {
+	return KnxNetIpWriter{
+		messageCodec:          messageCodec,
+	}
+}
+
+func (m KnxNetIpWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWriteRequestResult {
+	result := make(chan model.PlcWriteRequestResult)
+	// If we are requesting only one field, use a
+	if len(writeRequest.GetFieldNames()) == 1 {
+        fieldName := writeRequest.GetFieldNames()[0]
+
+        // Get the KnxNetIp field instance from the request
+        field := writeRequest.GetField(fieldName)
+        knxNetIpField, err := CastToKnxNetIpFieldFromPlcField(field)
+        if err != nil {
+            result <- model.PlcWriteRequestResult{
+                Request:  writeRequest,
+                Response: nil,
+                Err:      errors.New("invalid field item type"),
+            }
+            return result
+        }
+
+        // Get the value from the request and serialize it to a byte array
+        value := writeRequest.GetValue(fieldName)
+        io := utils.NewWriteBuffer()
+        if err := knxnetipModel.KnxDatapointSerialize(io, value, knxNetIpField.GetTypeName()); err != nil {
+            result <- model.PlcWriteRequestResult{
+                Request:  writeRequest,
+                Response: nil,
+                Err:      errors.New("error serializing value: " + err.Error()),
+            }
+            return result
+        }
+        //data := utils.Uint8ToInt8(io.GetBytes())
+    }
+	return result
+}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/ParserHelper.go b/plc4go/internal/plc4go/knxnetip/readwrite/ParserHelper.go
index 901822b..cb81291 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/ParserHelper.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/ParserHelper.go
@@ -20,9 +20,9 @@ package model
 
 import (
     "errors"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/knxnetip/readwrite/model"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/spi"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/knxnetip/readwrite/model"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 type KnxnetipParserHelper struct {
@@ -36,16 +36,12 @@ func (m KnxnetipParserHelper) Parse(typeName string, arguments []string, io *uti
         return model.HPAIControlEndpointParse(io)
     case "TunnelingResponseDataBlock":
         return model.TunnelingResponseDataBlockParse(io)
+    case "KnxAddress":
+        return model.KnxAddressParse(io)
     case "ConnectionResponseDataBlock":
         return model.ConnectionResponseDataBlockParse(io)
     case "TunnelingRequestDataBlock":
         return model.TunnelingRequestDataBlockParse(io)
-    case "KNXGroupAddress":
-        numLevels, err := utils.StrToUint8(arguments[0])
-        if err != nil {
-            return nil, err
-        }
-        return model.KNXGroupAddressParse(io, numLevels)
     case "DIBDeviceInfo":
         return model.DIBDeviceInfoParse(io)
     case "DeviceConfigurationRequestDataBlock":
@@ -60,14 +56,10 @@ func (m KnxnetipParserHelper) Parse(typeName string, arguments []string, io *uti
         return model.HPAIDiscoveryEndpointParse(io)
     case "ProjectInstallationIdentifier":
         return model.ProjectInstallationIdentifierParse(io)
-    case "KNXAddress":
-        return model.KNXAddressParse(io)
     case "CEMIDataFrame":
         return model.CEMIDataFrameParse(io)
     case "ServiceId":
         return model.ServiceIdParse(io)
-    case "KNXNetIPMessage":
-        return model.KNXNetIPMessageParse(io)
     case "HPAIDataEndpoint":
         return model.HPAIDataEndpointParse(io)
     case "RelativeTimestamp":
@@ -78,8 +70,16 @@ func (m KnxnetipParserHelper) Parse(typeName string, arguments []string, io *uti
             return nil, err
         }
         return model.CEMIParse(io, size)
+    case "KnxGroupAddress":
+        numLevels, err := utils.StrToUint8(arguments[0])
+        if err != nil {
+            return nil, err
+        }
+        return model.KnxGroupAddressParse(io, numLevels)
     case "MACAddress":
         return model.MACAddressParse(io)
+    case "KnxNetIpMessage":
+        return model.KnxNetIpMessageParse(io)
     case "CEMIFrame":
         return model.CEMIFrameParse(io)
     case "DeviceStatus":
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/XmlParserHelper.go b/plc4go/internal/plc4go/knxnetip/readwrite/XmlParserHelper.go
index 3e15800..c01894f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/XmlParserHelper.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/XmlParserHelper.go
@@ -21,8 +21,8 @@ package model
 import (
     "encoding/xml"
     "errors"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/knxnetip/readwrite/model"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/spi"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/knxnetip/readwrite/model"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
 )
 
 type KnxnetipXmlParserHelper struct {
@@ -51,22 +51,22 @@ func (m KnxnetipXmlParserHelper) Parse(typeName string, xmlString string) (spi.M
             return nil, errors.New("error unmarshalling xml: " + err.Error())
         }
         return obj, nil
-    case "ConnectionResponseDataBlock":
-        var obj *model.ConnectionResponseDataBlock
+    case "KnxAddress":
+        var obj *model.KnxAddress
         err := xml.Unmarshal([]byte(xmlString), &obj)
         if err != nil {
             return nil, errors.New("error unmarshalling xml: " + err.Error())
         }
         return obj, nil
-    case "TunnelingRequestDataBlock":
-        var obj *model.TunnelingRequestDataBlock
+    case "ConnectionResponseDataBlock":
+        var obj *model.ConnectionResponseDataBlock
         err := xml.Unmarshal([]byte(xmlString), &obj)
         if err != nil {
             return nil, errors.New("error unmarshalling xml: " + err.Error())
         }
         return obj, nil
-    case "KNXGroupAddress":
-        var obj *model.KNXGroupAddress
+    case "TunnelingRequestDataBlock":
+        var obj *model.TunnelingRequestDataBlock
         err := xml.Unmarshal([]byte(xmlString), &obj)
         if err != nil {
             return nil, errors.New("error unmarshalling xml: " + err.Error())
@@ -121,13 +121,6 @@ func (m KnxnetipXmlParserHelper) Parse(typeName string, xmlString string) (spi.M
             return nil, errors.New("error unmarshalling xml: " + err.Error())
         }
         return obj, nil
-    case "KNXAddress":
-        var obj *model.KNXAddress
-        err := xml.Unmarshal([]byte(xmlString), &obj)
-        if err != nil {
-            return nil, errors.New("error unmarshalling xml: " + err.Error())
-        }
-        return obj, nil
     case "CEMIDataFrame":
         var obj *model.CEMIDataFrame
         err := xml.Unmarshal([]byte(xmlString), &obj)
@@ -142,13 +135,6 @@ func (m KnxnetipXmlParserHelper) Parse(typeName string, xmlString string) (spi.M
             return nil, errors.New("error unmarshalling xml: " + err.Error())
         }
         return obj, nil
-    case "KNXNetIPMessage":
-        var obj *model.KNXNetIPMessage
-        err := xml.Unmarshal([]byte(xmlString), &obj)
-        if err != nil {
-            return nil, errors.New("error unmarshalling xml: " + err.Error())
-        }
-        return obj, nil
     case "HPAIDataEndpoint":
         var obj *model.HPAIDataEndpoint
         err := xml.Unmarshal([]byte(xmlString), &obj)
@@ -170,6 +156,13 @@ func (m KnxnetipXmlParserHelper) Parse(typeName string, xmlString string) (spi.M
             return nil, errors.New("error unmarshalling xml: " + err.Error())
         }
         return obj, nil
+    case "KnxGroupAddress":
+        var obj *model.KnxGroupAddress
+        err := xml.Unmarshal([]byte(xmlString), &obj)
+        if err != nil {
+            return nil, errors.New("error unmarshalling xml: " + err.Error())
+        }
+        return obj, nil
     case "MACAddress":
         var obj *model.MACAddress
         err := xml.Unmarshal([]byte(xmlString), &obj)
@@ -177,6 +170,13 @@ func (m KnxnetipXmlParserHelper) Parse(typeName string, xmlString string) (spi.M
             return nil, errors.New("error unmarshalling xml: " + err.Error())
         }
         return obj, nil
+    case "KnxNetIpMessage":
+        var obj *model.KnxNetIpMessage
+        err := xml.Unmarshal([]byte(xmlString), &obj)
+        if err != nil {
+            return nil, errors.New("error unmarshalling xml: " + err.Error())
+        }
+        return obj, nil
     case "CEMIFrame":
         var obj *model.CEMIFrame
         err := xml.Unmarshal([]byte(xmlString), &obj)
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go
new file mode 100644
index 0000000..e55b7b4
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go
@@ -0,0 +1,114 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+)
+
+type APCI uint8
+
+type IAPCI interface {
+    Serialize(io utils.WriteBuffer) error
+}
+
+const(
+    APCI_GROUP_VALUE_READ_PDU APCI = 0x0
+    APCI_GROUP_VALUE_RESPONSE_PDU APCI = 0x1
+    APCI_GROUP_VALUE_WRITE_PDU APCI = 0x2
+    APCI_INDIVIDUAL_ADDRESS_WRITE_PDU APCI = 0x3
+    APCI_INDIVIDUAL_ADDRESS_READ_PDU APCI = 0x4
+    APCI_INDIVIDUAL_ADDRESS_RESPONSE_PDU APCI = 0x5
+    APCI_ADC_READ_PDU APCI = 0x6
+    APCI_ADC_RESPONSE_PDU APCI = 0x7
+    APCI_MEMORY_READ_PDU APCI = 0x8
+    APCI_MEMORY_RESPONSE_PDU APCI = 0x9
+    APCI_MEMORY_WRITE_PDU APCI = 0xA
+    APCI_USER_MESSAGE_PDU APCI = 0xB
+    APCI_DEVICE_DESCRIPTOR_READ_PDU APCI = 0xC
+    APCI_DEVICE_DESCRIPTOR_RESPONSE_PDU APCI = 0xD
+    APCI_RESTART_PDU APCI = 0xE
+    APCI_OTHER_PDU APCI = 0xF
+)
+
+func APCIValueOf(value uint8) APCI {
+    switch value {
+        case 0x0:
+            return APCI_GROUP_VALUE_READ_PDU
+        case 0x1:
+            return APCI_GROUP_VALUE_RESPONSE_PDU
+        case 0x2:
+            return APCI_GROUP_VALUE_WRITE_PDU
+        case 0x3:
+            return APCI_INDIVIDUAL_ADDRESS_WRITE_PDU
+        case 0x4:
+            return APCI_INDIVIDUAL_ADDRESS_READ_PDU
+        case 0x5:
+            return APCI_INDIVIDUAL_ADDRESS_RESPONSE_PDU
+        case 0x6:
+            return APCI_ADC_READ_PDU
+        case 0x7:
+            return APCI_ADC_RESPONSE_PDU
+        case 0x8:
+            return APCI_MEMORY_READ_PDU
+        case 0x9:
+            return APCI_MEMORY_RESPONSE_PDU
+        case 0xA:
+            return APCI_MEMORY_WRITE_PDU
+        case 0xB:
+            return APCI_USER_MESSAGE_PDU
+        case 0xC:
+            return APCI_DEVICE_DESCRIPTOR_READ_PDU
+        case 0xD:
+            return APCI_DEVICE_DESCRIPTOR_RESPONSE_PDU
+        case 0xE:
+            return APCI_RESTART_PDU
+        case 0xF:
+            return APCI_OTHER_PDU
+    }
+    return 0
+}
+
+func CastAPCI(structType interface{}) APCI {
+    castFunc := func(typ interface{}) APCI {
+        if sAPCI, ok := typ.(APCI); ok {
+            return sAPCI
+        }
+        return 0
+    }
+    return castFunc(structType)
+}
+
+func (m APCI) LengthInBits() uint16 {
+    return 4
+}
+
+func (m APCI) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func APCIParse(io *utils.ReadBuffer) (APCI, error) {
+    // TODO: Implement ...
+    return 0, nil
+}
+
+func (e APCI) Serialize(io utils.WriteBuffer) error {
+    // TODO: Implement ...
+    return nil
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
similarity index 52%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
copy to plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
index 61e5b71..826b930 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
@@ -22,59 +22,59 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "reflect"
     "strings"
 )
 
 // The data-structure of this message
-type APDU struct {
-    Child IAPDUChild
-    IAPDU
-    IAPDUParent
+type CEMI struct {
+    Child ICEMIChild
+    ICEMI
+    ICEMIParent
 }
 
 // The corresponding interface
-type IAPDU interface {
-    ApduType() uint8
+type ICEMI interface {
+    MessageCode() uint8
     LengthInBytes() uint16
     LengthInBits() uint16
     Serialize(io utils.WriteBuffer) error
     xml.Marshaler
 }
 
-type IAPDUParent interface {
-    SerializeParent(io utils.WriteBuffer, child IAPDU, serializeChildFunction func() error) error
+type ICEMIParent interface {
+    SerializeParent(io utils.WriteBuffer, child ICEMI, serializeChildFunction func() error) error
 }
 
-type IAPDUChild interface {
+type ICEMIChild interface {
     Serialize(io utils.WriteBuffer) error
-    InitializeParent(parent *APDU)
-    IAPDU
+    InitializeParent(parent *CEMI)
+    ICEMI
 }
 
-func NewAPDU() *APDU {
-    return &APDU{}
+func NewCEMI() *CEMI {
+    return &CEMI{}
 }
 
-func CastAPDU(structType interface{}) APDU {
-    castFunc := func(typ interface{}) APDU {
-        if casted, ok := typ.(APDU); ok {
+func CastCEMI(structType interface{}) CEMI {
+    castFunc := func(typ interface{}) CEMI {
+        if casted, ok := typ.(CEMI); ok {
             return casted
         }
-        if casted, ok := typ.(*APDU); ok {
+        if casted, ok := typ.(*CEMI); ok {
             return *casted
         }
-        return APDU{}
+        return CEMI{}
     }
     return castFunc(structType)
 }
 
-func (m *APDU) LengthInBits() uint16 {
+func (m *CEMI) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
-    // Discriminator Field (apduType)
-    lengthInBits += 4
+    // Discriminator Field (messageCode)
+    lengthInBits += 8
 
     // Length of sub-type elements will be added by sub-type...
     lengthInBits += m.Child.LengthInBits()
@@ -82,38 +82,44 @@ func (m *APDU) LengthInBits() uint16 {
     return lengthInBits
 }
 
-func (m *APDU) LengthInBytes() uint16 {
+func (m *CEMI) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func APDUParse(io *utils.ReadBuffer, apduLength uint16) (*APDU, error) {
+func CEMIParse(io *utils.ReadBuffer, size uint8) (*CEMI, error) {
 
-    // Discriminator Field (apduType) (Used as input to a switch field)
-    apduType, _apduTypeErr := io.ReadUint8(4)
-    if _apduTypeErr != nil {
-        return nil, errors.New("Error parsing 'apduType' field " + _apduTypeErr.Error())
+    // Discriminator Field (messageCode) (Used as input to a switch field)
+    messageCode, _messageCodeErr := io.ReadUint8(8)
+    if _messageCodeErr != nil {
+        return nil, errors.New("Error parsing 'messageCode' field " + _messageCodeErr.Error())
     }
 
     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-    var _parent *APDU
+    var _parent *CEMI
     var typeSwitchError error
     switch {
-    case apduType == 0x0:
-        _parent, typeSwitchError = APDUConfirmedRequestParse(io, apduLength)
-    case apduType == 0x1:
-        _parent, typeSwitchError = APDUUnconfirmedRequestParse(io, apduLength)
-    case apduType == 0x2:
-        _parent, typeSwitchError = APDUSimpleAckParse(io)
-    case apduType == 0x3:
-        _parent, typeSwitchError = APDUComplexAckParse(io)
-    case apduType == 0x4:
-        _parent, typeSwitchError = APDUSegmentAckParse(io)
-    case apduType == 0x5:
-        _parent, typeSwitchError = APDUErrorParse(io)
-    case apduType == 0x6:
-        _parent, typeSwitchError = APDURejectParse(io)
-    case apduType == 0x7:
-        _parent, typeSwitchError = APDUAbortParse(io)
+    case messageCode == 0x11:
+        _parent, typeSwitchError = CEMIDataReqParse(io)
+    case messageCode == 0x2E:
+        _parent, typeSwitchError = CEMIDataConParse(io)
+    case messageCode == 0x29:
+        _parent, typeSwitchError = CEMIDataIndParse(io)
+    case messageCode == 0x10:
+        _parent, typeSwitchError = CEMIRawReqParse(io)
+    case messageCode == 0x2F:
+        _parent, typeSwitchError = CEMIRawConParse(io)
+    case messageCode == 0x2D:
+        _parent, typeSwitchError = CEMIRawIndParse(io)
+    case messageCode == 0x13:
+        _parent, typeSwitchError = CEMIPollDataReqParse(io)
+    case messageCode == 0x25:
+        _parent, typeSwitchError = CEMIPollDataConParse(io)
+    case messageCode == 0x2B:
+        _parent, typeSwitchError = CEMIBusmonIndParse(io)
+    case messageCode == 0xFC:
+        _parent, typeSwitchError = CEMIMPropReadReqParse(io)
+    case messageCode == 0xFB:
+        _parent, typeSwitchError = CEMIMPropReadConParse(io)
     }
     if typeSwitchError != nil {
         return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
@@ -124,17 +130,17 @@ func APDUParse(io *utils.ReadBuffer, apduLength uint16) (*APDU, error) {
     return _parent, nil
 }
 
-func (m *APDU) Serialize(io utils.WriteBuffer) error {
+func (m *CEMI) Serialize(io utils.WriteBuffer) error {
     return m.Child.Serialize(io)
 }
 
-func (m *APDU) SerializeParent(io utils.WriteBuffer, child IAPDU, serializeChildFunction func() error) error {
+func (m *CEMI) SerializeParent(io utils.WriteBuffer, child ICEMI, serializeChildFunction func() error) error {
 
-    // Discriminator Field (apduType) (Used as input to a switch field)
-    apduType := uint8(child.ApduType())
-    _apduTypeErr := io.WriteUint8(4, (apduType))
-    if _apduTypeErr != nil {
-        return errors.New("Error serializing 'apduType' field " + _apduTypeErr.Error())
+    // Discriminator Field (messageCode) (Used as input to a switch field)
+    messageCode := uint8(child.MessageCode())
+    _messageCodeErr := io.WriteUint8(8, (messageCode))
+    if _messageCodeErr != nil {
+        return errors.New("Error serializing 'messageCode' field " + _messageCodeErr.Error())
     }
 
     // Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
@@ -146,7 +152,7 @@ func (m *APDU) SerializeParent(io utils.WriteBuffer, child IAPDU, serializeChild
     return nil
 }
 
-func (m *APDU) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+func (m *CEMI) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
     var token xml.Token
     var err error
     for {
@@ -163,10 +169,10 @@ func (m *APDU) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
             switch tok.Name.Local {
                 default:
                     switch start.Attr[0].Value {
-                        case "org.apache.plc4x.java.bacnetip.readwrite.APDUConfirmedRequest":
-                            var dt *APDUConfirmedRequest
+                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIDataReq":
+                            var dt *CEMIDataReq
                             if m.Child != nil {
-                                dt = m.Child.(*APDUConfirmedRequest)
+                                dt = m.Child.(*CEMIDataReq)
                             }
                             if err := d.DecodeElement(&dt, &tok); err != nil {
                                 return err
@@ -175,10 +181,10 @@ func (m *APDU) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
                                 dt.Parent = m
                                 m.Child = dt
                             }
-                        case "org.apache.plc4x.java.bacnetip.readwrite.APDUUnconfirmedRequest":
-                            var dt *APDUUnconfirmedRequest
+                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIDataCon":
+                            var dt *CEMIDataCon
                             if m.Child != nil {
-                                dt = m.Child.(*APDUUnconfirmedRequest)
+                                dt = m.Child.(*CEMIDataCon)
                             }
                             if err := d.DecodeElement(&dt, &tok); err != nil {
                                 return err
@@ -187,10 +193,10 @@ func (m *APDU) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
                                 dt.Parent = m
                                 m.Child = dt
                             }
-                        case "org.apache.plc4x.java.bacnetip.readwrite.APDUSimpleAck":
-                            var dt *APDUSimpleAck
+                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIDataInd":
+                            var dt *CEMIDataInd
                             if m.Child != nil {
-                                dt = m.Child.(*APDUSimpleAck)
+                                dt = m.Child.(*CEMIDataInd)
                             }
                             if err := d.DecodeElement(&dt, &tok); err != nil {
                                 return err
@@ -199,10 +205,10 @@ func (m *APDU) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
                                 dt.Parent = m
                                 m.Child = dt
                             }
-                        case "org.apache.plc4x.java.bacnetip.readwrite.APDUComplexAck":
-                            var dt *APDUComplexAck
+                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIRawReq":
+                            var dt *CEMIRawReq
                             if m.Child != nil {
-                                dt = m.Child.(*APDUComplexAck)
+                                dt = m.Child.(*CEMIRawReq)
                             }
                             if err := d.DecodeElement(&dt, &tok); err != nil {
                                 return err
@@ -211,10 +217,10 @@ func (m *APDU) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
                                 dt.Parent = m
                                 m.Child = dt
                             }
-                        case "org.apache.plc4x.java.bacnetip.readwrite.APDUSegmentAck":
-                            var dt *APDUSegmentAck
+                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIRawCon":
+                            var dt *CEMIRawCon
                             if m.Child != nil {
-                                dt = m.Child.(*APDUSegmentAck)
+                                dt = m.Child.(*CEMIRawCon)
                             }
                             if err := d.DecodeElement(&dt, &tok); err != nil {
                                 return err
@@ -223,10 +229,10 @@ func (m *APDU) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
                                 dt.Parent = m
                                 m.Child = dt
                             }
-                        case "org.apache.plc4x.java.bacnetip.readwrite.APDUError":
-                            var dt *APDUError
+                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIRawInd":
+                            var dt *CEMIRawInd
                             if m.Child != nil {
-                                dt = m.Child.(*APDUError)
+                                dt = m.Child.(*CEMIRawInd)
                             }
                             if err := d.DecodeElement(&dt, &tok); err != nil {
                                 return err
@@ -235,10 +241,10 @@ func (m *APDU) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
                                 dt.Parent = m
                                 m.Child = dt
                             }
-                        case "org.apache.plc4x.java.bacnetip.readwrite.APDUReject":
-                            var dt *APDUReject
+                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIPollDataReq":
+                            var dt *CEMIPollDataReq
                             if m.Child != nil {
-                                dt = m.Child.(*APDUReject)
+                                dt = m.Child.(*CEMIPollDataReq)
                             }
                             if err := d.DecodeElement(&dt, &tok); err != nil {
                                 return err
@@ -247,10 +253,46 @@ func (m *APDU) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
                                 dt.Parent = m
                                 m.Child = dt
                             }
-                        case "org.apache.plc4x.java.bacnetip.readwrite.APDUAbort":
-                            var dt *APDUAbort
+                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIPollDataCon":
+                            var dt *CEMIPollDataCon
                             if m.Child != nil {
-                                dt = m.Child.(*APDUAbort)
+                                dt = m.Child.(*CEMIPollDataCon)
+                            }
+                            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.knxnetip.readwrite.CEMIBusmonInd":
+                            var dt *CEMIBusmonInd
+                            if m.Child != nil {
+                                dt = m.Child.(*CEMIBusmonInd)
+                            }
+                            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.knxnetip.readwrite.CEMIMPropReadReq":
+                            var dt *CEMIMPropReadReq
+                            if m.Child != nil {
+                                dt = m.Child.(*CEMIMPropReadReq)
+                            }
+                            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.knxnetip.readwrite.CEMIMPropReadCon":
+                            var dt *CEMIMPropReadCon
+                            if m.Child != nil {
+                                dt = m.Child.(*CEMIMPropReadCon)
                             }
                             if err := d.DecodeElement(&dt, &tok); err != nil {
                                 return err
@@ -265,9 +307,9 @@ func (m *APDU) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
     }
 }
 
-func (m *APDU) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+func (m *CEMI) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     className := reflect.TypeOf(m.Child).String()
-    className = "org.apache.plc4x.java.bacnetip.readwrite." + className[strings.LastIndex(className, ".") + 1:]
+    className = "org.apache.plc4x.java.knxnetip.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 {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
similarity index 51%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
copy to plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
index 8946810..d8cc9e3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
@@ -22,134 +22,107 @@ import (
     "encoding/xml"
     "errors"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "reflect"
     "strings"
 )
 
 // The data-structure of this message
-type NLM struct {
-    VendorId *uint16
-    Child INLMChild
-    INLM
-    INLMParent
+type CEMIAdditionalInformation struct {
+    Child ICEMIAdditionalInformationChild
+    ICEMIAdditionalInformation
+    ICEMIAdditionalInformationParent
 }
 
 // The corresponding interface
-type INLM interface {
-    MessageType() uint8
+type ICEMIAdditionalInformation interface {
+    AdditionalInformationType() uint8
     LengthInBytes() uint16
     LengthInBits() uint16
     Serialize(io utils.WriteBuffer) error
     xml.Marshaler
 }
 
-type INLMParent interface {
-    SerializeParent(io utils.WriteBuffer, child INLM, serializeChildFunction func() error) error
+type ICEMIAdditionalInformationParent interface {
+    SerializeParent(io utils.WriteBuffer, child ICEMIAdditionalInformation, serializeChildFunction func() error) error
 }
 
-type INLMChild interface {
+type ICEMIAdditionalInformationChild interface {
     Serialize(io utils.WriteBuffer) error
-    InitializeParent(parent *NLM, vendorId *uint16)
-    INLM
+    InitializeParent(parent *CEMIAdditionalInformation)
+    ICEMIAdditionalInformation
 }
 
-func NewNLM(vendorId *uint16) *NLM {
-    return &NLM{VendorId: vendorId}
+func NewCEMIAdditionalInformation() *CEMIAdditionalInformation {
+    return &CEMIAdditionalInformation{}
 }
 
-func CastNLM(structType interface{}) NLM {
-    castFunc := func(typ interface{}) NLM {
-        if casted, ok := typ.(NLM); ok {
+func CastCEMIAdditionalInformation(structType interface{}) CEMIAdditionalInformation {
+    castFunc := func(typ interface{}) CEMIAdditionalInformation {
+        if casted, ok := typ.(CEMIAdditionalInformation); ok {
             return casted
         }
-        if casted, ok := typ.(*NLM); ok {
+        if casted, ok := typ.(*CEMIAdditionalInformation); ok {
             return *casted
         }
-        return NLM{}
+        return CEMIAdditionalInformation{}
     }
     return castFunc(structType)
 }
 
-func (m *NLM) LengthInBits() uint16 {
+func (m *CEMIAdditionalInformation) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
-    // Discriminator Field (messageType)
+    // Discriminator Field (additionalInformationType)
     lengthInBits += 8
 
-    // Optional Field (vendorId)
-    if m.VendorId != nil {
-        lengthInBits += 16
-    }
-
     // Length of sub-type elements will be added by sub-type...
     lengthInBits += m.Child.LengthInBits()
 
     return lengthInBits
 }
 
-func (m *NLM) LengthInBytes() uint16 {
+func (m *CEMIAdditionalInformation) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func NLMParse(io *utils.ReadBuffer, apduLength uint16) (*NLM, error) {
-
-    // Discriminator Field (messageType) (Used as input to a switch field)
-    messageType, _messageTypeErr := io.ReadUint8(8)
-    if _messageTypeErr != nil {
-        return nil, errors.New("Error parsing 'messageType' field " + _messageTypeErr.Error())
-    }
-
-    // Optional Field (vendorId) (Can be skipped, if a given expression evaluates to false)
-    var vendorId *uint16 = nil
-    if bool(bool(bool((messageType) >= ((128))))) && bool(bool(bool((messageType) <= ((255))))) {
-        _val, _err := io.ReadUint16(16)
-        if _err != nil {
-            return nil, errors.New("Error parsing 'vendorId' field " + _err.Error())
-        }
+func CEMIAdditionalInformationParse(io *utils.ReadBuffer) (*CEMIAdditionalInformation, error) {
 
-        vendorId = &_val
+    // Discriminator Field (additionalInformationType) (Used as input to a switch field)
+    additionalInformationType, _additionalInformationTypeErr := io.ReadUint8(8)
+    if _additionalInformationTypeErr != nil {
+        return nil, errors.New("Error parsing 'additionalInformationType' field " + _additionalInformationTypeErr.Error())
     }
 
     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-    var _parent *NLM
+    var _parent *CEMIAdditionalInformation
     var typeSwitchError error
     switch {
-    case messageType == 0x0:
-        _parent, typeSwitchError = NLMWhoIsRouterToNetworkParse(io, apduLength, messageType)
-    case messageType == 0x1:
-        _parent, typeSwitchError = NLMIAmRouterToNetworkParse(io, apduLength, messageType)
+    case additionalInformationType == 0x03:
+        _parent, typeSwitchError = CEMIAdditionalInformationBusmonitorInfoParse(io)
+    case additionalInformationType == 0x04:
+        _parent, typeSwitchError = CEMIAdditionalInformationRelativeTimestampParse(io)
     }
     if typeSwitchError != nil {
         return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
     }
 
     // Finish initializing
-    _parent.Child.InitializeParent(_parent, vendorId)
+    _parent.Child.InitializeParent(_parent)
     return _parent, nil
 }
 
-func (m *NLM) Serialize(io utils.WriteBuffer) error {
+func (m *CEMIAdditionalInformation) Serialize(io utils.WriteBuffer) error {
     return m.Child.Serialize(io)
 }
 
-func (m *NLM) SerializeParent(io utils.WriteBuffer, child INLM, serializeChildFunction func() error) error {
+func (m *CEMIAdditionalInformation) SerializeParent(io utils.WriteBuffer, child ICEMIAdditionalInformation, serializeChildFunction func() error) error {
 
-    // Discriminator Field (messageType) (Used as input to a switch field)
-    messageType := uint8(child.MessageType())
-    _messageTypeErr := io.WriteUint8(8, (messageType))
-    if _messageTypeErr != nil {
-        return errors.New("Error serializing 'messageType' field " + _messageTypeErr.Error())
-    }
-
-    // Optional Field (vendorId) (Can be skipped, if the value is null)
-    var vendorId *uint16 = nil
-    if m.VendorId != nil {
-        vendorId = m.VendorId
-        _vendorIdErr := io.WriteUint16(16, *(vendorId))
-        if _vendorIdErr != nil {
-            return errors.New("Error serializing 'vendorId' field " + _vendorIdErr.Error())
-        }
+    // Discriminator Field (additionalInformationType) (Used as input to a switch field)
+    additionalInformationType := uint8(child.AdditionalInformationType())
+    _additionalInformationTypeErr := io.WriteUint8(8, (additionalInformationType))
+    if _additionalInformationTypeErr != nil {
+        return errors.New("Error serializing 'additionalInformationType' field " + _additionalInformationTypeErr.Error())
     }
 
     // Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
@@ -161,7 +134,7 @@ func (m *NLM) SerializeParent(io utils.WriteBuffer, child INLM, serializeChildFu
     return nil
 }
 
-func (m *NLM) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+func (m *CEMIAdditionalInformation) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
     var token xml.Token
     var err error
     for {
@@ -176,18 +149,12 @@ func (m *NLM) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
         case xml.StartElement:
             tok := token.(xml.StartElement)
             switch tok.Name.Local {
-            case "vendorId":
-                var data *uint16
-                if err := d.DecodeElement(data, &tok); err != nil {
-                    return err
-                }
-                m.VendorId = data
                 default:
                     switch start.Attr[0].Value {
-                        case "org.apache.plc4x.java.bacnetip.readwrite.NLMWhoIsRouterToNetwork":
-                            var dt *NLMWhoIsRouterToNetwork
+                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIAdditionalInformationBusmonitorInfo":
+                            var dt *CEMIAdditionalInformationBusmonitorInfo
                             if m.Child != nil {
-                                dt = m.Child.(*NLMWhoIsRouterToNetwork)
+                                dt = m.Child.(*CEMIAdditionalInformationBusmonitorInfo)
                             }
                             if err := d.DecodeElement(&dt, &tok); err != nil {
                                 return err
@@ -196,10 +163,10 @@ func (m *NLM) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
                                 dt.Parent = m
                                 m.Child = dt
                             }
-                        case "org.apache.plc4x.java.bacnetip.readwrite.NLMIAmRouterToNetwork":
-                            var dt *NLMIAmRouterToNetwork
+                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIAdditionalInformationRelativeTimestamp":
+                            var dt *CEMIAdditionalInformationRelativeTimestamp
                             if m.Child != nil {
-                                dt = m.Child.(*NLMIAmRouterToNetwork)
+                                dt = m.Child.(*CEMIAdditionalInformationRelativeTimestamp)
                             }
                             if err := d.DecodeElement(&dt, &tok); err != nil {
                                 return err
@@ -214,17 +181,14 @@ func (m *NLM) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
     }
 }
 
-func (m *NLM) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+func (m *CEMIAdditionalInformation) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     className := reflect.TypeOf(m.Child).String()
-    className = "org.apache.plc4x.java.bacnetip.readwrite." + className[strings.LastIndex(className, ".") + 1:]
+    className = "org.apache.plc4x.java.knxnetip.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.VendorId, xml.StartElement{Name: xml.Name{Local: "vendorId"}}); err != nil {
-        return err
-    }
     marshaller, ok := m.Child.(xml.Marshaler)
     if !ok {
         return errors.New("child is not castable to Marshaler")
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
new file mode 100644
index 0000000..c0db1b3
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
@@ -0,0 +1,322 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+    "strconv"
+)
+
+// Constant values.
+const CEMIAdditionalInformationBusmonitorInfo_LEN uint8 = 1
+
+// The data-structure of this message
+type CEMIAdditionalInformationBusmonitorInfo struct {
+    FrameErrorFlag bool
+    BitErrorFlag bool
+    ParityErrorFlag bool
+    UnknownFlag bool
+    LostFlag bool
+    SequenceNumber uint8
+    Parent *CEMIAdditionalInformation
+    ICEMIAdditionalInformationBusmonitorInfo
+}
+
+// The corresponding interface
+type ICEMIAdditionalInformationBusmonitorInfo interface {
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *CEMIAdditionalInformationBusmonitorInfo) AdditionalInformationType() uint8 {
+    return 0x03
+}
+
+
+func (m *CEMIAdditionalInformationBusmonitorInfo) InitializeParent(parent *CEMIAdditionalInformation) {
+}
+
+func NewCEMIAdditionalInformationBusmonitorInfo(frameErrorFlag bool, bitErrorFlag bool, parityErrorFlag bool, unknownFlag bool, lostFlag bool, sequenceNumber uint8, ) *CEMIAdditionalInformation {
+    child := &CEMIAdditionalInformationBusmonitorInfo{
+        FrameErrorFlag: frameErrorFlag,
+        BitErrorFlag: bitErrorFlag,
+        ParityErrorFlag: parityErrorFlag,
+        UnknownFlag: unknownFlag,
+        LostFlag: lostFlag,
+        SequenceNumber: sequenceNumber,
+        Parent: NewCEMIAdditionalInformation(),
+    }
+    child.Parent.Child = child
+    return child.Parent
+}
+
+func CastCEMIAdditionalInformationBusmonitorInfo(structType interface{}) CEMIAdditionalInformationBusmonitorInfo {
+    castFunc := func(typ interface{}) CEMIAdditionalInformationBusmonitorInfo {
+        if casted, ok := typ.(CEMIAdditionalInformationBusmonitorInfo); ok {
+            return casted
+        }
+        if casted, ok := typ.(*CEMIAdditionalInformationBusmonitorInfo); ok {
+            return *casted
+        }
+        if casted, ok := typ.(CEMIAdditionalInformation); ok {
+            return CastCEMIAdditionalInformationBusmonitorInfo(casted.Child)
+        }
+        if casted, ok := typ.(*CEMIAdditionalInformation); ok {
+            return CastCEMIAdditionalInformationBusmonitorInfo(casted.Child)
+        }
+        return CEMIAdditionalInformationBusmonitorInfo{}
+    }
+    return castFunc(structType)
+}
+
+func (m *CEMIAdditionalInformationBusmonitorInfo) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Const Field (len)
+    lengthInBits += 8
+
+    // Simple field (frameErrorFlag)
+    lengthInBits += 1
+
+    // Simple field (bitErrorFlag)
+    lengthInBits += 1
+
+    // Simple field (parityErrorFlag)
+    lengthInBits += 1
+
+    // Simple field (unknownFlag)
+    lengthInBits += 1
+
+    // Simple field (lostFlag)
+    lengthInBits += 1
+
+    // Simple field (sequenceNumber)
+    lengthInBits += 3
+
+    return lengthInBits
+}
+
+func (m *CEMIAdditionalInformationBusmonitorInfo) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func CEMIAdditionalInformationBusmonitorInfoParse(io *utils.ReadBuffer) (*CEMIAdditionalInformation, error) {
+
+    // Const Field (len)
+    len, _lenErr := io.ReadUint8(8)
+    if _lenErr != nil {
+        return nil, errors.New("Error parsing 'len' field " + _lenErr.Error())
+    }
+    if len != CEMIAdditionalInformationBusmonitorInfo_LEN {
+        return nil, errors.New("Expected constant value " + strconv.Itoa(int(CEMIAdditionalInformationBusmonitorInfo_LEN)) + " but got " + strconv.Itoa(int(len)))
+    }
+
+    // Simple Field (frameErrorFlag)
+    frameErrorFlag, _frameErrorFlagErr := io.ReadBit()
+    if _frameErrorFlagErr != nil {
+        return nil, errors.New("Error parsing 'frameErrorFlag' field " + _frameErrorFlagErr.Error())
+    }
+
+    // Simple Field (bitErrorFlag)
+    bitErrorFlag, _bitErrorFlagErr := io.ReadBit()
+    if _bitErrorFlagErr != nil {
+        return nil, errors.New("Error parsing 'bitErrorFlag' field " + _bitErrorFlagErr.Error())
+    }
+
+    // Simple Field (parityErrorFlag)
+    parityErrorFlag, _parityErrorFlagErr := io.ReadBit()
+    if _parityErrorFlagErr != nil {
+        return nil, errors.New("Error parsing 'parityErrorFlag' field " + _parityErrorFlagErr.Error())
+    }
+
+    // Simple Field (unknownFlag)
+    unknownFlag, _unknownFlagErr := io.ReadBit()
+    if _unknownFlagErr != nil {
+        return nil, errors.New("Error parsing 'unknownFlag' field " + _unknownFlagErr.Error())
+    }
+
+    // Simple Field (lostFlag)
+    lostFlag, _lostFlagErr := io.ReadBit()
+    if _lostFlagErr != nil {
+        return nil, errors.New("Error parsing 'lostFlag' field " + _lostFlagErr.Error())
+    }
+
+    // Simple Field (sequenceNumber)
+    sequenceNumber, _sequenceNumberErr := io.ReadUint8(3)
+    if _sequenceNumberErr != nil {
+        return nil, errors.New("Error parsing 'sequenceNumber' field " + _sequenceNumberErr.Error())
+    }
+
+    // Create a partially initialized instance
+    _child := &CEMIAdditionalInformationBusmonitorInfo{
+        FrameErrorFlag: frameErrorFlag,
+        BitErrorFlag: bitErrorFlag,
+        ParityErrorFlag: parityErrorFlag,
+        UnknownFlag: unknownFlag,
+        LostFlag: lostFlag,
+        SequenceNumber: sequenceNumber,
+        Parent: &CEMIAdditionalInformation{},
+    }
+    _child.Parent.Child = _child
+    return _child.Parent, nil
+}
+
+func (m *CEMIAdditionalInformationBusmonitorInfo) Serialize(io utils.WriteBuffer) error {
+    ser := func() error {
+
+    // Const Field (len)
+    _lenErr := io.WriteUint8(8, 1)
+    if _lenErr != nil {
+        return errors.New("Error serializing 'len' field " + _lenErr.Error())
+    }
+
+    // Simple Field (frameErrorFlag)
+    frameErrorFlag := bool(m.FrameErrorFlag)
+    _frameErrorFlagErr := io.WriteBit((frameErrorFlag))
+    if _frameErrorFlagErr != nil {
+        return errors.New("Error serializing 'frameErrorFlag' field " + _frameErrorFlagErr.Error())
+    }
+
+    // Simple Field (bitErrorFlag)
+    bitErrorFlag := bool(m.BitErrorFlag)
+    _bitErrorFlagErr := io.WriteBit((bitErrorFlag))
+    if _bitErrorFlagErr != nil {
+        return errors.New("Error serializing 'bitErrorFlag' field " + _bitErrorFlagErr.Error())
+    }
+
+    // Simple Field (parityErrorFlag)
+    parityErrorFlag := bool(m.ParityErrorFlag)
+    _parityErrorFlagErr := io.WriteBit((parityErrorFlag))
+    if _parityErrorFlagErr != nil {
+        return errors.New("Error serializing 'parityErrorFlag' field " + _parityErrorFlagErr.Error())
+    }
+
+    // Simple Field (unknownFlag)
+    unknownFlag := bool(m.UnknownFlag)
+    _unknownFlagErr := io.WriteBit((unknownFlag))
+    if _unknownFlagErr != nil {
+        return errors.New("Error serializing 'unknownFlag' field " + _unknownFlagErr.Error())
+    }
+
+    // Simple Field (lostFlag)
+    lostFlag := bool(m.LostFlag)
+    _lostFlagErr := io.WriteBit((lostFlag))
+    if _lostFlagErr != nil {
+        return errors.New("Error serializing 'lostFlag' field " + _lostFlagErr.Error())
+    }
+
+    // Simple Field (sequenceNumber)
+    sequenceNumber := uint8(m.SequenceNumber)
+    _sequenceNumberErr := io.WriteUint8(3, (sequenceNumber))
+    if _sequenceNumberErr != nil {
+        return errors.New("Error serializing 'sequenceNumber' field " + _sequenceNumberErr.Error())
+    }
+
+        return nil
+    }
+    return m.Parent.SerializeParent(io, m, ser)
+}
+
+func (m *CEMIAdditionalInformationBusmonitorInfo) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    token = start
+    for {
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "frameErrorFlag":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.FrameErrorFlag = data
+            case "bitErrorFlag":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.BitErrorFlag = data
+            case "parityErrorFlag":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.ParityErrorFlag = data
+            case "unknownFlag":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.UnknownFlag = data
+            case "lostFlag":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.LostFlag = data
+            case "sequenceNumber":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.SequenceNumber = data
+            }
+        }
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+    }
+}
+
+func (m *CEMIAdditionalInformationBusmonitorInfo) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.FrameErrorFlag, xml.StartElement{Name: xml.Name{Local: "frameErrorFlag"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.BitErrorFlag, xml.StartElement{Name: xml.Name{Local: "bitErrorFlag"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.ParityErrorFlag, xml.StartElement{Name: xml.Name{Local: "parityErrorFlag"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.UnknownFlag, xml.StartElement{Name: xml.Name{Local: "unknownFlag"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.LostFlag, xml.StartElement{Name: xml.Name{Local: "lostFlag"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.SequenceNumber, xml.StartElement{Name: xml.Name{Local: "sequenceNumber"}}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
new file mode 100644
index 0000000..b04dfbd
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
@@ -0,0 +1,181 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+    "strconv"
+)
+
+// Constant values.
+const CEMIAdditionalInformationRelativeTimestamp_LEN uint8 = 2
+
+// The data-structure of this message
+type CEMIAdditionalInformationRelativeTimestamp struct {
+    RelativeTimestamp *RelativeTimestamp
+    Parent *CEMIAdditionalInformation
+    ICEMIAdditionalInformationRelativeTimestamp
+}
+
+// The corresponding interface
+type ICEMIAdditionalInformationRelativeTimestamp interface {
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *CEMIAdditionalInformationRelativeTimestamp) AdditionalInformationType() uint8 {
+    return 0x04
+}
+
+
+func (m *CEMIAdditionalInformationRelativeTimestamp) InitializeParent(parent *CEMIAdditionalInformation) {
+}
+
+func NewCEMIAdditionalInformationRelativeTimestamp(relativeTimestamp *RelativeTimestamp, ) *CEMIAdditionalInformation {
+    child := &CEMIAdditionalInformationRelativeTimestamp{
+        RelativeTimestamp: relativeTimestamp,
+        Parent: NewCEMIAdditionalInformation(),
+    }
+    child.Parent.Child = child
+    return child.Parent
+}
+
+func CastCEMIAdditionalInformationRelativeTimestamp(structType interface{}) CEMIAdditionalInformationRelativeTimestamp {
+    castFunc := func(typ interface{}) CEMIAdditionalInformationRelativeTimestamp {
+        if casted, ok := typ.(CEMIAdditionalInformationRelativeTimestamp); ok {
+            return casted
+        }
+        if casted, ok := typ.(*CEMIAdditionalInformationRelativeTimestamp); ok {
+            return *casted
+        }
+        if casted, ok := typ.(CEMIAdditionalInformation); ok {
+            return CastCEMIAdditionalInformationRelativeTimestamp(casted.Child)
+        }
+        if casted, ok := typ.(*CEMIAdditionalInformation); ok {
+            return CastCEMIAdditionalInformationRelativeTimestamp(casted.Child)
+        }
+        return CEMIAdditionalInformationRelativeTimestamp{}
+    }
+    return castFunc(structType)
+}
+
+func (m *CEMIAdditionalInformationRelativeTimestamp) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Const Field (len)
+    lengthInBits += 8
+
+    // Simple field (relativeTimestamp)
+    lengthInBits += m.RelativeTimestamp.LengthInBits()
+
+    return lengthInBits
+}
+
+func (m *CEMIAdditionalInformationRelativeTimestamp) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func CEMIAdditionalInformationRelativeTimestampParse(io *utils.ReadBuffer) (*CEMIAdditionalInformation, error) {
+
+    // Const Field (len)
+    len, _lenErr := io.ReadUint8(8)
+    if _lenErr != nil {
+        return nil, errors.New("Error parsing 'len' field " + _lenErr.Error())
+    }
+    if len != CEMIAdditionalInformationRelativeTimestamp_LEN {
+        return nil, errors.New("Expected constant value " + strconv.Itoa(int(CEMIAdditionalInformationRelativeTimestamp_LEN)) + " but got " + strconv.Itoa(int(len)))
+    }
+
+    // Simple Field (relativeTimestamp)
+    relativeTimestamp, _relativeTimestampErr := RelativeTimestampParse(io)
+    if _relativeTimestampErr != nil {
+        return nil, errors.New("Error parsing 'relativeTimestamp' field " + _relativeTimestampErr.Error())
+    }
+
+    // Create a partially initialized instance
+    _child := &CEMIAdditionalInformationRelativeTimestamp{
+        RelativeTimestamp: relativeTimestamp,
+        Parent: &CEMIAdditionalInformation{},
+    }
+    _child.Parent.Child = _child
+    return _child.Parent, nil
+}
+
+func (m *CEMIAdditionalInformationRelativeTimestamp) Serialize(io utils.WriteBuffer) error {
+    ser := func() error {
+
+    // Const Field (len)
+    _lenErr := io.WriteUint8(8, 2)
+    if _lenErr != nil {
+        return errors.New("Error serializing 'len' field " + _lenErr.Error())
+    }
+
+    // Simple Field (relativeTimestamp)
+    _relativeTimestampErr := m.RelativeTimestamp.Serialize(io)
+    if _relativeTimestampErr != nil {
+        return errors.New("Error serializing 'relativeTimestamp' field " + _relativeTimestampErr.Error())
+    }
+
+        return nil
+    }
+    return m.Parent.SerializeParent(io, m, ser)
+}
+
+func (m *CEMIAdditionalInformationRelativeTimestamp) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    token = start
+    for {
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "relativeTimestamp":
+                var data *RelativeTimestamp
+                if err := d.DecodeElement(data, &tok); err != nil {
+                    return err
+                }
+                m.RelativeTimestamp = data
+            }
+        }
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+    }
+}
+
+func (m *CEMIAdditionalInformationRelativeTimestamp) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.RelativeTimestamp, xml.StartElement{Name: xml.Name{Local: "relativeTimestamp"}}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go
new file mode 100644
index 0000000..6247b4f
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go
@@ -0,0 +1,237 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+)
+
+// The data-structure of this message
+type CEMIBusmonInd struct {
+    AdditionalInformationLength uint8
+    AdditionalInformation []*CEMIAdditionalInformation
+    CemiFrame *CEMIFrame
+    Parent *CEMI
+    ICEMIBusmonInd
+}
+
+// The corresponding interface
+type ICEMIBusmonInd interface {
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *CEMIBusmonInd) MessageCode() uint8 {
+    return 0x2B
+}
+
+
+func (m *CEMIBusmonInd) InitializeParent(parent *CEMI) {
+}
+
+func NewCEMIBusmonInd(additionalInformationLength uint8, additionalInformation []*CEMIAdditionalInformation, cemiFrame *CEMIFrame, ) *CEMI {
+    child := &CEMIBusmonInd{
+        AdditionalInformationLength: additionalInformationLength,
+        AdditionalInformation: additionalInformation,
+        CemiFrame: cemiFrame,
+        Parent: NewCEMI(),
+    }
+    child.Parent.Child = child
+    return child.Parent
+}
+
+func CastCEMIBusmonInd(structType interface{}) CEMIBusmonInd {
+    castFunc := func(typ interface{}) CEMIBusmonInd {
+        if casted, ok := typ.(CEMIBusmonInd); ok {
+            return casted
+        }
+        if casted, ok := typ.(*CEMIBusmonInd); ok {
+            return *casted
+        }
+        if casted, ok := typ.(CEMI); ok {
+            return CastCEMIBusmonInd(casted.Child)
+        }
+        if casted, ok := typ.(*CEMI); ok {
+            return CastCEMIBusmonInd(casted.Child)
+        }
+        return CEMIBusmonInd{}
+    }
+    return castFunc(structType)
+}
+
+func (m *CEMIBusmonInd) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Simple field (additionalInformationLength)
+    lengthInBits += 8
+
+    // Array field
+    if len(m.AdditionalInformation) > 0 {
+        for _, element := range m.AdditionalInformation {
+            lengthInBits += element.LengthInBits()
+        }
+    }
+
+    // Simple field (cemiFrame)
+    lengthInBits += m.CemiFrame.LengthInBits()
+
+    return lengthInBits
+}
+
+func (m *CEMIBusmonInd) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func CEMIBusmonIndParse(io *utils.ReadBuffer) (*CEMI, error) {
+
+    // Simple Field (additionalInformationLength)
+    additionalInformationLength, _additionalInformationLengthErr := io.ReadUint8(8)
+    if _additionalInformationLengthErr != nil {
+        return nil, errors.New("Error parsing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
+    }
+
+    // Array field (additionalInformation)
+    // Length array
+    additionalInformation := make([]*CEMIAdditionalInformation, 0)
+    _additionalInformationLength := additionalInformationLength
+    _additionalInformationEndPos := io.GetPos() + uint16(_additionalInformationLength)
+    for ;io.GetPos() < _additionalInformationEndPos; {
+        _item, _err := CEMIAdditionalInformationParse(io)
+        if _err != nil {
+            return nil, errors.New("Error parsing 'additionalInformation' field " + _err.Error())
+        }
+        additionalInformation = append(additionalInformation, _item)
+    }
+
+    // Simple Field (cemiFrame)
+    cemiFrame, _cemiFrameErr := CEMIFrameParse(io)
+    if _cemiFrameErr != nil {
+        return nil, errors.New("Error parsing 'cemiFrame' field " + _cemiFrameErr.Error())
+    }
+
+    // Create a partially initialized instance
+    _child := &CEMIBusmonInd{
+        AdditionalInformationLength: additionalInformationLength,
+        AdditionalInformation: additionalInformation,
+        CemiFrame: cemiFrame,
+        Parent: &CEMI{},
+    }
+    _child.Parent.Child = _child
+    return _child.Parent, nil
+}
+
+func (m *CEMIBusmonInd) Serialize(io utils.WriteBuffer) error {
+    ser := func() error {
+
+    // Simple Field (additionalInformationLength)
+    additionalInformationLength := uint8(m.AdditionalInformationLength)
+    _additionalInformationLengthErr := io.WriteUint8(8, (additionalInformationLength))
+    if _additionalInformationLengthErr != nil {
+        return errors.New("Error serializing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
+    }
+
+    // Array Field (additionalInformation)
+    if m.AdditionalInformation != nil {
+        for _, _element := range m.AdditionalInformation {
+            _elementErr := _element.Serialize(io)
+            if _elementErr != nil {
+                return errors.New("Error serializing 'additionalInformation' field " + _elementErr.Error())
+            }
+        }
+    }
+
+    // Simple Field (cemiFrame)
+    _cemiFrameErr := m.CemiFrame.Serialize(io)
+    if _cemiFrameErr != nil {
+        return errors.New("Error serializing 'cemiFrame' field " + _cemiFrameErr.Error())
+    }
+
+        return nil
+    }
+    return m.Parent.SerializeParent(io, m, ser)
+}
+
+func (m *CEMIBusmonInd) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    token = start
+    for {
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "additionalInformationLength":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.AdditionalInformationLength = data
+            case "additionalInformation":
+                var _values []*CEMIAdditionalInformation
+                var dt *CEMIAdditionalInformation
+                if err := d.DecodeElement(&dt, &tok); err != nil {
+                    return err
+                }
+                _values = append(_values, dt)
+                m.AdditionalInformation = _values
+            case "cemiFrame":
+                var dt *CEMIFrame
+                if err := d.DecodeElement(&dt, &tok); err != nil {
+                    return err
+                }
+                m.CemiFrame = dt
+            }
+        }
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+    }
+}
+
+func (m *CEMIBusmonInd) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.AdditionalInformationLength, xml.StartElement{Name: xml.Name{Local: "additionalInformationLength"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.AdditionalInformation, xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.CemiFrame, xml.StartElement{Name: xml.Name{Local: "cemiFrame"}}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go
new file mode 100644
index 0000000..2a9357c
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go
@@ -0,0 +1,237 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+)
+
+// The data-structure of this message
+type CEMIDataCon struct {
+    AdditionalInformationLength uint8
+    AdditionalInformation []*CEMIAdditionalInformation
+    CemiDataFrame *CEMIDataFrame
+    Parent *CEMI
+    ICEMIDataCon
+}
+
+// The corresponding interface
+type ICEMIDataCon interface {
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *CEMIDataCon) MessageCode() uint8 {
+    return 0x2E
+}
+
+
+func (m *CEMIDataCon) InitializeParent(parent *CEMI) {
+}
+
+func NewCEMIDataCon(additionalInformationLength uint8, additionalInformation []*CEMIAdditionalInformation, cemiDataFrame *CEMIDataFrame, ) *CEMI {
+    child := &CEMIDataCon{
+        AdditionalInformationLength: additionalInformationLength,
+        AdditionalInformation: additionalInformation,
+        CemiDataFrame: cemiDataFrame,
+        Parent: NewCEMI(),
+    }
+    child.Parent.Child = child
+    return child.Parent
+}
+
+func CastCEMIDataCon(structType interface{}) CEMIDataCon {
+    castFunc := func(typ interface{}) CEMIDataCon {
+        if casted, ok := typ.(CEMIDataCon); ok {
+            return casted
+        }
+        if casted, ok := typ.(*CEMIDataCon); ok {
+            return *casted
+        }
+        if casted, ok := typ.(CEMI); ok {
+            return CastCEMIDataCon(casted.Child)
+        }
+        if casted, ok := typ.(*CEMI); ok {
+            return CastCEMIDataCon(casted.Child)
+        }
+        return CEMIDataCon{}
+    }
+    return castFunc(structType)
+}
+
+func (m *CEMIDataCon) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Simple field (additionalInformationLength)
+    lengthInBits += 8
+
+    // Array field
+    if len(m.AdditionalInformation) > 0 {
+        for _, element := range m.AdditionalInformation {
+            lengthInBits += element.LengthInBits()
+        }
+    }
+
+    // Simple field (cemiDataFrame)
+    lengthInBits += m.CemiDataFrame.LengthInBits()
+
+    return lengthInBits
+}
+
+func (m *CEMIDataCon) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func CEMIDataConParse(io *utils.ReadBuffer) (*CEMI, error) {
+
+    // Simple Field (additionalInformationLength)
+    additionalInformationLength, _additionalInformationLengthErr := io.ReadUint8(8)
+    if _additionalInformationLengthErr != nil {
+        return nil, errors.New("Error parsing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
+    }
+
+    // Array field (additionalInformation)
+    // Length array
+    additionalInformation := make([]*CEMIAdditionalInformation, 0)
+    _additionalInformationLength := additionalInformationLength
+    _additionalInformationEndPos := io.GetPos() + uint16(_additionalInformationLength)
+    for ;io.GetPos() < _additionalInformationEndPos; {
+        _item, _err := CEMIAdditionalInformationParse(io)
+        if _err != nil {
+            return nil, errors.New("Error parsing 'additionalInformation' field " + _err.Error())
+        }
+        additionalInformation = append(additionalInformation, _item)
+    }
+
+    // Simple Field (cemiDataFrame)
+    cemiDataFrame, _cemiDataFrameErr := CEMIDataFrameParse(io)
+    if _cemiDataFrameErr != nil {
+        return nil, errors.New("Error parsing 'cemiDataFrame' field " + _cemiDataFrameErr.Error())
+    }
+
+    // Create a partially initialized instance
+    _child := &CEMIDataCon{
+        AdditionalInformationLength: additionalInformationLength,
+        AdditionalInformation: additionalInformation,
+        CemiDataFrame: cemiDataFrame,
+        Parent: &CEMI{},
+    }
+    _child.Parent.Child = _child
+    return _child.Parent, nil
+}
+
+func (m *CEMIDataCon) Serialize(io utils.WriteBuffer) error {
+    ser := func() error {
+
+    // Simple Field (additionalInformationLength)
+    additionalInformationLength := uint8(m.AdditionalInformationLength)
+    _additionalInformationLengthErr := io.WriteUint8(8, (additionalInformationLength))
+    if _additionalInformationLengthErr != nil {
+        return errors.New("Error serializing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
+    }
+
+    // Array Field (additionalInformation)
+    if m.AdditionalInformation != nil {
+        for _, _element := range m.AdditionalInformation {
+            _elementErr := _element.Serialize(io)
+            if _elementErr != nil {
+                return errors.New("Error serializing 'additionalInformation' field " + _elementErr.Error())
+            }
+        }
+    }
+
+    // Simple Field (cemiDataFrame)
+    _cemiDataFrameErr := m.CemiDataFrame.Serialize(io)
+    if _cemiDataFrameErr != nil {
+        return errors.New("Error serializing 'cemiDataFrame' field " + _cemiDataFrameErr.Error())
+    }
+
+        return nil
+    }
+    return m.Parent.SerializeParent(io, m, ser)
+}
+
+func (m *CEMIDataCon) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    token = start
+    for {
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "additionalInformationLength":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.AdditionalInformationLength = data
+            case "additionalInformation":
+                var _values []*CEMIAdditionalInformation
+                var dt *CEMIAdditionalInformation
+                if err := d.DecodeElement(&dt, &tok); err != nil {
+                    return err
+                }
+                _values = append(_values, dt)
+                m.AdditionalInformation = _values
+            case "cemiDataFrame":
+                var data *CEMIDataFrame
+                if err := d.DecodeElement(data, &tok); err != nil {
+                    return err
+                }
+                m.CemiDataFrame = data
+            }
+        }
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+    }
+}
+
+func (m *CEMIDataCon) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.AdditionalInformationLength, xml.StartElement{Name: xml.Name{Local: "additionalInformationLength"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.AdditionalInformation, xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.CemiDataFrame, xml.StartElement{Name: xml.Name{Local: "cemiDataFrame"}}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go
new file mode 100644
index 0000000..f41217a
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go
@@ -0,0 +1,613 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/base64"
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+)
+
+// The data-structure of this message
+type CEMIDataFrame struct {
+    StandardFrame bool
+    Polling bool
+    NotRepeated bool
+    NotAckFrame bool
+    Priority CEMIPriority
+    AcknowledgeRequested bool
+    ErrorFlag bool
+    GroupDestinationAddress bool
+    HopCount uint8
+    ExtendedFrameFormat uint8
+    SourceAddress *KnxAddress
+    DestinationAddress []int8
+    DataLength uint8
+    Tcpi TPCI
+    Counter uint8
+    Apci APCI
+    DataFirstByte int8
+    Data []int8
+    ICEMIDataFrame
+}
+
+// The corresponding interface
+type ICEMIDataFrame interface {
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+func NewCEMIDataFrame(standardFrame bool, polling bool, notRepeated bool, notAckFrame bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool, groupDestinationAddress bool, hopCount uint8, extendedFrameFormat uint8, sourceAddress *KnxAddress, destinationAddress []int8, dataLength uint8, tcpi TPCI, counter uint8, apci APCI, dataFirstByte int8, data []int8) *CEMIDataFrame {
+    return &CEMIDataFrame{StandardFrame: standardFrame, Polling: polling, NotRepeated: notRepeated, NotAckFrame: notAckFrame, Priority: priority, AcknowledgeRequested: acknowledgeRequested, ErrorFlag: errorFlag, GroupDestinationAddress: groupDestinationAddress, HopCount: hopCount, ExtendedFrameFormat: extendedFrameFormat, SourceAddress: sourceAddress, DestinationAddress: destinationAddress, DataLength: dataLength, Tcpi: tcpi, Counter: counter, Apci: apci, DataFirstByte: dataFirstByte, Da [...]
+}
+
+func CastCEMIDataFrame(structType interface{}) CEMIDataFrame {
+    castFunc := func(typ interface{}) CEMIDataFrame {
+        if casted, ok := typ.(CEMIDataFrame); ok {
+            return casted
+        }
+        if casted, ok := typ.(*CEMIDataFrame); ok {
+            return *casted
+        }
+        return CEMIDataFrame{}
+    }
+    return castFunc(structType)
+}
+
+func (m *CEMIDataFrame) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Simple field (standardFrame)
+    lengthInBits += 1
+
+    // Simple field (polling)
+    lengthInBits += 1
+
+    // Simple field (notRepeated)
+    lengthInBits += 1
+
+    // Simple field (notAckFrame)
+    lengthInBits += 1
+
+    // Enum Field (priority)
+    lengthInBits += 2
+
+    // Simple field (acknowledgeRequested)
+    lengthInBits += 1
+
+    // Simple field (errorFlag)
+    lengthInBits += 1
+
+    // Simple field (groupDestinationAddress)
+    lengthInBits += 1
+
+    // Simple field (hopCount)
+    lengthInBits += 3
+
+    // Simple field (extendedFrameFormat)
+    lengthInBits += 4
+
+    // Simple field (sourceAddress)
+    lengthInBits += m.SourceAddress.LengthInBits()
+
+    // Array field
+    if len(m.DestinationAddress) > 0 {
+        lengthInBits += 8 * uint16(len(m.DestinationAddress))
+    }
+
+    // Simple field (dataLength)
+    lengthInBits += 8
+
+    // Enum Field (tcpi)
+    lengthInBits += 2
+
+    // Simple field (counter)
+    lengthInBits += 4
+
+    // Enum Field (apci)
+    lengthInBits += 4
+
+    // Simple field (dataFirstByte)
+    lengthInBits += 6
+
+    // Array field
+    if len(m.Data) > 0 {
+        lengthInBits += 8 * uint16(len(m.Data))
+    }
+
+    return lengthInBits
+}
+
+func (m *CEMIDataFrame) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func CEMIDataFrameParse(io *utils.ReadBuffer) (*CEMIDataFrame, error) {
+
+    // Simple Field (standardFrame)
+    standardFrame, _standardFrameErr := io.ReadBit()
+    if _standardFrameErr != nil {
+        return nil, errors.New("Error parsing 'standardFrame' field " + _standardFrameErr.Error())
+    }
+
+    // Simple Field (polling)
+    polling, _pollingErr := io.ReadBit()
+    if _pollingErr != nil {
+        return nil, errors.New("Error parsing 'polling' field " + _pollingErr.Error())
+    }
+
+    // Simple Field (notRepeated)
+    notRepeated, _notRepeatedErr := io.ReadBit()
+    if _notRepeatedErr != nil {
+        return nil, errors.New("Error parsing 'notRepeated' field " + _notRepeatedErr.Error())
+    }
+
+    // Simple Field (notAckFrame)
+    notAckFrame, _notAckFrameErr := io.ReadBit()
+    if _notAckFrameErr != nil {
+        return nil, errors.New("Error parsing 'notAckFrame' field " + _notAckFrameErr.Error())
+    }
+
+    // Enum field (priority)
+    priority, _priorityErr := CEMIPriorityParse(io)
+    if _priorityErr != nil {
+        return nil, errors.New("Error parsing 'priority' field " + _priorityErr.Error())
+    }
+
+    // Simple Field (acknowledgeRequested)
+    acknowledgeRequested, _acknowledgeRequestedErr := io.ReadBit()
+    if _acknowledgeRequestedErr != nil {
+        return nil, errors.New("Error parsing 'acknowledgeRequested' field " + _acknowledgeRequestedErr.Error())
+    }
+
+    // Simple Field (errorFlag)
+    errorFlag, _errorFlagErr := io.ReadBit()
+    if _errorFlagErr != nil {
+        return nil, errors.New("Error parsing 'errorFlag' field " + _errorFlagErr.Error())
+    }
+
+    // Simple Field (groupDestinationAddress)
+    groupDestinationAddress, _groupDestinationAddressErr := io.ReadBit()
+    if _groupDestinationAddressErr != nil {
+        return nil, errors.New("Error parsing 'groupDestinationAddress' field " + _groupDestinationAddressErr.Error())
+    }
+
+    // Simple Field (hopCount)
+    hopCount, _hopCountErr := io.ReadUint8(3)
+    if _hopCountErr != nil {
+        return nil, errors.New("Error parsing 'hopCount' field " + _hopCountErr.Error())
+    }
+
+    // Simple Field (extendedFrameFormat)
+    extendedFrameFormat, _extendedFrameFormatErr := io.ReadUint8(4)
+    if _extendedFrameFormatErr != nil {
+        return nil, errors.New("Error parsing 'extendedFrameFormat' field " + _extendedFrameFormatErr.Error())
+    }
+
+    // Simple Field (sourceAddress)
+    sourceAddress, _sourceAddressErr := KnxAddressParse(io)
+    if _sourceAddressErr != nil {
+        return nil, errors.New("Error parsing 'sourceAddress' field " + _sourceAddressErr.Error())
+    }
+
+    // Array field (destinationAddress)
+    // Count array
+    destinationAddress := make([]int8, uint16(2))
+    for curItem := uint16(0); curItem < uint16(uint16(2)); curItem++ {
+        _item, _err := io.ReadInt8(8)
+        if _err != nil {
+            return nil, errors.New("Error parsing 'destinationAddress' field " + _err.Error())
+        }
+        destinationAddress[curItem] = _item
+    }
+
+    // Simple Field (dataLength)
+    dataLength, _dataLengthErr := io.ReadUint8(8)
+    if _dataLengthErr != nil {
+        return nil, errors.New("Error parsing 'dataLength' field " + _dataLengthErr.Error())
+    }
+
+    // Enum field (tcpi)
+    tcpi, _tcpiErr := TPCIParse(io)
+    if _tcpiErr != nil {
+        return nil, errors.New("Error parsing 'tcpi' field " + _tcpiErr.Error())
+    }
+
+    // Simple Field (counter)
+    counter, _counterErr := io.ReadUint8(4)
+    if _counterErr != nil {
+        return nil, errors.New("Error parsing 'counter' field " + _counterErr.Error())
+    }
+
+    // Enum field (apci)
+    apci, _apciErr := APCIParse(io)
+    if _apciErr != nil {
+        return nil, errors.New("Error parsing 'apci' field " + _apciErr.Error())
+    }
+
+    // Simple Field (dataFirstByte)
+    dataFirstByte, _dataFirstByteErr := io.ReadInt8(6)
+    if _dataFirstByteErr != nil {
+        return nil, errors.New("Error parsing 'dataFirstByte' field " + _dataFirstByteErr.Error())
+    }
+
+    // Array field (data)
+    // Count array
+    data := make([]int8, uint16(dataLength) - uint16(uint16(1)))
+    for curItem := uint16(0); curItem < uint16(uint16(dataLength) - uint16(uint16(1))); curItem++ {
+        _item, _err := io.ReadInt8(8)
+        if _err != nil {
+            return nil, errors.New("Error parsing 'data' field " + _err.Error())
+        }
+        data[curItem] = _item
+    }
+
+    // Create the instance
+    return NewCEMIDataFrame(standardFrame, polling, notRepeated, notAckFrame, priority, acknowledgeRequested, errorFlag, groupDestinationAddress, hopCount, extendedFrameFormat, sourceAddress, destinationAddress, dataLength, tcpi, counter, apci, dataFirstByte, data), nil
+}
+
+func (m *CEMIDataFrame) Serialize(io utils.WriteBuffer) error {
+
+    // Simple Field (standardFrame)
+    standardFrame := bool(m.StandardFrame)
+    _standardFrameErr := io.WriteBit((standardFrame))
+    if _standardFrameErr != nil {
+        return errors.New("Error serializing 'standardFrame' field " + _standardFrameErr.Error())
+    }
+
+    // Simple Field (polling)
+    polling := bool(m.Polling)
+    _pollingErr := io.WriteBit((polling))
+    if _pollingErr != nil {
+        return errors.New("Error serializing 'polling' field " + _pollingErr.Error())
+    }
+
+    // Simple Field (notRepeated)
+    notRepeated := bool(m.NotRepeated)
+    _notRepeatedErr := io.WriteBit((notRepeated))
+    if _notRepeatedErr != nil {
+        return errors.New("Error serializing 'notRepeated' field " + _notRepeatedErr.Error())
+    }
+
+    // Simple Field (notAckFrame)
+    notAckFrame := bool(m.NotAckFrame)
+    _notAckFrameErr := io.WriteBit((notAckFrame))
+    if _notAckFrameErr != nil {
+        return errors.New("Error serializing 'notAckFrame' field " + _notAckFrameErr.Error())
+    }
+
+    // Enum field (priority)
+    priority := CastCEMIPriority(m.Priority)
+    _priorityErr := priority.Serialize(io)
+    if _priorityErr != nil {
+        return errors.New("Error serializing 'priority' field " + _priorityErr.Error())
+    }
+
+    // Simple Field (acknowledgeRequested)
+    acknowledgeRequested := bool(m.AcknowledgeRequested)
+    _acknowledgeRequestedErr := io.WriteBit((acknowledgeRequested))
+    if _acknowledgeRequestedErr != nil {
+        return errors.New("Error serializing 'acknowledgeRequested' field " + _acknowledgeRequestedErr.Error())
+    }
+
+    // Simple Field (errorFlag)
+    errorFlag := bool(m.ErrorFlag)
+    _errorFlagErr := io.WriteBit((errorFlag))
+    if _errorFlagErr != nil {
+        return errors.New("Error serializing 'errorFlag' field " + _errorFlagErr.Error())
+    }
+
+    // Simple Field (groupDestinationAddress)
+    groupDestinationAddress := bool(m.GroupDestinationAddress)
+    _groupDestinationAddressErr := io.WriteBit((groupDestinationAddress))
+    if _groupDestinationAddressErr != nil {
+        return errors.New("Error serializing 'groupDestinationAddress' field " + _groupDestinationAddressErr.Error())
+    }
+
+    // Simple Field (hopCount)
+    hopCount := uint8(m.HopCount)
+    _hopCountErr := io.WriteUint8(3, (hopCount))
+    if _hopCountErr != nil {
+        return errors.New("Error serializing 'hopCount' field " + _hopCountErr.Error())
+    }
+
+    // Simple Field (extendedFrameFormat)
+    extendedFrameFormat := uint8(m.ExtendedFrameFormat)
+    _extendedFrameFormatErr := io.WriteUint8(4, (extendedFrameFormat))
+    if _extendedFrameFormatErr != nil {
+        return errors.New("Error serializing 'extendedFrameFormat' field " + _extendedFrameFormatErr.Error())
+    }
+
+    // Simple Field (sourceAddress)
+    _sourceAddressErr := m.SourceAddress.Serialize(io)
+    if _sourceAddressErr != nil {
+        return errors.New("Error serializing 'sourceAddress' field " + _sourceAddressErr.Error())
+    }
+
+    // Array Field (destinationAddress)
+    if m.DestinationAddress != nil {
+        for _, _element := range m.DestinationAddress {
+            _elementErr := io.WriteInt8(8, _element)
+            if _elementErr != nil {
+                return errors.New("Error serializing 'destinationAddress' field " + _elementErr.Error())
+            }
+        }
+    }
+
+    // Simple Field (dataLength)
+    dataLength := uint8(m.DataLength)
+    _dataLengthErr := io.WriteUint8(8, (dataLength))
+    if _dataLengthErr != nil {
+        return errors.New("Error serializing 'dataLength' field " + _dataLengthErr.Error())
+    }
+
+    // Enum field (tcpi)
+    tcpi := CastTPCI(m.Tcpi)
+    _tcpiErr := tcpi.Serialize(io)
+    if _tcpiErr != nil {
+        return errors.New("Error serializing 'tcpi' field " + _tcpiErr.Error())
+    }
+
+    // Simple Field (counter)
+    counter := uint8(m.Counter)
+    _counterErr := io.WriteUint8(4, (counter))
+    if _counterErr != nil {
+        return errors.New("Error serializing 'counter' field " + _counterErr.Error())
+    }
+
+    // Enum field (apci)
+    apci := CastAPCI(m.Apci)
+    _apciErr := apci.Serialize(io)
+    if _apciErr != nil {
+        return errors.New("Error serializing 'apci' field " + _apciErr.Error())
+    }
+
+    // Simple Field (dataFirstByte)
+    dataFirstByte := int8(m.DataFirstByte)
+    _dataFirstByteErr := io.WriteInt8(6, (dataFirstByte))
+    if _dataFirstByteErr != nil {
+        return errors.New("Error serializing 'dataFirstByte' field " + _dataFirstByteErr.Error())
+    }
+
+    // Array Field (data)
+    if m.Data != nil {
+        for _, _element := range m.Data {
+            _elementErr := io.WriteInt8(8, _element)
+            if _elementErr != nil {
+                return errors.New("Error serializing 'data' field " + _elementErr.Error())
+            }
+        }
+    }
+
+    return nil
+}
+
+func (m *CEMIDataFrame) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    for {
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "standardFrame":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.StandardFrame = data
+            case "polling":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Polling = data
+            case "notRepeated":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.NotRepeated = data
+            case "notAckFrame":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.NotAckFrame = data
+            case "priority":
+                var data CEMIPriority
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Priority = data
+            case "acknowledgeRequested":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.AcknowledgeRequested = data
+            case "errorFlag":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.ErrorFlag = data
+            case "groupDestinationAddress":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.GroupDestinationAddress = data
+            case "hopCount":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.HopCount = data
+            case "extendedFrameFormat":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.ExtendedFrameFormat = data
+            case "sourceAddress":
+                var data *KnxAddress
+                if err := d.DecodeElement(data, &tok); err != nil {
+                    return err
+                }
+                m.SourceAddress = data
+            case "destinationAddress":
+                var _encoded string
+                if err := d.DecodeElement(&_encoded, &tok); err != nil {
+                    return err
+                }
+                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
+                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
+                if err != nil {
+                    return err
+                }
+                m.DestinationAddress = utils.ByteToInt8(_decoded[0:_len])
+            case "dataLength":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.DataLength = data
+            case "tcpi":
+                var data TPCI
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Tcpi = data
+            case "counter":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Counter = data
+            case "apci":
+                var data APCI
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Apci = data
+            case "dataFirstByte":
+                var data int8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.DataFirstByte = data
+            case "data":
+                var _encoded string
+                if err := d.DecodeElement(&_encoded, &tok); err != nil {
+                    return err
+                }
+                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
+                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
+                if err != nil {
+                    return err
+                }
+                m.Data = utils.ByteToInt8(_decoded[0:_len])
+            }
+        }
+    }
+}
+
+func (m *CEMIDataFrame) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    className := "org.apache.plc4x.java.knxnetip.readwrite.CEMIDataFrame"
+    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.StandardFrame, xml.StartElement{Name: xml.Name{Local: "standardFrame"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Polling, xml.StartElement{Name: xml.Name{Local: "polling"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.NotRepeated, xml.StartElement{Name: xml.Name{Local: "notRepeated"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.NotAckFrame, xml.StartElement{Name: xml.Name{Local: "notAckFrame"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Priority, xml.StartElement{Name: xml.Name{Local: "priority"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.AcknowledgeRequested, xml.StartElement{Name: xml.Name{Local: "acknowledgeRequested"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.ErrorFlag, xml.StartElement{Name: xml.Name{Local: "errorFlag"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.GroupDestinationAddress, xml.StartElement{Name: xml.Name{Local: "groupDestinationAddress"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.HopCount, xml.StartElement{Name: xml.Name{Local: "hopCount"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.ExtendedFrameFormat, xml.StartElement{Name: xml.Name{Local: "extendedFrameFormat"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.SourceAddress, xml.StartElement{Name: xml.Name{Local: "sourceAddress"}}); err != nil {
+        return err
+    }
+    _encodedDestinationAddress := make([]byte, base64.StdEncoding.EncodedLen(len(m.DestinationAddress)))
+    base64.StdEncoding.Encode(_encodedDestinationAddress, utils.Int8ToByte(m.DestinationAddress))
+    if err := e.EncodeElement(_encodedDestinationAddress, xml.StartElement{Name: xml.Name{Local: "destinationAddress"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.DataLength, xml.StartElement{Name: xml.Name{Local: "dataLength"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Tcpi, xml.StartElement{Name: xml.Name{Local: "tcpi"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Counter, xml.StartElement{Name: xml.Name{Local: "counter"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Apci, xml.StartElement{Name: xml.Name{Local: "apci"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.DataFirstByte, xml.StartElement{Name: xml.Name{Local: "dataFirstByte"}}); err != nil {
+        return err
+    }
+    _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    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
+}
+
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go
new file mode 100644
index 0000000..98be1dd
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go
@@ -0,0 +1,237 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+)
+
+// The data-structure of this message
+type CEMIDataInd struct {
+    AdditionalInformationLength uint8
+    AdditionalInformation []*CEMIAdditionalInformation
+    CemiDataFrame *CEMIDataFrame
+    Parent *CEMI
+    ICEMIDataInd
+}
+
+// The corresponding interface
+type ICEMIDataInd interface {
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *CEMIDataInd) MessageCode() uint8 {
+    return 0x29
+}
+
+
+func (m *CEMIDataInd) InitializeParent(parent *CEMI) {
+}
+
+func NewCEMIDataInd(additionalInformationLength uint8, additionalInformation []*CEMIAdditionalInformation, cemiDataFrame *CEMIDataFrame, ) *CEMI {
+    child := &CEMIDataInd{
+        AdditionalInformationLength: additionalInformationLength,
+        AdditionalInformation: additionalInformation,
+        CemiDataFrame: cemiDataFrame,
+        Parent: NewCEMI(),
+    }
+    child.Parent.Child = child
+    return child.Parent
+}
+
+func CastCEMIDataInd(structType interface{}) CEMIDataInd {
+    castFunc := func(typ interface{}) CEMIDataInd {
+        if casted, ok := typ.(CEMIDataInd); ok {
+            return casted
+        }
+        if casted, ok := typ.(*CEMIDataInd); ok {
+            return *casted
+        }
+        if casted, ok := typ.(CEMI); ok {
+            return CastCEMIDataInd(casted.Child)
+        }
+        if casted, ok := typ.(*CEMI); ok {
+            return CastCEMIDataInd(casted.Child)
+        }
+        return CEMIDataInd{}
+    }
+    return castFunc(structType)
+}
+
+func (m *CEMIDataInd) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Simple field (additionalInformationLength)
+    lengthInBits += 8
+
+    // Array field
+    if len(m.AdditionalInformation) > 0 {
+        for _, element := range m.AdditionalInformation {
+            lengthInBits += element.LengthInBits()
+        }
+    }
+
+    // Simple field (cemiDataFrame)
+    lengthInBits += m.CemiDataFrame.LengthInBits()
+
+    return lengthInBits
+}
+
+func (m *CEMIDataInd) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func CEMIDataIndParse(io *utils.ReadBuffer) (*CEMI, error) {
+
+    // Simple Field (additionalInformationLength)
+    additionalInformationLength, _additionalInformationLengthErr := io.ReadUint8(8)
+    if _additionalInformationLengthErr != nil {
+        return nil, errors.New("Error parsing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
+    }
+
+    // Array field (additionalInformation)
+    // Length array
+    additionalInformation := make([]*CEMIAdditionalInformation, 0)
+    _additionalInformationLength := additionalInformationLength
+    _additionalInformationEndPos := io.GetPos() + uint16(_additionalInformationLength)
+    for ;io.GetPos() < _additionalInformationEndPos; {
+        _item, _err := CEMIAdditionalInformationParse(io)
+        if _err != nil {
+            return nil, errors.New("Error parsing 'additionalInformation' field " + _err.Error())
+        }
+        additionalInformation = append(additionalInformation, _item)
+    }
+
+    // Simple Field (cemiDataFrame)
+    cemiDataFrame, _cemiDataFrameErr := CEMIDataFrameParse(io)
+    if _cemiDataFrameErr != nil {
+        return nil, errors.New("Error parsing 'cemiDataFrame' field " + _cemiDataFrameErr.Error())
+    }
+
+    // Create a partially initialized instance
+    _child := &CEMIDataInd{
+        AdditionalInformationLength: additionalInformationLength,
+        AdditionalInformation: additionalInformation,
+        CemiDataFrame: cemiDataFrame,
+        Parent: &CEMI{},
+    }
+    _child.Parent.Child = _child
+    return _child.Parent, nil
+}
+
+func (m *CEMIDataInd) Serialize(io utils.WriteBuffer) error {
+    ser := func() error {
+
+    // Simple Field (additionalInformationLength)
+    additionalInformationLength := uint8(m.AdditionalInformationLength)
+    _additionalInformationLengthErr := io.WriteUint8(8, (additionalInformationLength))
+    if _additionalInformationLengthErr != nil {
+        return errors.New("Error serializing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
+    }
+
+    // Array Field (additionalInformation)
+    if m.AdditionalInformation != nil {
+        for _, _element := range m.AdditionalInformation {
+            _elementErr := _element.Serialize(io)
+            if _elementErr != nil {
+                return errors.New("Error serializing 'additionalInformation' field " + _elementErr.Error())
+            }
+        }
+    }
+
+    // Simple Field (cemiDataFrame)
+    _cemiDataFrameErr := m.CemiDataFrame.Serialize(io)
+    if _cemiDataFrameErr != nil {
+        return errors.New("Error serializing 'cemiDataFrame' field " + _cemiDataFrameErr.Error())
+    }
+
+        return nil
+    }
+    return m.Parent.SerializeParent(io, m, ser)
+}
+
+func (m *CEMIDataInd) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    token = start
+    for {
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "additionalInformationLength":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.AdditionalInformationLength = data
+            case "additionalInformation":
+                var _values []*CEMIAdditionalInformation
+                var dt *CEMIAdditionalInformation
+                if err := d.DecodeElement(&dt, &tok); err != nil {
+                    return err
+                }
+                _values = append(_values, dt)
+                m.AdditionalInformation = _values
+            case "cemiDataFrame":
+                var data *CEMIDataFrame
+                if err := d.DecodeElement(data, &tok); err != nil {
+                    return err
+                }
+                m.CemiDataFrame = data
+            }
+        }
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+    }
+}
+
+func (m *CEMIDataInd) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.AdditionalInformationLength, xml.StartElement{Name: xml.Name{Local: "additionalInformationLength"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.AdditionalInformation, xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.CemiDataFrame, xml.StartElement{Name: xml.Name{Local: "cemiDataFrame"}}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go
new file mode 100644
index 0000000..1f7b410
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go
@@ -0,0 +1,237 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+)
+
+// The data-structure of this message
+type CEMIDataReq struct {
+    AdditionalInformationLength uint8
+    AdditionalInformation []*CEMIAdditionalInformation
+    CemiDataFrame *CEMIDataFrame
+    Parent *CEMI
+    ICEMIDataReq
+}
+
+// The corresponding interface
+type ICEMIDataReq interface {
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *CEMIDataReq) MessageCode() uint8 {
+    return 0x11
+}
+
+
+func (m *CEMIDataReq) InitializeParent(parent *CEMI) {
+}
+
+func NewCEMIDataReq(additionalInformationLength uint8, additionalInformation []*CEMIAdditionalInformation, cemiDataFrame *CEMIDataFrame, ) *CEMI {
+    child := &CEMIDataReq{
+        AdditionalInformationLength: additionalInformationLength,
+        AdditionalInformation: additionalInformation,
+        CemiDataFrame: cemiDataFrame,
+        Parent: NewCEMI(),
+    }
+    child.Parent.Child = child
+    return child.Parent
+}
+
+func CastCEMIDataReq(structType interface{}) CEMIDataReq {
+    castFunc := func(typ interface{}) CEMIDataReq {
+        if casted, ok := typ.(CEMIDataReq); ok {
+            return casted
+        }
+        if casted, ok := typ.(*CEMIDataReq); ok {
+            return *casted
+        }
+        if casted, ok := typ.(CEMI); ok {
+            return CastCEMIDataReq(casted.Child)
+        }
+        if casted, ok := typ.(*CEMI); ok {
+            return CastCEMIDataReq(casted.Child)
+        }
+        return CEMIDataReq{}
+    }
+    return castFunc(structType)
+}
+
+func (m *CEMIDataReq) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Simple field (additionalInformationLength)
+    lengthInBits += 8
+
+    // Array field
+    if len(m.AdditionalInformation) > 0 {
+        for _, element := range m.AdditionalInformation {
+            lengthInBits += element.LengthInBits()
+        }
+    }
+
+    // Simple field (cemiDataFrame)
+    lengthInBits += m.CemiDataFrame.LengthInBits()
+
+    return lengthInBits
+}
+
+func (m *CEMIDataReq) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func CEMIDataReqParse(io *utils.ReadBuffer) (*CEMI, error) {
+
+    // Simple Field (additionalInformationLength)
+    additionalInformationLength, _additionalInformationLengthErr := io.ReadUint8(8)
+    if _additionalInformationLengthErr != nil {
+        return nil, errors.New("Error parsing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
+    }
+
+    // Array field (additionalInformation)
+    // Length array
+    additionalInformation := make([]*CEMIAdditionalInformation, 0)
+    _additionalInformationLength := additionalInformationLength
+    _additionalInformationEndPos := io.GetPos() + uint16(_additionalInformationLength)
+    for ;io.GetPos() < _additionalInformationEndPos; {
+        _item, _err := CEMIAdditionalInformationParse(io)
+        if _err != nil {
+            return nil, errors.New("Error parsing 'additionalInformation' field " + _err.Error())
+        }
+        additionalInformation = append(additionalInformation, _item)
+    }
+
+    // Simple Field (cemiDataFrame)
+    cemiDataFrame, _cemiDataFrameErr := CEMIDataFrameParse(io)
+    if _cemiDataFrameErr != nil {
+        return nil, errors.New("Error parsing 'cemiDataFrame' field " + _cemiDataFrameErr.Error())
+    }
+
+    // Create a partially initialized instance
+    _child := &CEMIDataReq{
+        AdditionalInformationLength: additionalInformationLength,
+        AdditionalInformation: additionalInformation,
+        CemiDataFrame: cemiDataFrame,
+        Parent: &CEMI{},
+    }
+    _child.Parent.Child = _child
+    return _child.Parent, nil
+}
+
+func (m *CEMIDataReq) Serialize(io utils.WriteBuffer) error {
+    ser := func() error {
+
+    // Simple Field (additionalInformationLength)
+    additionalInformationLength := uint8(m.AdditionalInformationLength)
+    _additionalInformationLengthErr := io.WriteUint8(8, (additionalInformationLength))
+    if _additionalInformationLengthErr != nil {
+        return errors.New("Error serializing 'additionalInformationLength' field " + _additionalInformationLengthErr.Error())
+    }
+
+    // Array Field (additionalInformation)
+    if m.AdditionalInformation != nil {
+        for _, _element := range m.AdditionalInformation {
+            _elementErr := _element.Serialize(io)
+            if _elementErr != nil {
+                return errors.New("Error serializing 'additionalInformation' field " + _elementErr.Error())
+            }
+        }
+    }
+
+    // Simple Field (cemiDataFrame)
+    _cemiDataFrameErr := m.CemiDataFrame.Serialize(io)
+    if _cemiDataFrameErr != nil {
+        return errors.New("Error serializing 'cemiDataFrame' field " + _cemiDataFrameErr.Error())
+    }
+
+        return nil
+    }
+    return m.Parent.SerializeParent(io, m, ser)
+}
+
+func (m *CEMIDataReq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    token = start
+    for {
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "additionalInformationLength":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.AdditionalInformationLength = data
+            case "additionalInformation":
+                var _values []*CEMIAdditionalInformation
+                var dt *CEMIAdditionalInformation
+                if err := d.DecodeElement(&dt, &tok); err != nil {
+                    return err
+                }
+                _values = append(_values, dt)
+                m.AdditionalInformation = _values
+            case "cemiDataFrame":
+                var data *CEMIDataFrame
+                if err := d.DecodeElement(data, &tok); err != nil {
+                    return err
+                }
+                m.CemiDataFrame = data
+            }
+        }
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+    }
+}
+
+func (m *CEMIDataReq) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.AdditionalInformationLength, xml.StartElement{Name: xml.Name{Local: "additionalInformationLength"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.AdditionalInformation, xml.StartElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeToken(xml.EndElement{Name: xml.Name{Local: "additionalInformation"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.CemiDataFrame, xml.StartElement{Name: xml.Name{Local: "cemiDataFrame"}}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go
new file mode 100644
index 0000000..3372154
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go
@@ -0,0 +1,382 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+    "reflect"
+    "strings"
+)
+
+// The data-structure of this message
+type CEMIFrame struct {
+    Repeated bool
+    Priority CEMIPriority
+    AcknowledgeRequested bool
+    ErrorFlag bool
+    Child ICEMIFrameChild
+    ICEMIFrame
+    ICEMIFrameParent
+}
+
+// The corresponding interface
+type ICEMIFrame interface {
+    NotAckFrame() bool
+    Polling() bool
+    StandardFrame() bool
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+type ICEMIFrameParent interface {
+    SerializeParent(io utils.WriteBuffer, child ICEMIFrame, serializeChildFunction func() error) error
+}
+
+type ICEMIFrameChild interface {
+    Serialize(io utils.WriteBuffer) error
+    InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool)
+    ICEMIFrame
+}
+
+func NewCEMIFrame(repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) *CEMIFrame {
+    return &CEMIFrame{Repeated: repeated, Priority: priority, AcknowledgeRequested: acknowledgeRequested, ErrorFlag: errorFlag}
+}
+
+func CastCEMIFrame(structType interface{}) CEMIFrame {
+    castFunc := func(typ interface{}) CEMIFrame {
+        if casted, ok := typ.(CEMIFrame); ok {
+            return casted
+        }
+        if casted, ok := typ.(*CEMIFrame); ok {
+            return *casted
+        }
+        return CEMIFrame{}
+    }
+    return castFunc(structType)
+}
+
+func (m *CEMIFrame) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Discriminator Field (standardFrame)
+    lengthInBits += 1
+
+    // Discriminator Field (polling)
+    lengthInBits += 1
+
+    // Simple field (repeated)
+    lengthInBits += 1
+
+    // Discriminator Field (notAckFrame)
+    lengthInBits += 1
+
+    // Enum Field (priority)
+    lengthInBits += 2
+
+    // Simple field (acknowledgeRequested)
+    lengthInBits += 1
+
+    // Simple field (errorFlag)
+    lengthInBits += 1
+
+    // Length of sub-type elements will be added by sub-type...
+    lengthInBits += m.Child.LengthInBits()
+
+    return lengthInBits
+}
+
+func (m *CEMIFrame) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func CEMIFrameParse(io *utils.ReadBuffer) (*CEMIFrame, error) {
+
+    // Discriminator Field (standardFrame) (Used as input to a switch field)
+    standardFrame, _standardFrameErr := io.ReadBit()
+    if _standardFrameErr != nil {
+        return nil, errors.New("Error parsing 'standardFrame' field " + _standardFrameErr.Error())
+    }
+
+    // Discriminator Field (polling) (Used as input to a switch field)
+    polling, _pollingErr := io.ReadBit()
+    if _pollingErr != nil {
+        return nil, errors.New("Error parsing 'polling' field " + _pollingErr.Error())
+    }
+
+    // Simple Field (repeated)
+    repeated, _repeatedErr := io.ReadBit()
+    if _repeatedErr != nil {
+        return nil, errors.New("Error parsing 'repeated' field " + _repeatedErr.Error())
+    }
+
+    // Discriminator Field (notAckFrame) (Used as input to a switch field)
+    notAckFrame, _notAckFrameErr := io.ReadBit()
+    if _notAckFrameErr != nil {
+        return nil, errors.New("Error parsing 'notAckFrame' field " + _notAckFrameErr.Error())
+    }
+
+    // Enum field (priority)
+    priority, _priorityErr := CEMIPriorityParse(io)
+    if _priorityErr != nil {
+        return nil, errors.New("Error parsing 'priority' field " + _priorityErr.Error())
+    }
+
+    // Simple Field (acknowledgeRequested)
+    acknowledgeRequested, _acknowledgeRequestedErr := io.ReadBit()
+    if _acknowledgeRequestedErr != nil {
+        return nil, errors.New("Error parsing 'acknowledgeRequested' field " + _acknowledgeRequestedErr.Error())
+    }
+
+    // Simple Field (errorFlag)
+    errorFlag, _errorFlagErr := io.ReadBit()
+    if _errorFlagErr != nil {
+        return nil, errors.New("Error parsing 'errorFlag' field " + _errorFlagErr.Error())
+    }
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    var _parent *CEMIFrame
+    var typeSwitchError error
+    switch {
+    case notAckFrame == false:
+        _parent, typeSwitchError = CEMIFrameAckParse(io)
+    case notAckFrame == true && standardFrame == true && polling == false:
+        _parent, typeSwitchError = CEMIFrameDataParse(io)
+    case notAckFrame == true && standardFrame == true && polling == true:
+        _parent, typeSwitchError = CEMIFramePollingDataParse(io)
+    case notAckFrame == true && standardFrame == false && polling == false:
+        _parent, typeSwitchError = CEMIFrameDataExtParse(io)
+    case notAckFrame == true && standardFrame == false && polling == true:
+        _parent, typeSwitchError = CEMIFramePollingDataExtParse(io)
+    }
+    if typeSwitchError != nil {
+        return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
+    }
+
+    // Finish initializing
+    _parent.Child.InitializeParent(_parent, repeated, priority, acknowledgeRequested, errorFlag)
+    return _parent, nil
+}
+
+func (m *CEMIFrame) Serialize(io utils.WriteBuffer) error {
+    return m.Child.Serialize(io)
+}
+
+func (m *CEMIFrame) SerializeParent(io utils.WriteBuffer, child ICEMIFrame, serializeChildFunction func() error) error {
+
+    // Discriminator Field (standardFrame) (Used as input to a switch field)
+    standardFrame := bool(child.StandardFrame())
+    _standardFrameErr := io.WriteBit((standardFrame))
+    if _standardFrameErr != nil {
+        return errors.New("Error serializing 'standardFrame' field " + _standardFrameErr.Error())
+    }
+
+    // Discriminator Field (polling) (Used as input to a switch field)
+    polling := bool(child.Polling())
+    _pollingErr := io.WriteBit((polling))
+    if _pollingErr != nil {
+        return errors.New("Error serializing 'polling' field " + _pollingErr.Error())
+    }
+
+    // Simple Field (repeated)
+    repeated := bool(m.Repeated)
+    _repeatedErr := io.WriteBit((repeated))
+    if _repeatedErr != nil {
+        return errors.New("Error serializing 'repeated' field " + _repeatedErr.Error())
+    }
+
+    // Discriminator Field (notAckFrame) (Used as input to a switch field)
+    notAckFrame := bool(child.NotAckFrame())
+    _notAckFrameErr := io.WriteBit((notAckFrame))
+    if _notAckFrameErr != nil {
+        return errors.New("Error serializing 'notAckFrame' field " + _notAckFrameErr.Error())
+    }
+
+    // Enum field (priority)
+    priority := CastCEMIPriority(m.Priority)
+    _priorityErr := priority.Serialize(io)
+    if _priorityErr != nil {
+        return errors.New("Error serializing 'priority' field " + _priorityErr.Error())
+    }
+
+    // Simple Field (acknowledgeRequested)
+    acknowledgeRequested := bool(m.AcknowledgeRequested)
+    _acknowledgeRequestedErr := io.WriteBit((acknowledgeRequested))
+    if _acknowledgeRequestedErr != nil {
+        return errors.New("Error serializing 'acknowledgeRequested' field " + _acknowledgeRequestedErr.Error())
+    }
+
+    // Simple Field (errorFlag)
+    errorFlag := bool(m.ErrorFlag)
+    _errorFlagErr := io.WriteBit((errorFlag))
+    if _errorFlagErr != nil {
+        return errors.New("Error serializing 'errorFlag' field " + _errorFlagErr.Error())
+    }
+
+    // Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
+    _typeSwitchErr := serializeChildFunction()
+    if _typeSwitchErr != nil {
+        return errors.New("Error serializing sub-type field " + _typeSwitchErr.Error())
+    }
+
+    return nil
+}
+
+func (m *CEMIFrame) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    for {
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "repeated":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Repeated = data
+            case "priority":
+                var data CEMIPriority
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Priority = data
+            case "acknowledgeRequested":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.AcknowledgeRequested = data
+            case "errorFlag":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.ErrorFlag = data
+                default:
+                    switch start.Attr[0].Value {
+                        case "org.apache.plc4x.java.knxnetip.readwrite.CEMIFrameAck":
+                            var dt *CEMIFrameAck
+                            if m.Child != nil {
+                                dt = m.Child.(*CEMIFrameAck)
+                            }
+                            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.knxnetip.readwrite.CEMIFrameData":
+                            var dt *CEMIFrameData
+                            if m.Child != nil {
+                                dt = m.Child.(*CEMIFrameData)
+                            }
+                            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.knxnetip.readwrite.CEMIFramePollingData":
+                            var dt *CEMIFramePollingData
+                            if m.Child != nil {
+                                dt = m.Child.(*CEMIFramePollingData)
+                            }
+                            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.knxnetip.readwrite.CEMIFrameDataExt":
+                            var dt *CEMIFrameDataExt
+                            if m.Child != nil {
+                                dt = m.Child.(*CEMIFrameDataExt)
+                            }
+                            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.knxnetip.readwrite.CEMIFramePollingDataExt":
+                            var dt *CEMIFramePollingDataExt
+                            if m.Child != nil {
+                                dt = m.Child.(*CEMIFramePollingDataExt)
+                            }
+                            if err := d.DecodeElement(&dt, &tok); err != nil {
+                                return err
+                            }
+                            if m.Child == nil {
+                                dt.Parent = m
+                                m.Child = dt
+                            }
+                    }
+            }
+        }
+    }
+}
+
+func (m *CEMIFrame) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    className := reflect.TypeOf(m.Child).String()
+    className = "org.apache.plc4x.java.knxnetip.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.Repeated, xml.StartElement{Name: xml.Name{Local: "repeated"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Priority, xml.StartElement{Name: xml.Name{Local: "priority"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.AcknowledgeRequested, xml.StartElement{Name: xml.Name{Local: "acknowledgeRequested"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.ErrorFlag, xml.StartElement{Name: xml.Name{Local: "errorFlag"}}); err != nil {
+        return err
+    }
+    marshaller, ok := m.Child.(xml.Marshaler)
+    if !ok {
+        return errors.New("child is not castable to Marshaler")
+    }
+    marshaller.MarshalXML(e, start)
+    if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go
similarity index 55%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
copy to plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go
index b56db63..cc5a0dd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go
@@ -21,17 +21,17 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
-type BVLCSecureBVLL struct {
-    Parent *BVLC
-    IBVLCSecureBVLL
+type CEMIFrameAck struct {
+    Parent *CEMIFrame
+    ICEMIFrameAck
 }
 
 // The corresponding interface
-type IBVLCSecureBVLL interface {
+type ICEMIFrameAck interface {
     LengthInBytes() uint16
     LengthInBits() uint16
     Serialize(io utils.WriteBuffer) error
@@ -41,62 +41,74 @@ type IBVLCSecureBVLL interface {
 ///////////////////////////////////////////////////////////
 // Accessors for discriminator values.
 ///////////////////////////////////////////////////////////
-func (m *BVLCSecureBVLL) BvlcFunction() uint8 {
-    return 0x0C
+func (m *CEMIFrameAck) NotAckFrame() bool {
+    return false
+}
+
+func (m *CEMIFrameAck) StandardFrame() bool {
+    return false
+}
+
+func (m *CEMIFrameAck) Polling() bool {
+    return false
 }
 
 
-func (m *BVLCSecureBVLL) InitializeParent(parent *BVLC) {
+func (m *CEMIFrameAck) InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) {
+    m.Parent.Repeated = repeated
+    m.Parent.Priority = priority
+    m.Parent.AcknowledgeRequested = acknowledgeRequested
+    m.Parent.ErrorFlag = errorFlag
 }
 
-func NewBVLCSecureBVLL() *BVLC {
-    child := &BVLCSecureBVLL{
-        Parent: NewBVLC(),
+func NewCEMIFrameAck(repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) *CEMIFrame {
+    child := &CEMIFrameAck{
+        Parent: NewCEMIFrame(repeated, priority, acknowledgeRequested, errorFlag),
     }
     child.Parent.Child = child
     return child.Parent
 }
 
-func CastBVLCSecureBVLL(structType interface{}) BVLCSecureBVLL {
-    castFunc := func(typ interface{}) BVLCSecureBVLL {
-        if casted, ok := typ.(BVLCSecureBVLL); ok {
+func CastCEMIFrameAck(structType interface{}) CEMIFrameAck {
+    castFunc := func(typ interface{}) CEMIFrameAck {
+        if casted, ok := typ.(CEMIFrameAck); ok {
             return casted
         }
-        if casted, ok := typ.(*BVLCSecureBVLL); ok {
+        if casted, ok := typ.(*CEMIFrameAck); ok {
             return *casted
         }
-        if casted, ok := typ.(BVLC); ok {
-            return CastBVLCSecureBVLL(casted.Child)
+        if casted, ok := typ.(CEMIFrame); ok {
+            return CastCEMIFrameAck(casted.Child)
         }
-        if casted, ok := typ.(*BVLC); ok {
-            return CastBVLCSecureBVLL(casted.Child)
+        if casted, ok := typ.(*CEMIFrame); ok {
+            return CastCEMIFrameAck(casted.Child)
         }
-        return BVLCSecureBVLL{}
+        return CEMIFrameAck{}
     }
     return castFunc(structType)
 }
 
-func (m *BVLCSecureBVLL) LengthInBits() uint16 {
+func (m *CEMIFrameAck) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
     return lengthInBits
 }
 
-func (m *BVLCSecureBVLL) LengthInBytes() uint16 {
+func (m *CEMIFrameAck) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func BVLCSecureBVLLParse(io *utils.ReadBuffer) (*BVLC, error) {
+func CEMIFrameAckParse(io *utils.ReadBuffer) (*CEMIFrame, error) {
 
     // Create a partially initialized instance
-    _child := &BVLCSecureBVLL{
-        Parent: &BVLC{},
+    _child := &CEMIFrameAck{
+        Parent: &CEMIFrame{},
     }
     _child.Parent.Child = _child
     return _child.Parent, nil
 }
 
-func (m *BVLCSecureBVLL) Serialize(io utils.WriteBuffer) error {
+func (m *CEMIFrameAck) Serialize(io utils.WriteBuffer) error {
     ser := func() error {
 
         return nil
@@ -104,7 +116,7 @@ func (m *BVLCSecureBVLL) Serialize(io utils.WriteBuffer) error {
     return m.Parent.SerializeParent(io, m, ser)
 }
 
-func (m *BVLCSecureBVLL) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+func (m *CEMIFrameAck) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
     var token xml.Token
     var err error
     token = start
@@ -125,7 +137,7 @@ func (m *BVLCSecureBVLL) UnmarshalXML(d *xml.Decoder, start xml.StartElement) er
     }
 }
 
-func (m *BVLCSecureBVLL) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+func (m *CEMIFrameAck) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     return nil
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go
new file mode 100644
index 0000000..fbae36b
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go
@@ -0,0 +1,486 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/base64"
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+)
+
+// The data-structure of this message
+type CEMIFrameData struct {
+    SourceAddress *KnxAddress
+    DestinationAddress []int8
+    GroupAddress bool
+    HopCount uint8
+    DataLength uint8
+    Tcpi TPCI
+    Counter uint8
+    Apci APCI
+    DataFirstByte int8
+    Data []int8
+    Crc uint8
+    Parent *CEMIFrame
+    ICEMIFrameData
+}
+
+// The corresponding interface
+type ICEMIFrameData interface {
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *CEMIFrameData) NotAckFrame() bool {
+    return true
+}
+
+func (m *CEMIFrameData) StandardFrame() bool {
+    return true
+}
+
+func (m *CEMIFrameData) Polling() bool {
+    return false
+}
+
+
+func (m *CEMIFrameData) InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) {
+    m.Parent.Repeated = repeated
+    m.Parent.Priority = priority
+    m.Parent.AcknowledgeRequested = acknowledgeRequested
+    m.Parent.ErrorFlag = errorFlag
+}
+
+func NewCEMIFrameData(sourceAddress *KnxAddress, destinationAddress []int8, groupAddress bool, hopCount uint8, dataLength uint8, tcpi TPCI, counter uint8, apci APCI, dataFirstByte int8, data []int8, crc uint8, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) *CEMIFrame {
+    child := &CEMIFrameData{
+        SourceAddress: sourceAddress,
+        DestinationAddress: destinationAddress,
+        GroupAddress: groupAddress,
+        HopCount: hopCount,
+        DataLength: dataLength,
+        Tcpi: tcpi,
+        Counter: counter,
+        Apci: apci,
+        DataFirstByte: dataFirstByte,
+        Data: data,
+        Crc: crc,
+        Parent: NewCEMIFrame(repeated, priority, acknowledgeRequested, errorFlag),
+    }
+    child.Parent.Child = child
+    return child.Parent
+}
+
+func CastCEMIFrameData(structType interface{}) CEMIFrameData {
+    castFunc := func(typ interface{}) CEMIFrameData {
+        if casted, ok := typ.(CEMIFrameData); ok {
+            return casted
+        }
+        if casted, ok := typ.(*CEMIFrameData); ok {
+            return *casted
+        }
+        if casted, ok := typ.(CEMIFrame); ok {
+            return CastCEMIFrameData(casted.Child)
+        }
+        if casted, ok := typ.(*CEMIFrame); ok {
+            return CastCEMIFrameData(casted.Child)
+        }
+        return CEMIFrameData{}
+    }
+    return castFunc(structType)
+}
+
+func (m *CEMIFrameData) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Simple field (sourceAddress)
+    lengthInBits += m.SourceAddress.LengthInBits()
+
+    // Array field
+    if len(m.DestinationAddress) > 0 {
+        lengthInBits += 8 * uint16(len(m.DestinationAddress))
+    }
+
+    // Simple field (groupAddress)
+    lengthInBits += 1
+
+    // Simple field (hopCount)
+    lengthInBits += 3
+
+    // Simple field (dataLength)
+    lengthInBits += 4
+
+    // Enum Field (tcpi)
+    lengthInBits += 2
+
+    // Simple field (counter)
+    lengthInBits += 4
+
+    // Enum Field (apci)
+    lengthInBits += 4
+
+    // Simple field (dataFirstByte)
+    lengthInBits += 6
+
+    // Array field
+    if len(m.Data) > 0 {
+        lengthInBits += 8 * uint16(len(m.Data))
+    }
+
+    // Simple field (crc)
+    lengthInBits += 8
+
+    return lengthInBits
+}
+
+func (m *CEMIFrameData) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func CEMIFrameDataParse(io *utils.ReadBuffer) (*CEMIFrame, error) {
+
+    // Simple Field (sourceAddress)
+    sourceAddress, _sourceAddressErr := KnxAddressParse(io)
+    if _sourceAddressErr != nil {
+        return nil, errors.New("Error parsing 'sourceAddress' field " + _sourceAddressErr.Error())
+    }
+
+    // Array field (destinationAddress)
+    // Count array
+    destinationAddress := make([]int8, uint16(2))
+    for curItem := uint16(0); curItem < uint16(uint16(2)); curItem++ {
+        _item, _err := io.ReadInt8(8)
+        if _err != nil {
+            return nil, errors.New("Error parsing 'destinationAddress' field " + _err.Error())
+        }
+        destinationAddress[curItem] = _item
+    }
+
+    // Simple Field (groupAddress)
+    groupAddress, _groupAddressErr := io.ReadBit()
+    if _groupAddressErr != nil {
+        return nil, errors.New("Error parsing 'groupAddress' field " + _groupAddressErr.Error())
+    }
+
+    // Simple Field (hopCount)
+    hopCount, _hopCountErr := io.ReadUint8(3)
+    if _hopCountErr != nil {
+        return nil, errors.New("Error parsing 'hopCount' field " + _hopCountErr.Error())
+    }
+
+    // Simple Field (dataLength)
+    dataLength, _dataLengthErr := io.ReadUint8(4)
+    if _dataLengthErr != nil {
+        return nil, errors.New("Error parsing 'dataLength' field " + _dataLengthErr.Error())
+    }
+
+    // Enum field (tcpi)
+    tcpi, _tcpiErr := TPCIParse(io)
+    if _tcpiErr != nil {
+        return nil, errors.New("Error parsing 'tcpi' field " + _tcpiErr.Error())
+    }
+
+    // Simple Field (counter)
+    counter, _counterErr := io.ReadUint8(4)
+    if _counterErr != nil {
+        return nil, errors.New("Error parsing 'counter' field " + _counterErr.Error())
+    }
+
+    // Enum field (apci)
+    apci, _apciErr := APCIParse(io)
+    if _apciErr != nil {
+        return nil, errors.New("Error parsing 'apci' field " + _apciErr.Error())
+    }
+
+    // Simple Field (dataFirstByte)
+    dataFirstByte, _dataFirstByteErr := io.ReadInt8(6)
+    if _dataFirstByteErr != nil {
+        return nil, errors.New("Error parsing 'dataFirstByte' field " + _dataFirstByteErr.Error())
+    }
+
+    // Array field (data)
+    // Count array
+    data := make([]int8, uint16(dataLength) - uint16(uint16(1)))
+    for curItem := uint16(0); curItem < uint16(uint16(dataLength) - uint16(uint16(1))); curItem++ {
+        _item, _err := io.ReadInt8(8)
+        if _err != nil {
+            return nil, errors.New("Error parsing 'data' field " + _err.Error())
+        }
+        data[curItem] = _item
+    }
+
+    // Simple Field (crc)
+    crc, _crcErr := io.ReadUint8(8)
+    if _crcErr != nil {
+        return nil, errors.New("Error parsing 'crc' field " + _crcErr.Error())
+    }
+
+    // Create a partially initialized instance
+    _child := &CEMIFrameData{
+        SourceAddress: sourceAddress,
+        DestinationAddress: destinationAddress,
+        GroupAddress: groupAddress,
+        HopCount: hopCount,
+        DataLength: dataLength,
+        Tcpi: tcpi,
+        Counter: counter,
+        Apci: apci,
+        DataFirstByte: dataFirstByte,
+        Data: data,
+        Crc: crc,
+        Parent: &CEMIFrame{},
+    }
+    _child.Parent.Child = _child
+    return _child.Parent, nil
+}
+
+func (m *CEMIFrameData) Serialize(io utils.WriteBuffer) error {
+    ser := func() error {
+
+    // Simple Field (sourceAddress)
+    _sourceAddressErr := m.SourceAddress.Serialize(io)
+    if _sourceAddressErr != nil {
+        return errors.New("Error serializing 'sourceAddress' field " + _sourceAddressErr.Error())
+    }
+
+    // Array Field (destinationAddress)
+    if m.DestinationAddress != nil {
+        for _, _element := range m.DestinationAddress {
+            _elementErr := io.WriteInt8(8, _element)
+            if _elementErr != nil {
+                return errors.New("Error serializing 'destinationAddress' field " + _elementErr.Error())
+            }
+        }
+    }
+
+    // Simple Field (groupAddress)
+    groupAddress := bool(m.GroupAddress)
+    _groupAddressErr := io.WriteBit((groupAddress))
+    if _groupAddressErr != nil {
+        return errors.New("Error serializing 'groupAddress' field " + _groupAddressErr.Error())
+    }
+
+    // Simple Field (hopCount)
+    hopCount := uint8(m.HopCount)
+    _hopCountErr := io.WriteUint8(3, (hopCount))
+    if _hopCountErr != nil {
+        return errors.New("Error serializing 'hopCount' field " + _hopCountErr.Error())
+    }
+
+    // Simple Field (dataLength)
+    dataLength := uint8(m.DataLength)
+    _dataLengthErr := io.WriteUint8(4, (dataLength))
+    if _dataLengthErr != nil {
+        return errors.New("Error serializing 'dataLength' field " + _dataLengthErr.Error())
+    }
+
+    // Enum field (tcpi)
+    tcpi := CastTPCI(m.Tcpi)
+    _tcpiErr := tcpi.Serialize(io)
+    if _tcpiErr != nil {
+        return errors.New("Error serializing 'tcpi' field " + _tcpiErr.Error())
+    }
+
+    // Simple Field (counter)
+    counter := uint8(m.Counter)
+    _counterErr := io.WriteUint8(4, (counter))
+    if _counterErr != nil {
+        return errors.New("Error serializing 'counter' field " + _counterErr.Error())
+    }
+
+    // Enum field (apci)
+    apci := CastAPCI(m.Apci)
+    _apciErr := apci.Serialize(io)
+    if _apciErr != nil {
+        return errors.New("Error serializing 'apci' field " + _apciErr.Error())
+    }
+
+    // Simple Field (dataFirstByte)
+    dataFirstByte := int8(m.DataFirstByte)
+    _dataFirstByteErr := io.WriteInt8(6, (dataFirstByte))
+    if _dataFirstByteErr != nil {
+        return errors.New("Error serializing 'dataFirstByte' field " + _dataFirstByteErr.Error())
+    }
+
+    // Array Field (data)
+    if m.Data != nil {
+        for _, _element := range m.Data {
+            _elementErr := io.WriteInt8(8, _element)
+            if _elementErr != nil {
+                return errors.New("Error serializing 'data' field " + _elementErr.Error())
+            }
+        }
+    }
+
+    // Simple Field (crc)
+    crc := uint8(m.Crc)
+    _crcErr := io.WriteUint8(8, (crc))
+    if _crcErr != nil {
+        return errors.New("Error serializing 'crc' field " + _crcErr.Error())
+    }
+
+        return nil
+    }
+    return m.Parent.SerializeParent(io, m, ser)
+}
+
+func (m *CEMIFrameData) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    token = start
+    for {
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "sourceAddress":
+                var data *KnxAddress
+                if err := d.DecodeElement(data, &tok); err != nil {
+                    return err
+                }
+                m.SourceAddress = data
+            case "destinationAddress":
+                var _encoded string
+                if err := d.DecodeElement(&_encoded, &tok); err != nil {
+                    return err
+                }
+                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
+                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
+                if err != nil {
+                    return err
+                }
+                m.DestinationAddress = utils.ByteToInt8(_decoded[0:_len])
+            case "groupAddress":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.GroupAddress = data
+            case "hopCount":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.HopCount = data
+            case "dataLength":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.DataLength = data
+            case "tcpi":
+                var data TPCI
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Tcpi = data
+            case "counter":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Counter = data
+            case "apci":
+                var data APCI
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Apci = data
+            case "dataFirstByte":
+                var data int8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.DataFirstByte = data
+            case "data":
+                var _encoded string
+                if err := d.DecodeElement(&_encoded, &tok); err != nil {
+                    return err
+                }
+                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
+                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
+                if err != nil {
+                    return err
+                }
+                m.Data = utils.ByteToInt8(_decoded[0:_len])
+            case "crc":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Crc = data
+            }
+        }
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+    }
+}
+
+func (m *CEMIFrameData) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.SourceAddress, xml.StartElement{Name: xml.Name{Local: "sourceAddress"}}); err != nil {
+        return err
+    }
+    _encodedDestinationAddress := make([]byte, base64.StdEncoding.EncodedLen(len(m.DestinationAddress)))
+    base64.StdEncoding.Encode(_encodedDestinationAddress, utils.Int8ToByte(m.DestinationAddress))
+    if err := e.EncodeElement(_encodedDestinationAddress, xml.StartElement{Name: xml.Name{Local: "destinationAddress"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.GroupAddress, xml.StartElement{Name: xml.Name{Local: "groupAddress"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.HopCount, xml.StartElement{Name: xml.Name{Local: "hopCount"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.DataLength, xml.StartElement{Name: xml.Name{Local: "dataLength"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Tcpi, xml.StartElement{Name: xml.Name{Local: "tcpi"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Counter, xml.StartElement{Name: xml.Name{Local: "counter"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Apci, xml.StartElement{Name: xml.Name{Local: "apci"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.DataFirstByte, xml.StartElement{Name: xml.Name{Local: "dataFirstByte"}}); err != nil {
+        return err
+    }
+    _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Crc, xml.StartElement{Name: xml.Name{Local: "crc"}}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go
new file mode 100644
index 0000000..1c4ea64
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go
@@ -0,0 +1,514 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/base64"
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+)
+
+// The data-structure of this message
+type CEMIFrameDataExt struct {
+    GroupAddress bool
+    HopCount uint8
+    ExtendedFrameFormat uint8
+    SourceAddress *KnxAddress
+    DestinationAddress []int8
+    DataLength uint8
+    Tcpi TPCI
+    Counter uint8
+    Apci APCI
+    DataFirstByte int8
+    Data []int8
+    Crc uint8
+    Parent *CEMIFrame
+    ICEMIFrameDataExt
+}
+
+// The corresponding interface
+type ICEMIFrameDataExt interface {
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *CEMIFrameDataExt) NotAckFrame() bool {
+    return true
+}
+
+func (m *CEMIFrameDataExt) StandardFrame() bool {
+    return false
+}
+
+func (m *CEMIFrameDataExt) Polling() bool {
+    return false
+}
+
+
+func (m *CEMIFrameDataExt) InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) {
+    m.Parent.Repeated = repeated
+    m.Parent.Priority = priority
+    m.Parent.AcknowledgeRequested = acknowledgeRequested
+    m.Parent.ErrorFlag = errorFlag
+}
+
+func NewCEMIFrameDataExt(groupAddress bool, hopCount uint8, extendedFrameFormat uint8, sourceAddress *KnxAddress, destinationAddress []int8, dataLength uint8, tcpi TPCI, counter uint8, apci APCI, dataFirstByte int8, data []int8, crc uint8, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) *CEMIFrame {
+    child := &CEMIFrameDataExt{
+        GroupAddress: groupAddress,
+        HopCount: hopCount,
+        ExtendedFrameFormat: extendedFrameFormat,
+        SourceAddress: sourceAddress,
+        DestinationAddress: destinationAddress,
+        DataLength: dataLength,
+        Tcpi: tcpi,
+        Counter: counter,
+        Apci: apci,
+        DataFirstByte: dataFirstByte,
+        Data: data,
+        Crc: crc,
+        Parent: NewCEMIFrame(repeated, priority, acknowledgeRequested, errorFlag),
+    }
+    child.Parent.Child = child
+    return child.Parent
+}
+
+func CastCEMIFrameDataExt(structType interface{}) CEMIFrameDataExt {
+    castFunc := func(typ interface{}) CEMIFrameDataExt {
+        if casted, ok := typ.(CEMIFrameDataExt); ok {
+            return casted
+        }
+        if casted, ok := typ.(*CEMIFrameDataExt); ok {
+            return *casted
+        }
+        if casted, ok := typ.(CEMIFrame); ok {
+            return CastCEMIFrameDataExt(casted.Child)
+        }
+        if casted, ok := typ.(*CEMIFrame); ok {
+            return CastCEMIFrameDataExt(casted.Child)
+        }
+        return CEMIFrameDataExt{}
+    }
+    return castFunc(structType)
+}
+
+func (m *CEMIFrameDataExt) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Simple field (groupAddress)
+    lengthInBits += 1
+
+    // Simple field (hopCount)
+    lengthInBits += 3
+
+    // Simple field (extendedFrameFormat)
+    lengthInBits += 4
+
+    // Simple field (sourceAddress)
+    lengthInBits += m.SourceAddress.LengthInBits()
+
+    // Array field
+    if len(m.DestinationAddress) > 0 {
+        lengthInBits += 8 * uint16(len(m.DestinationAddress))
+    }
+
+    // Simple field (dataLength)
+    lengthInBits += 8
+
+    // Enum Field (tcpi)
+    lengthInBits += 2
+
+    // Simple field (counter)
+    lengthInBits += 4
+
+    // Enum Field (apci)
+    lengthInBits += 4
+
+    // Simple field (dataFirstByte)
+    lengthInBits += 6
+
+    // Array field
+    if len(m.Data) > 0 {
+        lengthInBits += 8 * uint16(len(m.Data))
+    }
+
+    // Simple field (crc)
+    lengthInBits += 8
+
+    return lengthInBits
+}
+
+func (m *CEMIFrameDataExt) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func CEMIFrameDataExtParse(io *utils.ReadBuffer) (*CEMIFrame, error) {
+
+    // Simple Field (groupAddress)
+    groupAddress, _groupAddressErr := io.ReadBit()
+    if _groupAddressErr != nil {
+        return nil, errors.New("Error parsing 'groupAddress' field " + _groupAddressErr.Error())
+    }
+
+    // Simple Field (hopCount)
+    hopCount, _hopCountErr := io.ReadUint8(3)
+    if _hopCountErr != nil {
+        return nil, errors.New("Error parsing 'hopCount' field " + _hopCountErr.Error())
+    }
+
+    // Simple Field (extendedFrameFormat)
+    extendedFrameFormat, _extendedFrameFormatErr := io.ReadUint8(4)
+    if _extendedFrameFormatErr != nil {
+        return nil, errors.New("Error parsing 'extendedFrameFormat' field " + _extendedFrameFormatErr.Error())
+    }
+
+    // Simple Field (sourceAddress)
+    sourceAddress, _sourceAddressErr := KnxAddressParse(io)
+    if _sourceAddressErr != nil {
+        return nil, errors.New("Error parsing 'sourceAddress' field " + _sourceAddressErr.Error())
+    }
+
+    // Array field (destinationAddress)
+    // Count array
+    destinationAddress := make([]int8, uint16(2))
+    for curItem := uint16(0); curItem < uint16(uint16(2)); curItem++ {
+        _item, _err := io.ReadInt8(8)
+        if _err != nil {
+            return nil, errors.New("Error parsing 'destinationAddress' field " + _err.Error())
+        }
+        destinationAddress[curItem] = _item
+    }
+
+    // Simple Field (dataLength)
+    dataLength, _dataLengthErr := io.ReadUint8(8)
+    if _dataLengthErr != nil {
+        return nil, errors.New("Error parsing 'dataLength' field " + _dataLengthErr.Error())
+    }
+
+    // Enum field (tcpi)
+    tcpi, _tcpiErr := TPCIParse(io)
+    if _tcpiErr != nil {
+        return nil, errors.New("Error parsing 'tcpi' field " + _tcpiErr.Error())
+    }
+
+    // Simple Field (counter)
+    counter, _counterErr := io.ReadUint8(4)
+    if _counterErr != nil {
+        return nil, errors.New("Error parsing 'counter' field " + _counterErr.Error())
+    }
+
+    // Enum field (apci)
+    apci, _apciErr := APCIParse(io)
+    if _apciErr != nil {
+        return nil, errors.New("Error parsing 'apci' field " + _apciErr.Error())
+    }
+
+    // Simple Field (dataFirstByte)
+    dataFirstByte, _dataFirstByteErr := io.ReadInt8(6)
+    if _dataFirstByteErr != nil {
+        return nil, errors.New("Error parsing 'dataFirstByte' field " + _dataFirstByteErr.Error())
+    }
+
+    // Array field (data)
+    // Count array
+    data := make([]int8, uint16(dataLength) - uint16(uint16(1)))
+    for curItem := uint16(0); curItem < uint16(uint16(dataLength) - uint16(uint16(1))); curItem++ {
+        _item, _err := io.ReadInt8(8)
+        if _err != nil {
+            return nil, errors.New("Error parsing 'data' field " + _err.Error())
+        }
+        data[curItem] = _item
+    }
+
+    // Simple Field (crc)
+    crc, _crcErr := io.ReadUint8(8)
+    if _crcErr != nil {
+        return nil, errors.New("Error parsing 'crc' field " + _crcErr.Error())
+    }
+
+    // Create a partially initialized instance
+    _child := &CEMIFrameDataExt{
+        GroupAddress: groupAddress,
+        HopCount: hopCount,
+        ExtendedFrameFormat: extendedFrameFormat,
+        SourceAddress: sourceAddress,
+        DestinationAddress: destinationAddress,
+        DataLength: dataLength,
+        Tcpi: tcpi,
+        Counter: counter,
+        Apci: apci,
+        DataFirstByte: dataFirstByte,
+        Data: data,
+        Crc: crc,
+        Parent: &CEMIFrame{},
+    }
+    _child.Parent.Child = _child
+    return _child.Parent, nil
+}
+
+func (m *CEMIFrameDataExt) Serialize(io utils.WriteBuffer) error {
+    ser := func() error {
+
+    // Simple Field (groupAddress)
+    groupAddress := bool(m.GroupAddress)
+    _groupAddressErr := io.WriteBit((groupAddress))
+    if _groupAddressErr != nil {
+        return errors.New("Error serializing 'groupAddress' field " + _groupAddressErr.Error())
+    }
+
+    // Simple Field (hopCount)
+    hopCount := uint8(m.HopCount)
+    _hopCountErr := io.WriteUint8(3, (hopCount))
+    if _hopCountErr != nil {
+        return errors.New("Error serializing 'hopCount' field " + _hopCountErr.Error())
+    }
+
+    // Simple Field (extendedFrameFormat)
+    extendedFrameFormat := uint8(m.ExtendedFrameFormat)
+    _extendedFrameFormatErr := io.WriteUint8(4, (extendedFrameFormat))
+    if _extendedFrameFormatErr != nil {
+        return errors.New("Error serializing 'extendedFrameFormat' field " + _extendedFrameFormatErr.Error())
+    }
+
+    // Simple Field (sourceAddress)
+    _sourceAddressErr := m.SourceAddress.Serialize(io)
+    if _sourceAddressErr != nil {
+        return errors.New("Error serializing 'sourceAddress' field " + _sourceAddressErr.Error())
+    }
+
+    // Array Field (destinationAddress)
+    if m.DestinationAddress != nil {
+        for _, _element := range m.DestinationAddress {
+            _elementErr := io.WriteInt8(8, _element)
+            if _elementErr != nil {
+                return errors.New("Error serializing 'destinationAddress' field " + _elementErr.Error())
+            }
+        }
+    }
+
+    // Simple Field (dataLength)
+    dataLength := uint8(m.DataLength)
+    _dataLengthErr := io.WriteUint8(8, (dataLength))
+    if _dataLengthErr != nil {
+        return errors.New("Error serializing 'dataLength' field " + _dataLengthErr.Error())
+    }
+
+    // Enum field (tcpi)
+    tcpi := CastTPCI(m.Tcpi)
+    _tcpiErr := tcpi.Serialize(io)
+    if _tcpiErr != nil {
+        return errors.New("Error serializing 'tcpi' field " + _tcpiErr.Error())
+    }
+
+    // Simple Field (counter)
+    counter := uint8(m.Counter)
+    _counterErr := io.WriteUint8(4, (counter))
+    if _counterErr != nil {
+        return errors.New("Error serializing 'counter' field " + _counterErr.Error())
+    }
+
+    // Enum field (apci)
+    apci := CastAPCI(m.Apci)
+    _apciErr := apci.Serialize(io)
+    if _apciErr != nil {
+        return errors.New("Error serializing 'apci' field " + _apciErr.Error())
+    }
+
+    // Simple Field (dataFirstByte)
+    dataFirstByte := int8(m.DataFirstByte)
+    _dataFirstByteErr := io.WriteInt8(6, (dataFirstByte))
+    if _dataFirstByteErr != nil {
+        return errors.New("Error serializing 'dataFirstByte' field " + _dataFirstByteErr.Error())
+    }
+
+    // Array Field (data)
+    if m.Data != nil {
+        for _, _element := range m.Data {
+            _elementErr := io.WriteInt8(8, _element)
+            if _elementErr != nil {
+                return errors.New("Error serializing 'data' field " + _elementErr.Error())
+            }
+        }
+    }
+
+    // Simple Field (crc)
+    crc := uint8(m.Crc)
+    _crcErr := io.WriteUint8(8, (crc))
+    if _crcErr != nil {
+        return errors.New("Error serializing 'crc' field " + _crcErr.Error())
+    }
+
+        return nil
+    }
+    return m.Parent.SerializeParent(io, m, ser)
+}
+
+func (m *CEMIFrameDataExt) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    token = start
+    for {
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "groupAddress":
+                var data bool
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.GroupAddress = data
+            case "hopCount":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.HopCount = data
+            case "extendedFrameFormat":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.ExtendedFrameFormat = data
+            case "sourceAddress":
+                var data *KnxAddress
+                if err := d.DecodeElement(data, &tok); err != nil {
+                    return err
+                }
+                m.SourceAddress = data
+            case "destinationAddress":
+                var _encoded string
+                if err := d.DecodeElement(&_encoded, &tok); err != nil {
+                    return err
+                }
+                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
+                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
+                if err != nil {
+                    return err
+                }
+                m.DestinationAddress = utils.ByteToInt8(_decoded[0:_len])
+            case "dataLength":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.DataLength = data
+            case "tcpi":
+                var data TPCI
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Tcpi = data
+            case "counter":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Counter = data
+            case "apci":
+                var data APCI
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Apci = data
+            case "dataFirstByte":
+                var data int8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.DataFirstByte = data
+            case "data":
+                var _encoded string
+                if err := d.DecodeElement(&_encoded, &tok); err != nil {
+                    return err
+                }
+                _decoded := make([]byte, base64.StdEncoding.DecodedLen(len(_encoded)))
+                _len, err := base64.StdEncoding.Decode(_decoded, []byte(_encoded))
+                if err != nil {
+                    return err
+                }
+                m.Data = utils.ByteToInt8(_decoded[0:_len])
+            case "crc":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Crc = data
+            }
+        }
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+    }
+}
+
+func (m *CEMIFrameDataExt) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.GroupAddress, xml.StartElement{Name: xml.Name{Local: "groupAddress"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.HopCount, xml.StartElement{Name: xml.Name{Local: "hopCount"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.ExtendedFrameFormat, xml.StartElement{Name: xml.Name{Local: "extendedFrameFormat"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.SourceAddress, xml.StartElement{Name: xml.Name{Local: "sourceAddress"}}); err != nil {
+        return err
+    }
+    _encodedDestinationAddress := make([]byte, base64.StdEncoding.EncodedLen(len(m.DestinationAddress)))
+    base64.StdEncoding.Encode(_encodedDestinationAddress, utils.Int8ToByte(m.DestinationAddress))
+    if err := e.EncodeElement(_encodedDestinationAddress, xml.StartElement{Name: xml.Name{Local: "destinationAddress"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.DataLength, xml.StartElement{Name: xml.Name{Local: "dataLength"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Tcpi, xml.StartElement{Name: xml.Name{Local: "tcpi"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Counter, xml.StartElement{Name: xml.Name{Local: "counter"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Apci, xml.StartElement{Name: xml.Name{Local: "apci"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.DataFirstByte, xml.StartElement{Name: xml.Name{Local: "dataFirstByte"}}); err != nil {
+        return err
+    }
+    _encodedData := make([]byte, base64.StdEncoding.EncodedLen(len(m.Data)))
+    base64.StdEncoding.Encode(_encodedData, utils.Int8ToByte(m.Data))
+    if err := e.EncodeElement(_encodedData, xml.StartElement{Name: xml.Name{Local: "data"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Crc, xml.StartElement{Name: xml.Name{Local: "crc"}}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go
similarity index 54%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
copy to plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go
index 4c63c75..8468590 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go
@@ -21,17 +21,17 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
-type BACnetErrorReadRange struct {
-    Parent *BACnetError
-    IBACnetErrorReadRange
+type CEMIFramePollingData struct {
+    Parent *CEMIFrame
+    ICEMIFramePollingData
 }
 
 // The corresponding interface
-type IBACnetErrorReadRange interface {
+type ICEMIFramePollingData interface {
     LengthInBytes() uint16
     LengthInBits() uint16
     Serialize(io utils.WriteBuffer) error
@@ -41,62 +41,74 @@ type IBACnetErrorReadRange interface {
 ///////////////////////////////////////////////////////////
 // Accessors for discriminator values.
 ///////////////////////////////////////////////////////////
-func (m *BACnetErrorReadRange) ServiceChoice() uint8 {
-    return 0x1A
+func (m *CEMIFramePollingData) NotAckFrame() bool {
+    return true
+}
+
+func (m *CEMIFramePollingData) StandardFrame() bool {
+    return true
+}
+
+func (m *CEMIFramePollingData) Polling() bool {
+    return true
 }
 
 
-func (m *BACnetErrorReadRange) InitializeParent(parent *BACnetError) {
+func (m *CEMIFramePollingData) InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) {
+    m.Parent.Repeated = repeated
+    m.Parent.Priority = priority
+    m.Parent.AcknowledgeRequested = acknowledgeRequested
+    m.Parent.ErrorFlag = errorFlag
 }
 
-func NewBACnetErrorReadRange() *BACnetError {
-    child := &BACnetErrorReadRange{
-        Parent: NewBACnetError(),
+func NewCEMIFramePollingData(repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) *CEMIFrame {
+    child := &CEMIFramePollingData{
+        Parent: NewCEMIFrame(repeated, priority, acknowledgeRequested, errorFlag),
     }
     child.Parent.Child = child
     return child.Parent
 }
 
-func CastBACnetErrorReadRange(structType interface{}) BACnetErrorReadRange {
-    castFunc := func(typ interface{}) BACnetErrorReadRange {
-        if casted, ok := typ.(BACnetErrorReadRange); ok {
+func CastCEMIFramePollingData(structType interface{}) CEMIFramePollingData {
+    castFunc := func(typ interface{}) CEMIFramePollingData {
+        if casted, ok := typ.(CEMIFramePollingData); ok {
             return casted
         }
-        if casted, ok := typ.(*BACnetErrorReadRange); ok {
+        if casted, ok := typ.(*CEMIFramePollingData); ok {
             return *casted
         }
-        if casted, ok := typ.(BACnetError); ok {
-            return CastBACnetErrorReadRange(casted.Child)
+        if casted, ok := typ.(CEMIFrame); ok {
+            return CastCEMIFramePollingData(casted.Child)
         }
-        if casted, ok := typ.(*BACnetError); ok {
-            return CastBACnetErrorReadRange(casted.Child)
+        if casted, ok := typ.(*CEMIFrame); ok {
+            return CastCEMIFramePollingData(casted.Child)
         }
-        return BACnetErrorReadRange{}
+        return CEMIFramePollingData{}
     }
     return castFunc(structType)
 }
 
-func (m *BACnetErrorReadRange) LengthInBits() uint16 {
+func (m *CEMIFramePollingData) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
     return lengthInBits
 }
 
-func (m *BACnetErrorReadRange) LengthInBytes() uint16 {
+func (m *CEMIFramePollingData) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func BACnetErrorReadRangeParse(io *utils.ReadBuffer) (*BACnetError, error) {
+func CEMIFramePollingDataParse(io *utils.ReadBuffer) (*CEMIFrame, error) {
 
     // Create a partially initialized instance
-    _child := &BACnetErrorReadRange{
-        Parent: &BACnetError{},
+    _child := &CEMIFramePollingData{
+        Parent: &CEMIFrame{},
     }
     _child.Parent.Child = _child
     return _child.Parent, nil
 }
 
-func (m *BACnetErrorReadRange) Serialize(io utils.WriteBuffer) error {
+func (m *CEMIFramePollingData) Serialize(io utils.WriteBuffer) error {
     ser := func() error {
 
         return nil
@@ -104,7 +116,7 @@ func (m *BACnetErrorReadRange) Serialize(io utils.WriteBuffer) error {
     return m.Parent.SerializeParent(io, m, ser)
 }
 
-func (m *BACnetErrorReadRange) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+func (m *CEMIFramePollingData) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
     var token xml.Token
     var err error
     token = start
@@ -125,7 +137,7 @@ func (m *BACnetErrorReadRange) UnmarshalXML(d *xml.Decoder, start xml.StartEleme
     }
 }
 
-func (m *BACnetErrorReadRange) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+func (m *CEMIFramePollingData) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go
similarity index 53%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
copy to plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go
index 5de6d40..05a509c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go
@@ -21,17 +21,17 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
-type BACnetErrorCreateObject struct {
-    Parent *BACnetError
-    IBACnetErrorCreateObject
+type CEMIFramePollingDataExt struct {
+    Parent *CEMIFrame
+    ICEMIFramePollingDataExt
 }
 
 // The corresponding interface
-type IBACnetErrorCreateObject interface {
+type ICEMIFramePollingDataExt interface {
     LengthInBytes() uint16
     LengthInBits() uint16
     Serialize(io utils.WriteBuffer) error
@@ -41,62 +41,74 @@ type IBACnetErrorCreateObject interface {
 ///////////////////////////////////////////////////////////
 // Accessors for discriminator values.
 ///////////////////////////////////////////////////////////
-func (m *BACnetErrorCreateObject) ServiceChoice() uint8 {
-    return 0x0A
+func (m *CEMIFramePollingDataExt) NotAckFrame() bool {
+    return true
+}
+
+func (m *CEMIFramePollingDataExt) StandardFrame() bool {
+    return false
+}
+
+func (m *CEMIFramePollingDataExt) Polling() bool {
+    return true
 }
 
 
-func (m *BACnetErrorCreateObject) InitializeParent(parent *BACnetError) {
+func (m *CEMIFramePollingDataExt) InitializeParent(parent *CEMIFrame, repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) {
+    m.Parent.Repeated = repeated
+    m.Parent.Priority = priority
+    m.Parent.AcknowledgeRequested = acknowledgeRequested
+    m.Parent.ErrorFlag = errorFlag
 }
 
-func NewBACnetErrorCreateObject() *BACnetError {
-    child := &BACnetErrorCreateObject{
-        Parent: NewBACnetError(),
+func NewCEMIFramePollingDataExt(repeated bool, priority CEMIPriority, acknowledgeRequested bool, errorFlag bool) *CEMIFrame {
+    child := &CEMIFramePollingDataExt{
+        Parent: NewCEMIFrame(repeated, priority, acknowledgeRequested, errorFlag),
     }
     child.Parent.Child = child
     return child.Parent
 }
 
-func CastBACnetErrorCreateObject(structType interface{}) BACnetErrorCreateObject {
-    castFunc := func(typ interface{}) BACnetErrorCreateObject {
-        if casted, ok := typ.(BACnetErrorCreateObject); ok {
+func CastCEMIFramePollingDataExt(structType interface{}) CEMIFramePollingDataExt {
+    castFunc := func(typ interface{}) CEMIFramePollingDataExt {
+        if casted, ok := typ.(CEMIFramePollingDataExt); ok {
             return casted
         }
-        if casted, ok := typ.(*BACnetErrorCreateObject); ok {
+        if casted, ok := typ.(*CEMIFramePollingDataExt); ok {
             return *casted
         }
-        if casted, ok := typ.(BACnetError); ok {
-            return CastBACnetErrorCreateObject(casted.Child)
+        if casted, ok := typ.(CEMIFrame); ok {
+            return CastCEMIFramePollingDataExt(casted.Child)
         }
-        if casted, ok := typ.(*BACnetError); ok {
-            return CastBACnetErrorCreateObject(casted.Child)
+        if casted, ok := typ.(*CEMIFrame); ok {
+            return CastCEMIFramePollingDataExt(casted.Child)
         }
-        return BACnetErrorCreateObject{}
+        return CEMIFramePollingDataExt{}
     }
     return castFunc(structType)
 }
 
-func (m *BACnetErrorCreateObject) LengthInBits() uint16 {
+func (m *CEMIFramePollingDataExt) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
     return lengthInBits
 }
 
-func (m *BACnetErrorCreateObject) LengthInBytes() uint16 {
+func (m *CEMIFramePollingDataExt) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func BACnetErrorCreateObjectParse(io *utils.ReadBuffer) (*BACnetError, error) {
+func CEMIFramePollingDataExtParse(io *utils.ReadBuffer) (*CEMIFrame, error) {
 
     // Create a partially initialized instance
-    _child := &BACnetErrorCreateObject{
-        Parent: &BACnetError{},
+    _child := &CEMIFramePollingDataExt{
+        Parent: &CEMIFrame{},
     }
     _child.Parent.Child = _child
     return _child.Parent, nil
 }
 
-func (m *BACnetErrorCreateObject) Serialize(io utils.WriteBuffer) error {
+func (m *CEMIFramePollingDataExt) Serialize(io utils.WriteBuffer) error {
     ser := func() error {
 
         return nil
@@ -104,7 +116,7 @@ func (m *BACnetErrorCreateObject) Serialize(io utils.WriteBuffer) error {
     return m.Parent.SerializeParent(io, m, ser)
 }
 
-func (m *BACnetErrorCreateObject) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+func (m *CEMIFramePollingDataExt) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
     var token xml.Token
     var err error
     token = start
@@ -125,7 +137,7 @@ func (m *BACnetErrorCreateObject) UnmarshalXML(d *xml.Decoder, start xml.StartEl
     }
 }
 
-func (m *BACnetErrorCreateObject) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+func (m *CEMIFramePollingDataExt) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     return nil
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go
new file mode 100644
index 0000000..6f117ac
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go
@@ -0,0 +1,300 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+)
+
+// The data-structure of this message
+type CEMIMPropReadCon struct {
+    InterfaceObjectType uint16
+    ObjectInstance uint8
+    PropertyId uint8
+    NumberOfElements uint8
+    StartIndex uint16
+    Unknown uint16
+    Parent *CEMI
+    ICEMIMPropReadCon
+}
+
+// The corresponding interface
+type ICEMIMPropReadCon interface {
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *CEMIMPropReadCon) MessageCode() uint8 {
+    return 0xFB
+}
+
+
+func (m *CEMIMPropReadCon) InitializeParent(parent *CEMI) {
+}
+
+func NewCEMIMPropReadCon(interfaceObjectType uint16, objectInstance uint8, propertyId uint8, numberOfElements uint8, startIndex uint16, unknown uint16, ) *CEMI {
+    child := &CEMIMPropReadCon{
+        InterfaceObjectType: interfaceObjectType,
+        ObjectInstance: objectInstance,
+        PropertyId: propertyId,
+        NumberOfElements: numberOfElements,
+        StartIndex: startIndex,
+        Unknown: unknown,
+        Parent: NewCEMI(),
+    }
+    child.Parent.Child = child
+    return child.Parent
+}
+
+func CastCEMIMPropReadCon(structType interface{}) CEMIMPropReadCon {
+    castFunc := func(typ interface{}) CEMIMPropReadCon {
+        if casted, ok := typ.(CEMIMPropReadCon); ok {
+            return casted
+        }
+        if casted, ok := typ.(*CEMIMPropReadCon); ok {
+            return *casted
+        }
+        if casted, ok := typ.(CEMI); ok {
+            return CastCEMIMPropReadCon(casted.Child)
+        }
+        if casted, ok := typ.(*CEMI); ok {
+            return CastCEMIMPropReadCon(casted.Child)
+        }
+        return CEMIMPropReadCon{}
+    }
+    return castFunc(structType)
+}
+
+func (m *CEMIMPropReadCon) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Simple field (interfaceObjectType)
+    lengthInBits += 16
+
+    // Simple field (objectInstance)
+    lengthInBits += 8
+
+    // Simple field (propertyId)
+    lengthInBits += 8
+
+    // Simple field (numberOfElements)
+    lengthInBits += 4
+
+    // Simple field (startIndex)
+    lengthInBits += 12
+
+    // Simple field (unknown)
+    lengthInBits += 16
+
+    return lengthInBits
+}
+
+func (m *CEMIMPropReadCon) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func CEMIMPropReadConParse(io *utils.ReadBuffer) (*CEMI, error) {
+
+    // Simple Field (interfaceObjectType)
+    interfaceObjectType, _interfaceObjectTypeErr := io.ReadUint16(16)
+    if _interfaceObjectTypeErr != nil {
+        return nil, errors.New("Error parsing 'interfaceObjectType' field " + _interfaceObjectTypeErr.Error())
+    }
+
+    // Simple Field (objectInstance)
+    objectInstance, _objectInstanceErr := io.ReadUint8(8)
+    if _objectInstanceErr != nil {
+        return nil, errors.New("Error parsing 'objectInstance' field " + _objectInstanceErr.Error())
+    }
+
+    // Simple Field (propertyId)
+    propertyId, _propertyIdErr := io.ReadUint8(8)
+    if _propertyIdErr != nil {
+        return nil, errors.New("Error parsing 'propertyId' field " + _propertyIdErr.Error())
+    }
+
+    // Simple Field (numberOfElements)
+    numberOfElements, _numberOfElementsErr := io.ReadUint8(4)
+    if _numberOfElementsErr != nil {
+        return nil, errors.New("Error parsing 'numberOfElements' field " + _numberOfElementsErr.Error())
+    }
+
+    // Simple Field (startIndex)
+    startIndex, _startIndexErr := io.ReadUint16(12)
+    if _startIndexErr != nil {
+        return nil, errors.New("Error parsing 'startIndex' field " + _startIndexErr.Error())
+    }
+
+    // Simple Field (unknown)
+    unknown, _unknownErr := io.ReadUint16(16)
+    if _unknownErr != nil {
+        return nil, errors.New("Error parsing 'unknown' field " + _unknownErr.Error())
+    }
+
+    // Create a partially initialized instance
+    _child := &CEMIMPropReadCon{
+        InterfaceObjectType: interfaceObjectType,
+        ObjectInstance: objectInstance,
+        PropertyId: propertyId,
+        NumberOfElements: numberOfElements,
+        StartIndex: startIndex,
+        Unknown: unknown,
+        Parent: &CEMI{},
+    }
+    _child.Parent.Child = _child
+    return _child.Parent, nil
+}
+
+func (m *CEMIMPropReadCon) Serialize(io utils.WriteBuffer) error {
+    ser := func() error {
+
+    // Simple Field (interfaceObjectType)
+    interfaceObjectType := uint16(m.InterfaceObjectType)
+    _interfaceObjectTypeErr := io.WriteUint16(16, (interfaceObjectType))
+    if _interfaceObjectTypeErr != nil {
+        return errors.New("Error serializing 'interfaceObjectType' field " + _interfaceObjectTypeErr.Error())
+    }
+
+    // Simple Field (objectInstance)
+    objectInstance := uint8(m.ObjectInstance)
+    _objectInstanceErr := io.WriteUint8(8, (objectInstance))
+    if _objectInstanceErr != nil {
+        return errors.New("Error serializing 'objectInstance' field " + _objectInstanceErr.Error())
+    }
+
+    // Simple Field (propertyId)
+    propertyId := uint8(m.PropertyId)
+    _propertyIdErr := io.WriteUint8(8, (propertyId))
+    if _propertyIdErr != nil {
+        return errors.New("Error serializing 'propertyId' field " + _propertyIdErr.Error())
+    }
+
+    // Simple Field (numberOfElements)
+    numberOfElements := uint8(m.NumberOfElements)
+    _numberOfElementsErr := io.WriteUint8(4, (numberOfElements))
+    if _numberOfElementsErr != nil {
+        return errors.New("Error serializing 'numberOfElements' field " + _numberOfElementsErr.Error())
+    }
+
+    // Simple Field (startIndex)
+    startIndex := uint16(m.StartIndex)
+    _startIndexErr := io.WriteUint16(12, (startIndex))
+    if _startIndexErr != nil {
+        return errors.New("Error serializing 'startIndex' field " + _startIndexErr.Error())
+    }
+
+    // Simple Field (unknown)
+    unknown := uint16(m.Unknown)
+    _unknownErr := io.WriteUint16(16, (unknown))
+    if _unknownErr != nil {
+        return errors.New("Error serializing 'unknown' field " + _unknownErr.Error())
+    }
+
+        return nil
+    }
+    return m.Parent.SerializeParent(io, m, ser)
+}
+
+func (m *CEMIMPropReadCon) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    token = start
+    for {
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "interfaceObjectType":
+                var data uint16
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.InterfaceObjectType = data
+            case "objectInstance":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.ObjectInstance = data
+            case "propertyId":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.PropertyId = data
+            case "numberOfElements":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.NumberOfElements = data
+            case "startIndex":
+                var data uint16
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.StartIndex = data
+            case "unknown":
+                var data uint16
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.Unknown = data
+            }
+        }
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+    }
+}
+
+func (m *CEMIMPropReadCon) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.InterfaceObjectType, xml.StartElement{Name: xml.Name{Local: "interfaceObjectType"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.ObjectInstance, xml.StartElement{Name: xml.Name{Local: "objectInstance"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.PropertyId, xml.StartElement{Name: xml.Name{Local: "propertyId"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.NumberOfElements, xml.StartElement{Name: xml.Name{Local: "numberOfElements"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.StartIndex, xml.StartElement{Name: xml.Name{Local: "startIndex"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.Unknown, xml.StartElement{Name: xml.Name{Local: "unknown"}}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go
new file mode 100644
index 0000000..c88f506
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go
@@ -0,0 +1,272 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+)
+
+// The data-structure of this message
+type CEMIMPropReadReq struct {
+    InterfaceObjectType uint16
+    ObjectInstance uint8
+    PropertyId uint8
+    NumberOfElements uint8
+    StartIndex uint16
+    Parent *CEMI
+    ICEMIMPropReadReq
+}
+
+// The corresponding interface
+type ICEMIMPropReadReq interface {
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *CEMIMPropReadReq) MessageCode() uint8 {
+    return 0xFC
+}
+
+
+func (m *CEMIMPropReadReq) InitializeParent(parent *CEMI) {
+}
+
+func NewCEMIMPropReadReq(interfaceObjectType uint16, objectInstance uint8, propertyId uint8, numberOfElements uint8, startIndex uint16, ) *CEMI {
+    child := &CEMIMPropReadReq{
+        InterfaceObjectType: interfaceObjectType,
+        ObjectInstance: objectInstance,
+        PropertyId: propertyId,
+        NumberOfElements: numberOfElements,
+        StartIndex: startIndex,
+        Parent: NewCEMI(),
+    }
+    child.Parent.Child = child
+    return child.Parent
+}
+
+func CastCEMIMPropReadReq(structType interface{}) CEMIMPropReadReq {
+    castFunc := func(typ interface{}) CEMIMPropReadReq {
+        if casted, ok := typ.(CEMIMPropReadReq); ok {
+            return casted
+        }
+        if casted, ok := typ.(*CEMIMPropReadReq); ok {
+            return *casted
+        }
+        if casted, ok := typ.(CEMI); ok {
+            return CastCEMIMPropReadReq(casted.Child)
+        }
+        if casted, ok := typ.(*CEMI); ok {
+            return CastCEMIMPropReadReq(casted.Child)
+        }
+        return CEMIMPropReadReq{}
+    }
+    return castFunc(structType)
+}
+
+func (m *CEMIMPropReadReq) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Simple field (interfaceObjectType)
+    lengthInBits += 16
+
+    // Simple field (objectInstance)
+    lengthInBits += 8
+
+    // Simple field (propertyId)
+    lengthInBits += 8
+
+    // Simple field (numberOfElements)
+    lengthInBits += 4
+
+    // Simple field (startIndex)
+    lengthInBits += 12
+
+    return lengthInBits
+}
+
+func (m *CEMIMPropReadReq) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func CEMIMPropReadReqParse(io *utils.ReadBuffer) (*CEMI, error) {
+
+    // Simple Field (interfaceObjectType)
+    interfaceObjectType, _interfaceObjectTypeErr := io.ReadUint16(16)
+    if _interfaceObjectTypeErr != nil {
+        return nil, errors.New("Error parsing 'interfaceObjectType' field " + _interfaceObjectTypeErr.Error())
+    }
+
+    // Simple Field (objectInstance)
+    objectInstance, _objectInstanceErr := io.ReadUint8(8)
+    if _objectInstanceErr != nil {
+        return nil, errors.New("Error parsing 'objectInstance' field " + _objectInstanceErr.Error())
+    }
+
+    // Simple Field (propertyId)
+    propertyId, _propertyIdErr := io.ReadUint8(8)
+    if _propertyIdErr != nil {
+        return nil, errors.New("Error parsing 'propertyId' field " + _propertyIdErr.Error())
+    }
+
+    // Simple Field (numberOfElements)
+    numberOfElements, _numberOfElementsErr := io.ReadUint8(4)
+    if _numberOfElementsErr != nil {
+        return nil, errors.New("Error parsing 'numberOfElements' field " + _numberOfElementsErr.Error())
+    }
+
+    // Simple Field (startIndex)
+    startIndex, _startIndexErr := io.ReadUint16(12)
+    if _startIndexErr != nil {
+        return nil, errors.New("Error parsing 'startIndex' field " + _startIndexErr.Error())
+    }
+
+    // Create a partially initialized instance
+    _child := &CEMIMPropReadReq{
+        InterfaceObjectType: interfaceObjectType,
+        ObjectInstance: objectInstance,
+        PropertyId: propertyId,
+        NumberOfElements: numberOfElements,
+        StartIndex: startIndex,
+        Parent: &CEMI{},
+    }
+    _child.Parent.Child = _child
+    return _child.Parent, nil
+}
+
+func (m *CEMIMPropReadReq) Serialize(io utils.WriteBuffer) error {
+    ser := func() error {
+
+    // Simple Field (interfaceObjectType)
+    interfaceObjectType := uint16(m.InterfaceObjectType)
+    _interfaceObjectTypeErr := io.WriteUint16(16, (interfaceObjectType))
+    if _interfaceObjectTypeErr != nil {
+        return errors.New("Error serializing 'interfaceObjectType' field " + _interfaceObjectTypeErr.Error())
+    }
+
+    // Simple Field (objectInstance)
+    objectInstance := uint8(m.ObjectInstance)
+    _objectInstanceErr := io.WriteUint8(8, (objectInstance))
+    if _objectInstanceErr != nil {
+        return errors.New("Error serializing 'objectInstance' field " + _objectInstanceErr.Error())
+    }
+
+    // Simple Field (propertyId)
+    propertyId := uint8(m.PropertyId)
+    _propertyIdErr := io.WriteUint8(8, (propertyId))
+    if _propertyIdErr != nil {
+        return errors.New("Error serializing 'propertyId' field " + _propertyIdErr.Error())
+    }
+
+    // Simple Field (numberOfElements)
+    numberOfElements := uint8(m.NumberOfElements)
+    _numberOfElementsErr := io.WriteUint8(4, (numberOfElements))
+    if _numberOfElementsErr != nil {
+        return errors.New("Error serializing 'numberOfElements' field " + _numberOfElementsErr.Error())
+    }
+
+    // Simple Field (startIndex)
+    startIndex := uint16(m.StartIndex)
+    _startIndexErr := io.WriteUint16(12, (startIndex))
+    if _startIndexErr != nil {
+        return errors.New("Error serializing 'startIndex' field " + _startIndexErr.Error())
+    }
+
+        return nil
+    }
+    return m.Parent.SerializeParent(io, m, ser)
+}
+
+func (m *CEMIMPropReadReq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    token = start
+    for {
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "interfaceObjectType":
+                var data uint16
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.InterfaceObjectType = data
+            case "objectInstance":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.ObjectInstance = data
+            case "propertyId":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.PropertyId = data
+            case "numberOfElements":
+                var data uint8
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.NumberOfElements = data
+            case "startIndex":
+                var data uint16
+                if err := d.DecodeElement(&data, &tok); err != nil {
+                    return err
+                }
+                m.StartIndex = data
+            }
+        }
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+    }
+}
+
+func (m *CEMIMPropReadReq) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.InterfaceObjectType, xml.StartElement{Name: xml.Name{Local: "interfaceObjectType"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.ObjectInstance, xml.StartElement{Name: xml.Name{Local: "objectInstance"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.PropertyId, xml.StartElement{Name: xml.Name{Local: "propertyId"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.NumberOfElements, xml.StartElement{Name: xml.Name{Local: "numberOfElements"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.StartIndex, xml.StartElement{Name: xml.Name{Local: "startIndex"}}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go
similarity index 62%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
copy to plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go
index b56db63..937bb42 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go
@@ -21,17 +21,17 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
-type BVLCSecureBVLL struct {
-    Parent *BVLC
-    IBVLCSecureBVLL
+type CEMIPollDataCon struct {
+    Parent *CEMI
+    ICEMIPollDataCon
 }
 
 // The corresponding interface
-type IBVLCSecureBVLL interface {
+type ICEMIPollDataCon interface {
     LengthInBytes() uint16
     LengthInBits() uint16
     Serialize(io utils.WriteBuffer) error
@@ -41,62 +41,62 @@ type IBVLCSecureBVLL interface {
 ///////////////////////////////////////////////////////////
 // Accessors for discriminator values.
 ///////////////////////////////////////////////////////////
-func (m *BVLCSecureBVLL) BvlcFunction() uint8 {
-    return 0x0C
+func (m *CEMIPollDataCon) MessageCode() uint8 {
+    return 0x25
 }
 
 
-func (m *BVLCSecureBVLL) InitializeParent(parent *BVLC) {
+func (m *CEMIPollDataCon) InitializeParent(parent *CEMI) {
 }
 
-func NewBVLCSecureBVLL() *BVLC {
-    child := &BVLCSecureBVLL{
-        Parent: NewBVLC(),
+func NewCEMIPollDataCon() *CEMI {
+    child := &CEMIPollDataCon{
+        Parent: NewCEMI(),
     }
     child.Parent.Child = child
     return child.Parent
 }
 
-func CastBVLCSecureBVLL(structType interface{}) BVLCSecureBVLL {
-    castFunc := func(typ interface{}) BVLCSecureBVLL {
-        if casted, ok := typ.(BVLCSecureBVLL); ok {
+func CastCEMIPollDataCon(structType interface{}) CEMIPollDataCon {
+    castFunc := func(typ interface{}) CEMIPollDataCon {
+        if casted, ok := typ.(CEMIPollDataCon); ok {
             return casted
         }
-        if casted, ok := typ.(*BVLCSecureBVLL); ok {
+        if casted, ok := typ.(*CEMIPollDataCon); ok {
             return *casted
         }
-        if casted, ok := typ.(BVLC); ok {
-            return CastBVLCSecureBVLL(casted.Child)
+        if casted, ok := typ.(CEMI); ok {
+            return CastCEMIPollDataCon(casted.Child)
         }
-        if casted, ok := typ.(*BVLC); ok {
-            return CastBVLCSecureBVLL(casted.Child)
+        if casted, ok := typ.(*CEMI); ok {
+            return CastCEMIPollDataCon(casted.Child)
         }
-        return BVLCSecureBVLL{}
+        return CEMIPollDataCon{}
     }
     return castFunc(structType)
 }
 
-func (m *BVLCSecureBVLL) LengthInBits() uint16 {
+func (m *CEMIPollDataCon) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
     return lengthInBits
 }
 
-func (m *BVLCSecureBVLL) LengthInBytes() uint16 {
+func (m *CEMIPollDataCon) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func BVLCSecureBVLLParse(io *utils.ReadBuffer) (*BVLC, error) {
+func CEMIPollDataConParse(io *utils.ReadBuffer) (*CEMI, error) {
 
     // Create a partially initialized instance
-    _child := &BVLCSecureBVLL{
-        Parent: &BVLC{},
+    _child := &CEMIPollDataCon{
+        Parent: &CEMI{},
     }
     _child.Parent.Child = _child
     return _child.Parent, nil
 }
 
-func (m *BVLCSecureBVLL) Serialize(io utils.WriteBuffer) error {
+func (m *CEMIPollDataCon) Serialize(io utils.WriteBuffer) error {
     ser := func() error {
 
         return nil
@@ -104,7 +104,7 @@ func (m *BVLCSecureBVLL) Serialize(io utils.WriteBuffer) error {
     return m.Parent.SerializeParent(io, m, ser)
 }
 
-func (m *BVLCSecureBVLL) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+func (m *CEMIPollDataCon) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
     var token xml.Token
     var err error
     token = start
@@ -125,7 +125,7 @@ func (m *BVLCSecureBVLL) UnmarshalXML(d *xml.Decoder, start xml.StartElement) er
     }
 }
 
-func (m *BVLCSecureBVLL) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+func (m *CEMIPollDataCon) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go
similarity index 62%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
copy to plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go
index b56db63..82c00e8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go
@@ -21,17 +21,17 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
-type BVLCSecureBVLL struct {
-    Parent *BVLC
-    IBVLCSecureBVLL
+type CEMIPollDataReq struct {
+    Parent *CEMI
+    ICEMIPollDataReq
 }
 
 // The corresponding interface
-type IBVLCSecureBVLL interface {
+type ICEMIPollDataReq interface {
     LengthInBytes() uint16
     LengthInBits() uint16
     Serialize(io utils.WriteBuffer) error
@@ -41,62 +41,62 @@ type IBVLCSecureBVLL interface {
 ///////////////////////////////////////////////////////////
 // Accessors for discriminator values.
 ///////////////////////////////////////////////////////////
-func (m *BVLCSecureBVLL) BvlcFunction() uint8 {
-    return 0x0C
+func (m *CEMIPollDataReq) MessageCode() uint8 {
+    return 0x13
 }
 
 
-func (m *BVLCSecureBVLL) InitializeParent(parent *BVLC) {
+func (m *CEMIPollDataReq) InitializeParent(parent *CEMI) {
 }
 
-func NewBVLCSecureBVLL() *BVLC {
-    child := &BVLCSecureBVLL{
-        Parent: NewBVLC(),
+func NewCEMIPollDataReq() *CEMI {
+    child := &CEMIPollDataReq{
+        Parent: NewCEMI(),
     }
     child.Parent.Child = child
     return child.Parent
 }
 
-func CastBVLCSecureBVLL(structType interface{}) BVLCSecureBVLL {
-    castFunc := func(typ interface{}) BVLCSecureBVLL {
-        if casted, ok := typ.(BVLCSecureBVLL); ok {
+func CastCEMIPollDataReq(structType interface{}) CEMIPollDataReq {
+    castFunc := func(typ interface{}) CEMIPollDataReq {
+        if casted, ok := typ.(CEMIPollDataReq); ok {
             return casted
         }
-        if casted, ok := typ.(*BVLCSecureBVLL); ok {
+        if casted, ok := typ.(*CEMIPollDataReq); ok {
             return *casted
         }
-        if casted, ok := typ.(BVLC); ok {
-            return CastBVLCSecureBVLL(casted.Child)
+        if casted, ok := typ.(CEMI); ok {
+            return CastCEMIPollDataReq(casted.Child)
         }
-        if casted, ok := typ.(*BVLC); ok {
-            return CastBVLCSecureBVLL(casted.Child)
+        if casted, ok := typ.(*CEMI); ok {
+            return CastCEMIPollDataReq(casted.Child)
         }
-        return BVLCSecureBVLL{}
+        return CEMIPollDataReq{}
     }
     return castFunc(structType)
 }
 
-func (m *BVLCSecureBVLL) LengthInBits() uint16 {
+func (m *CEMIPollDataReq) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
     return lengthInBits
 }
 
-func (m *BVLCSecureBVLL) LengthInBytes() uint16 {
+func (m *CEMIPollDataReq) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func BVLCSecureBVLLParse(io *utils.ReadBuffer) (*BVLC, error) {
+func CEMIPollDataReqParse(io *utils.ReadBuffer) (*CEMI, error) {
 
     // Create a partially initialized instance
-    _child := &BVLCSecureBVLL{
-        Parent: &BVLC{},
+    _child := &CEMIPollDataReq{
+        Parent: &CEMI{},
     }
     _child.Parent.Child = _child
     return _child.Parent, nil
 }
 
-func (m *BVLCSecureBVLL) Serialize(io utils.WriteBuffer) error {
+func (m *CEMIPollDataReq) Serialize(io utils.WriteBuffer) error {
     ser := func() error {
 
         return nil
@@ -104,7 +104,7 @@ func (m *BVLCSecureBVLL) Serialize(io utils.WriteBuffer) error {
     return m.Parent.SerializeParent(io, m, ser)
 }
 
-func (m *BVLCSecureBVLL) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+func (m *CEMIPollDataReq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
     var token xml.Token
     var err error
     token = start
@@ -125,7 +125,7 @@ func (m *BVLCSecureBVLL) UnmarshalXML(d *xml.Decoder, start xml.StartElement) er
     }
 }
 
-func (m *BVLCSecureBVLL) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+func (m *CEMIPollDataReq) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go
similarity index 54%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
copy to plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go
index 5107a3b..7f8ebc4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go
@@ -19,57 +19,60 @@
 package model
 
 import (
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
-type BACnetNotifyType uint8
+type CEMIPriority uint8
 
-type IBACnetNotifyType interface {
+type ICEMIPriority interface {
     Serialize(io utils.WriteBuffer) error
 }
 
 const(
-    BACnetNotifyType_ALARM BACnetNotifyType = 0x0
-    BACnetNotifyType_EVENT BACnetNotifyType = 0x1
-    BACnetNotifyType_ACK_NOTIFICATION BACnetNotifyType = 0x2
+    CEMIPriority_SYSTEM CEMIPriority = 0x0
+    CEMIPriority_NORMAL CEMIPriority = 0x1
+    CEMIPriority_URGENT CEMIPriority = 0x2
+    CEMIPriority_LOW CEMIPriority = 0x3
 )
 
-func BACnetNotifyTypeValueOf(value uint8) BACnetNotifyType {
+func CEMIPriorityValueOf(value uint8) CEMIPriority {
     switch value {
         case 0x0:
-            return BACnetNotifyType_ALARM
+            return CEMIPriority_SYSTEM
         case 0x1:
-            return BACnetNotifyType_EVENT
+            return CEMIPriority_NORMAL
         case 0x2:
-            return BACnetNotifyType_ACK_NOTIFICATION
+            return CEMIPriority_URGENT
+        case 0x3:
+            return CEMIPriority_LOW
     }
     return 0
 }
 
-func CastBACnetNotifyType(structType interface{}) BACnetNotifyType {
-    castFunc := func(typ interface{}) BACnetNotifyType {
-        if sBACnetNotifyType, ok := typ.(BACnetNotifyType); ok {
-            return sBACnetNotifyType
+func CastCEMIPriority(structType interface{}) CEMIPriority {
+    castFunc := func(typ interface{}) CEMIPriority {
+        if sCEMIPriority, ok := typ.(CEMIPriority); ok {
+            return sCEMIPriority
         }
         return 0
     }
     return castFunc(structType)
 }
 
-func (m BACnetNotifyType) LengthInBits() uint16 {
-    return 4
+func (m CEMIPriority) LengthInBits() uint16 {
+    return 2
 }
 
-func (m BACnetNotifyType) LengthInBytes() uint16 {
+func (m CEMIPriority) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func BACnetNotifyTypeParse(io *utils.ReadBuffer) (BACnetNotifyType, error) {
+func CEMIPriorityParse(io *utils.ReadBuffer) (CEMIPriority, error) {
     // TODO: Implement ...
     return 0, nil
 }
 
-func (e BACnetNotifyType) Serialize(io utils.WriteBuffer) error {
+func (e CEMIPriority) Serialize(io utils.WriteBuffer) error {
     // TODO: Implement ...
     return nil
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go
similarity index 65%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
copy to plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go
index 19cace1..e9d6ba0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go
@@ -21,17 +21,17 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
-type BVLCResult struct {
-    Parent *BVLC
-    IBVLCResult
+type CEMIRawCon struct {
+    Parent *CEMI
+    ICEMIRawCon
 }
 
 // The corresponding interface
-type IBVLCResult interface {
+type ICEMIRawCon interface {
     LengthInBytes() uint16
     LengthInBits() uint16
     Serialize(io utils.WriteBuffer) error
@@ -41,62 +41,62 @@ type IBVLCResult interface {
 ///////////////////////////////////////////////////////////
 // Accessors for discriminator values.
 ///////////////////////////////////////////////////////////
-func (m *BVLCResult) BvlcFunction() uint8 {
-    return 0x00
+func (m *CEMIRawCon) MessageCode() uint8 {
+    return 0x2F
 }
 
 
-func (m *BVLCResult) InitializeParent(parent *BVLC) {
+func (m *CEMIRawCon) InitializeParent(parent *CEMI) {
 }
 
-func NewBVLCResult() *BVLC {
-    child := &BVLCResult{
-        Parent: NewBVLC(),
+func NewCEMIRawCon() *CEMI {
+    child := &CEMIRawCon{
+        Parent: NewCEMI(),
     }
     child.Parent.Child = child
     return child.Parent
 }
 
-func CastBVLCResult(structType interface{}) BVLCResult {
-    castFunc := func(typ interface{}) BVLCResult {
-        if casted, ok := typ.(BVLCResult); ok {
+func CastCEMIRawCon(structType interface{}) CEMIRawCon {
+    castFunc := func(typ interface{}) CEMIRawCon {
+        if casted, ok := typ.(CEMIRawCon); ok {
             return casted
         }
-        if casted, ok := typ.(*BVLCResult); ok {
+        if casted, ok := typ.(*CEMIRawCon); ok {
             return *casted
         }
-        if casted, ok := typ.(BVLC); ok {
-            return CastBVLCResult(casted.Child)
+        if casted, ok := typ.(CEMI); ok {
+            return CastCEMIRawCon(casted.Child)
         }
-        if casted, ok := typ.(*BVLC); ok {
-            return CastBVLCResult(casted.Child)
+        if casted, ok := typ.(*CEMI); ok {
+            return CastCEMIRawCon(casted.Child)
         }
-        return BVLCResult{}
+        return CEMIRawCon{}
     }
     return castFunc(structType)
 }
 
-func (m *BVLCResult) LengthInBits() uint16 {
+func (m *CEMIRawCon) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
     return lengthInBits
 }
 
-func (m *BVLCResult) LengthInBytes() uint16 {
+func (m *CEMIRawCon) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func BVLCResultParse(io *utils.ReadBuffer) (*BVLC, error) {
+func CEMIRawConParse(io *utils.ReadBuffer) (*CEMI, error) {
 
     // Create a partially initialized instance
-    _child := &BVLCResult{
-        Parent: &BVLC{},
+    _child := &CEMIRawCon{
+        Parent: &CEMI{},
     }
     _child.Parent.Child = _child
     return _child.Parent, nil
 }
 
-func (m *BVLCResult) Serialize(io utils.WriteBuffer) error {
+func (m *CEMIRawCon) Serialize(io utils.WriteBuffer) error {
     ser := func() error {
 
         return nil
@@ -104,7 +104,7 @@ func (m *BVLCResult) Serialize(io utils.WriteBuffer) error {
     return m.Parent.SerializeParent(io, m, ser)
 }
 
-func (m *BVLCResult) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+func (m *CEMIRawCon) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
     var token xml.Token
     var err error
     token = start
@@ -125,7 +125,7 @@ func (m *BVLCResult) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
     }
 }
 
-func (m *BVLCResult) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+func (m *CEMIRawCon) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go
similarity index 65%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
copy to plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go
index 19cace1..830aebe 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go
@@ -21,17 +21,17 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
-type BVLCResult struct {
-    Parent *BVLC
-    IBVLCResult
+type CEMIRawInd struct {
+    Parent *CEMI
+    ICEMIRawInd
 }
 
 // The corresponding interface
-type IBVLCResult interface {
+type ICEMIRawInd interface {
     LengthInBytes() uint16
     LengthInBits() uint16
     Serialize(io utils.WriteBuffer) error
@@ -41,62 +41,62 @@ type IBVLCResult interface {
 ///////////////////////////////////////////////////////////
 // Accessors for discriminator values.
 ///////////////////////////////////////////////////////////
-func (m *BVLCResult) BvlcFunction() uint8 {
-    return 0x00
+func (m *CEMIRawInd) MessageCode() uint8 {
+    return 0x2D
 }
 
 
-func (m *BVLCResult) InitializeParent(parent *BVLC) {
+func (m *CEMIRawInd) InitializeParent(parent *CEMI) {
 }
 
-func NewBVLCResult() *BVLC {
-    child := &BVLCResult{
-        Parent: NewBVLC(),
+func NewCEMIRawInd() *CEMI {
+    child := &CEMIRawInd{
+        Parent: NewCEMI(),
     }
     child.Parent.Child = child
     return child.Parent
 }
 
-func CastBVLCResult(structType interface{}) BVLCResult {
-    castFunc := func(typ interface{}) BVLCResult {
-        if casted, ok := typ.(BVLCResult); ok {
+func CastCEMIRawInd(structType interface{}) CEMIRawInd {
+    castFunc := func(typ interface{}) CEMIRawInd {
+        if casted, ok := typ.(CEMIRawInd); ok {
             return casted
         }
-        if casted, ok := typ.(*BVLCResult); ok {
+        if casted, ok := typ.(*CEMIRawInd); ok {
             return *casted
         }
-        if casted, ok := typ.(BVLC); ok {
-            return CastBVLCResult(casted.Child)
+        if casted, ok := typ.(CEMI); ok {
+            return CastCEMIRawInd(casted.Child)
         }
-        if casted, ok := typ.(*BVLC); ok {
-            return CastBVLCResult(casted.Child)
+        if casted, ok := typ.(*CEMI); ok {
+            return CastCEMIRawInd(casted.Child)
         }
-        return BVLCResult{}
+        return CEMIRawInd{}
     }
     return castFunc(structType)
 }
 
-func (m *BVLCResult) LengthInBits() uint16 {
+func (m *CEMIRawInd) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
     return lengthInBits
 }
 
-func (m *BVLCResult) LengthInBytes() uint16 {
+func (m *CEMIRawInd) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func BVLCResultParse(io *utils.ReadBuffer) (*BVLC, error) {
+func CEMIRawIndParse(io *utils.ReadBuffer) (*CEMI, error) {
 
     // Create a partially initialized instance
-    _child := &BVLCResult{
-        Parent: &BVLC{},
+    _child := &CEMIRawInd{
+        Parent: &CEMI{},
     }
     _child.Parent.Child = _child
     return _child.Parent, nil
 }
 
-func (m *BVLCResult) Serialize(io utils.WriteBuffer) error {
+func (m *CEMIRawInd) Serialize(io utils.WriteBuffer) error {
     ser := func() error {
 
         return nil
@@ -104,7 +104,7 @@ func (m *BVLCResult) Serialize(io utils.WriteBuffer) error {
     return m.Parent.SerializeParent(io, m, ser)
 }
 
-func (m *BVLCResult) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+func (m *CEMIRawInd) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
     var token xml.Token
     var err error
     token = start
@@ -125,7 +125,7 @@ func (m *BVLCResult) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
     }
 }
 
-func (m *BVLCResult) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+func (m *CEMIRawInd) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go
similarity index 66%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
copy to plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go
index 19cace1..5a6d1c4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go
@@ -21,17 +21,17 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
-type BVLCResult struct {
-    Parent *BVLC
-    IBVLCResult
+type CEMIRawReq struct {
+    Parent *CEMI
+    ICEMIRawReq
 }
 
 // The corresponding interface
-type IBVLCResult interface {
+type ICEMIRawReq interface {
     LengthInBytes() uint16
     LengthInBits() uint16
     Serialize(io utils.WriteBuffer) error
@@ -41,62 +41,62 @@ type IBVLCResult interface {
 ///////////////////////////////////////////////////////////
 // Accessors for discriminator values.
 ///////////////////////////////////////////////////////////
-func (m *BVLCResult) BvlcFunction() uint8 {
-    return 0x00
+func (m *CEMIRawReq) MessageCode() uint8 {
+    return 0x10
 }
 
 
-func (m *BVLCResult) InitializeParent(parent *BVLC) {
+func (m *CEMIRawReq) InitializeParent(parent *CEMI) {
 }
 
-func NewBVLCResult() *BVLC {
-    child := &BVLCResult{
-        Parent: NewBVLC(),
+func NewCEMIRawReq() *CEMI {
+    child := &CEMIRawReq{
+        Parent: NewCEMI(),
     }
     child.Parent.Child = child
     return child.Parent
 }
 
-func CastBVLCResult(structType interface{}) BVLCResult {
-    castFunc := func(typ interface{}) BVLCResult {
-        if casted, ok := typ.(BVLCResult); ok {
+func CastCEMIRawReq(structType interface{}) CEMIRawReq {
+    castFunc := func(typ interface{}) CEMIRawReq {
+        if casted, ok := typ.(CEMIRawReq); ok {
             return casted
         }
-        if casted, ok := typ.(*BVLCResult); ok {
+        if casted, ok := typ.(*CEMIRawReq); ok {
             return *casted
         }
-        if casted, ok := typ.(BVLC); ok {
-            return CastBVLCResult(casted.Child)
+        if casted, ok := typ.(CEMI); ok {
+            return CastCEMIRawReq(casted.Child)
         }
-        if casted, ok := typ.(*BVLC); ok {
-            return CastBVLCResult(casted.Child)
+        if casted, ok := typ.(*CEMI); ok {
+            return CastCEMIRawReq(casted.Child)
         }
-        return BVLCResult{}
+        return CEMIRawReq{}
     }
     return castFunc(structType)
 }
 
-func (m *BVLCResult) LengthInBits() uint16 {
+func (m *CEMIRawReq) LengthInBits() uint16 {
     lengthInBits := uint16(0)
 
     return lengthInBits
 }
 
-func (m *BVLCResult) LengthInBytes() uint16 {
+func (m *CEMIRawReq) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func BVLCResultParse(io *utils.ReadBuffer) (*BVLC, error) {
+func CEMIRawReqParse(io *utils.ReadBuffer) (*CEMI, error) {
 
     // Create a partially initialized instance
-    _child := &BVLCResult{
-        Parent: &BVLC{},
+    _child := &CEMIRawReq{
+        Parent: &CEMI{},
     }
     _child.Parent.Child = _child
     return _child.Parent, nil
 }
 
-func (m *BVLCResult) Serialize(io utils.WriteBuffer) error {
+func (m *CEMIRawReq) Serialize(io utils.WriteBuffer) error {
     ser := func() error {
 
         return nil
@@ -104,7 +104,7 @@ func (m *BVLCResult) Serialize(io utils.WriteBuffer) error {
     return m.Parent.SerializeParent(io, m, ser)
 }
 
-func (m *BVLCResult) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+func (m *CEMIRawReq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
     var token xml.Token
     var err error
     token = start
@@ -125,7 +125,7 @@ func (m *BVLCResult) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error
     }
 }
 
-func (m *BVLCResult) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+func (m *CEMIRawReq) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
     return nil
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
new file mode 100644
index 0000000..1edc720
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
@@ -0,0 +1,213 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+)
+
+// The data-structure of this message
+type ConnectionRequest struct {
+    HpaiDiscoveryEndpoint *HPAIDiscoveryEndpoint
+    HpaiDataEndpoint *HPAIDataEndpoint
+    ConnectionRequestInformation *ConnectionRequestInformation
+    Parent *KnxNetIpMessage
+    IConnectionRequest
+}
+
+// The corresponding interface
+type IConnectionRequest interface {
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+///////////////////////////////////////////////////////////
+// Accessors for discriminator values.
+///////////////////////////////////////////////////////////
+func (m *ConnectionRequest) MsgType() uint16 {
+    return 0x0205
+}
+
+
+func (m *ConnectionRequest) InitializeParent(parent *KnxNetIpMessage) {
+}
+
+func NewConnectionRequest(hpaiDiscoveryEndpoint *HPAIDiscoveryEndpoint, hpaiDataEndpoint *HPAIDataEndpoint, connectionRequestInformation *ConnectionRequestInformation, ) *KnxNetIpMessage {
+    child := &ConnectionRequest{
+        HpaiDiscoveryEndpoint: hpaiDiscoveryEndpoint,
+        HpaiDataEndpoint: hpaiDataEndpoint,
+        ConnectionRequestInformation: connectionRequestInformation,
+        Parent: NewKnxNetIpMessage(),
+    }
+    child.Parent.Child = child
+    return child.Parent
+}
+
+func CastConnectionRequest(structType interface{}) ConnectionRequest {
+    castFunc := func(typ interface{}) ConnectionRequest {
+        if casted, ok := typ.(ConnectionRequest); ok {
+            return casted
+        }
+        if casted, ok := typ.(*ConnectionRequest); ok {
+            return *casted
+        }
+        if casted, ok := typ.(KnxNetIpMessage); ok {
+            return CastConnectionRequest(casted.Child)
+        }
+        if casted, ok := typ.(*KnxNetIpMessage); ok {
+            return CastConnectionRequest(casted.Child)
+        }
+        return ConnectionRequest{}
+    }
+    return castFunc(structType)
+}
+
+func (m *ConnectionRequest) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Simple field (hpaiDiscoveryEndpoint)
+    lengthInBits += m.HpaiDiscoveryEndpoint.LengthInBits()
+
+    // Simple field (hpaiDataEndpoint)
+    lengthInBits += m.HpaiDataEndpoint.LengthInBits()
+
+    // Simple field (connectionRequestInformation)
+    lengthInBits += m.ConnectionRequestInformation.LengthInBits()
+
+    return lengthInBits
+}
+
+func (m *ConnectionRequest) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func ConnectionRequestParse(io *utils.ReadBuffer) (*KnxNetIpMessage, error) {
+
+    // Simple Field (hpaiDiscoveryEndpoint)
+    hpaiDiscoveryEndpoint, _hpaiDiscoveryEndpointErr := HPAIDiscoveryEndpointParse(io)
+    if _hpaiDiscoveryEndpointErr != nil {
+        return nil, errors.New("Error parsing 'hpaiDiscoveryEndpoint' field " + _hpaiDiscoveryEndpointErr.Error())
+    }
+
+    // Simple Field (hpaiDataEndpoint)
+    hpaiDataEndpoint, _hpaiDataEndpointErr := HPAIDataEndpointParse(io)
+    if _hpaiDataEndpointErr != nil {
+        return nil, errors.New("Error parsing 'hpaiDataEndpoint' field " + _hpaiDataEndpointErr.Error())
+    }
+
+    // Simple Field (connectionRequestInformation)
+    connectionRequestInformation, _connectionRequestInformationErr := ConnectionRequestInformationParse(io)
+    if _connectionRequestInformationErr != nil {
+        return nil, errors.New("Error parsing 'connectionRequestInformation' field " + _connectionRequestInformationErr.Error())
+    }
+
+    // Create a partially initialized instance
+    _child := &ConnectionRequest{
+        HpaiDiscoveryEndpoint: hpaiDiscoveryEndpoint,
+        HpaiDataEndpoint: hpaiDataEndpoint,
+        ConnectionRequestInformation: connectionRequestInformation,
+        Parent: &KnxNetIpMessage{},
+    }
+    _child.Parent.Child = _child
+    return _child.Parent, nil
+}
+
+func (m *ConnectionRequest) Serialize(io utils.WriteBuffer) error {
+    ser := func() error {
+
+    // Simple Field (hpaiDiscoveryEndpoint)
+    _hpaiDiscoveryEndpointErr := m.HpaiDiscoveryEndpoint.Serialize(io)
+    if _hpaiDiscoveryEndpointErr != nil {
+        return errors.New("Error serializing 'hpaiDiscoveryEndpoint' field " + _hpaiDiscoveryEndpointErr.Error())
+    }
+
+    // Simple Field (hpaiDataEndpoint)
+    _hpaiDataEndpointErr := m.HpaiDataEndpoint.Serialize(io)
+    if _hpaiDataEndpointErr != nil {
+        return errors.New("Error serializing 'hpaiDataEndpoint' field " + _hpaiDataEndpointErr.Error())
+    }
+
+    // Simple Field (connectionRequestInformation)
+    _connectionRequestInformationErr := m.ConnectionRequestInformation.Serialize(io)
+    if _connectionRequestInformationErr != nil {
+        return errors.New("Error serializing 'connectionRequestInformation' field " + _connectionRequestInformationErr.Error())
+    }
+
+        return nil
+    }
+    return m.Parent.SerializeParent(io, m, ser)
+}
+
+func (m *ConnectionRequest) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    token = start
+    for {
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+            case "hpaiDiscoveryEndpoint":
+                var data *HPAIDiscoveryEndpoint
+                if err := d.DecodeElement(data, &tok); err != nil {
+                    return err
+                }
+                m.HpaiDiscoveryEndpoint = data
+            case "hpaiDataEndpoint":
+                var data *HPAIDataEndpoint
+                if err := d.DecodeElement(data, &tok); err != nil {
+                    return err
+                }
+                m.HpaiDataEndpoint = data
+            case "connectionRequestInformation":
+                var dt *ConnectionRequestInformation
+                if err := d.DecodeElement(&dt, &tok); err != nil {
+                    return err
+                }
+                m.ConnectionRequestInformation = dt
+            }
+        }
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+    }
+}
+
+func (m *ConnectionRequest) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    if err := e.EncodeElement(m.HpaiDiscoveryEndpoint, xml.StartElement{Name: xml.Name{Local: "hpaiDiscoveryEndpoint"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.HpaiDataEndpoint, xml.StartElement{Name: xml.Name{Local: "hpaiDataEndpoint"}}); err != nil {
+        return err
+    }
+    if err := e.EncodeElement(m.ConnectionRequestInformation, xml.StartElement{Name: xml.Name{Local: "connectionRequestInformation"}}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
new file mode 100644
index 0000000..596507c
--- /dev/null
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
@@ -0,0 +1,218 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+    "encoding/xml"
+    "errors"
+    "io"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+    "reflect"
+    "strings"
+)
+
+// The data-structure of this message
+type ConnectionRequestInformation struct {
+    Child IConnectionRequestInformationChild
+    IConnectionRequestInformation
+    IConnectionRequestInformationParent
+}
+
+// The corresponding interface
+type IConnectionRequestInformation interface {
+    ConnectionType() uint8
+    LengthInBytes() uint16
+    LengthInBits() uint16
+    Serialize(io utils.WriteBuffer) error
+    xml.Marshaler
+}
+
+type IConnectionRequestInformationParent interface {
+    SerializeParent(io utils.WriteBuffer, child IConnectionRequestInformation, serializeChildFunction func() error) error
+}
+
+type IConnectionRequestInformationChild interface {
+    Serialize(io utils.WriteBuffer) error
+    InitializeParent(parent *ConnectionRequestInformation)
+    IConnectionRequestInformation
+}
+
+func NewConnectionRequestInformation() *ConnectionRequestInformation {
+    return &ConnectionRequestInformation{}
+}
+
+func CastConnectionRequestInformation(structType interface{}) ConnectionRequestInformation {
+    castFunc := func(typ interface{}) ConnectionRequestInformation {
+        if casted, ok := typ.(ConnectionRequestInformation); ok {
+            return casted
+        }
+        if casted, ok := typ.(*ConnectionRequestInformation); ok {
+            return *casted
+        }
+        return ConnectionRequestInformation{}
+    }
+    return castFunc(structType)
+}
+
+func (m *ConnectionRequestInformation) LengthInBits() uint16 {
+    lengthInBits := uint16(0)
+
+    // Implicit Field (structureLength)
+    lengthInBits += 8
+
+    // Discriminator Field (connectionType)
+    lengthInBits += 8
+
+    // Length of sub-type elements will be added by sub-type...
+    lengthInBits += m.Child.LengthInBits()
+
+    return lengthInBits
+}
+
+func (m *ConnectionRequestInformation) LengthInBytes() uint16 {
+    return m.LengthInBits() / 8
+}
+
+func ConnectionRequestInformationParse(io *utils.ReadBuffer) (*ConnectionRequestInformation, error) {
+
+    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
+    _, _structureLengthErr := io.ReadUint8(8)
+    if _structureLengthErr != nil {
+        return nil, errors.New("Error parsing 'structureLength' field " + _structureLengthErr.Error())
+    }
+
+    // Discriminator Field (connectionType) (Used as input to a switch field)
+    connectionType, _connectionTypeErr := io.ReadUint8(8)
+    if _connectionTypeErr != nil {
+        return nil, errors.New("Error parsing 'connectionType' field " + _connectionTypeErr.Error())
+    }
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    var _parent *ConnectionRequestInformation
+    var typeSwitchError error
+    switch {
+    case connectionType == 0x03:
+        _parent, typeSwitchError = ConnectionRequestInformationDeviceManagementParse(io)
+    case connectionType == 0x04:
+        _parent, typeSwitchError = ConnectionRequestInformationTunnelConnectionParse(io)
+    }
+    if typeSwitchError != nil {
+        return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
+    }
+
+    // Finish initializing
+    _parent.Child.InitializeParent(_parent)
+    return _parent, nil
+}
+
+func (m *ConnectionRequestInformation) Serialize(io utils.WriteBuffer) error {
+    return m.Child.Serialize(io)
+}
+
+func (m *ConnectionRequestInformation) SerializeParent(io utils.WriteBuffer, child IConnectionRequestInformation, serializeChildFunction func() error) error {
+
+    // Implicit Field (structureLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
+    structureLength := uint8(uint8(m.LengthInBytes()))
+    _structureLengthErr := io.WriteUint8(8, (structureLength))
+    if _structureLengthErr != nil {
+        return errors.New("Error serializing 'structureLength' field " + _structureLengthErr.Error())
+    }
+
+    // Discriminator Field (connectionType) (Used as input to a switch field)
+    connectionType := uint8(child.ConnectionType())
+    _connectionTypeErr := io.WriteUint8(8, (connectionType))
+    if _connectionTypeErr != nil {
+        return errors.New("Error serializing 'connectionType' field " + _connectionTypeErr.Error())
+    }
+
+    // Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
+    _typeSwitchErr := serializeChildFunction()
+    if _typeSwitchErr != nil {
+        return errors.New("Error serializing sub-type field " + _typeSwitchErr.Error())
+    }
+
+    return nil
+}
+
+func (m *ConnectionRequestInformation) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+    var token xml.Token
+    var err error
+    for {
+        token, err = d.Token()
+        if err != nil {
+            if err == io.EOF {
+                return nil
+            }
+            return err
+        }
+        switch token.(type) {
+        case xml.StartElement:
+            tok := token.(xml.StartElement)
+            switch tok.Name.Local {
+                default:
+                    switch start.Attr[0].Value {
+                        case "org.apache.plc4x.java.knxnetip.readwrite.ConnectionRequestInformationDeviceManagement":
+                            var dt *ConnectionRequestInformationDeviceManagement
+                            if m.Child != nil {
+                                dt = m.Child.(*ConnectionRequestInformationDeviceManagement)
+                            }
+                            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.knxnetip.readwrite.ConnectionRequestInformationTunnelConnection":
+                            var dt *ConnectionRequestInformationTunnelConnection
+                            if m.Child != nil {
+                                dt = m.Child.(*ConnectionRequestInformationTunnelConnection)
+                            }
+                            if err := d.DecodeElement(&dt, &tok); err != nil {
+                                return err
+                            }
+                            if m.Child == nil {
+                                dt.Parent = m
+                                m.Child = dt
+                            }
+                    }
+            }
+        }
+    }
+}
+
+func (m *ConnectionRequestInformation) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+    className := reflect.TypeOf(m.Child).String()
+    className = "org.apache.plc4x.java.knxnetip.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.New("child is not castable to Marshaler")
+    }
+    marshaller.MarshalXML(e, start)
+    if err := e.EncodeToken(xml.EndElement{Name: start.Name}); err != nil {
+        return err
+    }
+    return nil
+}
+
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
similarity index 54%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
copy to plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
index 3b384f2..443cf4b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
@@ -21,17 +21,17 @@ package model
 import (
     "encoding/xml"
     "io"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 // The data-structure of this message
-type BACnetConfirmedServiceACKGetEventInformation struct {
-    Parent *BACnetConfirmedServiceACK
-    IBACnetConfirmedServiceACKGetEventInformation
+type ConnectionRequestInformationDeviceManagement struct {
+    Parent *ConnectionRequestInformation
+    IConnectionRequestInformationDeviceManagement
 }
 
 // The corresponding interface
-type IBACnetConfirmedServiceACKGetEventInformation interface {
+type IConnectionRequestInformationDeviceManagement interface {
     LengthInBytes() uint16
     LengthInBits() uint16
     Serialize(io utils.WriteBuffer) error
@@ -41,62 +41,62 @@ type IBACnetConfirmedServiceACKGetEventInformation interface {
 ///////////////////////////////////////////////////////////
 // Accessors for discriminator values.
 ///////////////////////////////////////////////////////////
-func (m *BACnetConfirmedServiceACKGetEventInformation) ServiceChoice() uint8 {
-    return 0x1D
+func (m *ConnectionRequestInformationDeviceManagement) ConnectionType() uint8 {
+    return 0x03
 }
 
 
-func (m *BACnetConfirmedServiceACKGetEventInformation) InitializeParent(parent *BACnetConfirmedServiceACK) {
+func (m *ConnectionRequestInformationDeviceManagement) InitializeParent(parent *ConnectionRequestInformation) {
 }
 
-func NewBACnetConfirmedServiceACKGetEventInformation() *BACnetConfirmedServiceACK {
-    child := &BACnetConfirmedServiceACKGetEventInformation{
-        Parent: NewBACnetConfirmedServiceACK(),
+func NewConnectionRequestInformationDeviceManagement() *ConnectionRequestInformation {
+    child := &ConnectionRequestInformationDeviceManagement{
+        Parent: NewConnectionRequestInformation(),
     }
     child.Parent.Child = child
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKGetEventInformation(structType interface{}) BACnetConfirmedServiceACKGetEventInformation {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKGetEventInformation {
-        if casted, ok := typ.(BACnetConfirmedServiceACKGetEventInformation); ok {
+func CastConnectionRequestInformationDeviceManagement(structType interface{}) ConnectionRequestInformationDeviceManagement {
+    castFunc := func(typ interface{}) ConnectionRequestInformationDeviceManagement {
+        if casted, ok := typ.(ConnectionRequestInformationDeviceManagement); ok {
             return casted
         }
-        if casted, ok := typ.(*BACnetConfirmedServiceACKGetEventInformation); ok {
+        if casted, ok := typ.(*ConnectionRequestInformationDeviceManagement); ok {
             return *casted
         }
-        if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
-            return CastBACnetConfirmedServiceACKGetEventInformation(casted.Child)
+        if casted, ok := typ.(ConnectionRequestInformation); ok {
+            return CastConnectionRequestInformationDeviceManagement(casted.Child)
         }
-        if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
-            return CastBACnetConfirmedServiceACKGetEventInformation(casted.Child)
+        if casted, ok := typ.(*ConnectionRequestInformation); ok {
+            return CastConnectionRequestInformationDeviceManagement(casted.Child)
         }
-        return BACnetConfirmedServiceACKGetEventInformation{}
+        return ConnectionRequestInformationDeviceManagement{}
     }
... 21244 lines suppressed ...


[plc4x] 02/04: - Renamed some of the KNX type names to be consistent regarding case - Fixed a bug in the KNX driver

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 937756dd4a020341c03c9503687421e648b162e9
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sun Nov 8 17:14:07 2020 +0100

    - Renamed some of the KNX type names to be consistent regarding case
    - Fixed a bug in the KNX driver
---
 .../apache/plc4x/java/knxnetip/KnxNetIpDriver.java |  10 +-
 .../knxnetip/context/KnxNetIpDriverContext.java    |  14 +--
 .../knxnetip/protocol/KnxNetIpProtocolLogic.java   |  65 ++++++------
 .../org/apache/plc4x/java/knxnetip/IOTest.java     |  20 ++--
 .../{KNXNetIpTest.java => KnxNetIpTest.java}       |   4 +-
 .../messages/DefaultPlcSubscriptionResponse.java   |   1 -
 .../plc4x/java/transport/tcp/TcpTransport.java     |   2 +-
 .../plc4x/java/transport/udp/UdpTransport.java     |   4 +-
 .../resources/protocols/knxnetip/knxnetip.mspec    |  22 ++--
 .../apache/plc4x/protocols/knxnetip/protocol.tdml  | 112 ++++++++++-----------
 .../knxnetip/ParserSerializerTestsuite.xml         |  42 ++++----
 .../adapters/source/knxnetip/KnxNetIpAdapter.java  |   4 +-
 12 files changed, 150 insertions(+), 150 deletions(-)

diff --git a/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/KnxNetIpDriver.java b/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/KnxNetIpDriver.java
index 102b688..d0c8994 100644
--- a/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/KnxNetIpDriver.java
+++ b/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/KnxNetIpDriver.java
@@ -22,11 +22,11 @@ import io.netty.buffer.ByteBuf;
 import org.apache.plc4x.java.knxnetip.configuration.KnxNetIpConfiguration;
 import org.apache.plc4x.java.knxnetip.context.KnxNetIpDriverContext;
 import org.apache.plc4x.java.knxnetip.field.KnxNetIpField;
-import org.apache.plc4x.java.knxnetip.readwrite.io.KNXNetIPMessageIO;
+import org.apache.plc4x.java.knxnetip.readwrite.KnxNetIpMessage;
+import org.apache.plc4x.java.knxnetip.readwrite.io.KnxNetIpMessageIO;
 import org.apache.plc4x.java.spi.configuration.Configuration;
 import org.apache.plc4x.java.knxnetip.field.KnxNetIpFieldHandler;
 import org.apache.plc4x.java.knxnetip.protocol.KnxNetIpProtocolLogic;
-import org.apache.plc4x.java.knxnetip.readwrite.KNXNetIPMessage;
 import org.apache.plc4x.java.spi.values.IEC61131ValueHandler;
 import org.apache.plc4x.java.api.value.PlcValueHandler;
 import org.apache.plc4x.java.spi.connection.GeneratedDriverBase;
@@ -38,7 +38,7 @@ import org.apache.plc4x.java.spi.optimizer.SingleFieldOptimizer;
 
 import java.util.function.ToIntFunction;
 
-public class KnxNetIpDriver extends GeneratedDriverBase<KNXNetIPMessage> {
+public class KnxNetIpDriver extends GeneratedDriverBase<KnxNetIpMessage> {
 
     public static final int KNXNET_IP_PORT = 3671;
 
@@ -93,8 +93,8 @@ public class KnxNetIpDriver extends GeneratedDriverBase<KNXNetIPMessage> {
     }
 
     @Override
-    protected ProtocolStackConfigurer<KNXNetIPMessage> getStackConfigurer() {
-        return SingleProtocolStackConfigurer.builder(KNXNetIPMessage.class, KNXNetIPMessageIO.class)
+    protected ProtocolStackConfigurer<KnxNetIpMessage> getStackConfigurer() {
+        return SingleProtocolStackConfigurer.builder(KnxNetIpMessage.class, KnxNetIpMessageIO.class)
             .withProtocol(KnxNetIpProtocolLogic.class)
             .withDriverContext(KnxNetIpDriverContext.class)
             .withPacketSizeEstimator(PacketSizeEstimator.class)
diff --git a/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/context/KnxNetIpDriverContext.java b/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/context/KnxNetIpDriverContext.java
index 5c14b89..386122b 100644
--- a/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/context/KnxNetIpDriverContext.java
+++ b/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/context/KnxNetIpDriverContext.java
@@ -23,7 +23,7 @@ import org.apache.plc4x.java.knxnetip.configuration.KnxNetIpConfiguration;
 import org.apache.plc4x.java.knxnetip.ets5.Ets5Parser;
 import org.apache.plc4x.java.knxnetip.ets5.model.Ets5Model;
 import org.apache.plc4x.java.knxnetip.readwrite.IPAddress;
-import org.apache.plc4x.java.knxnetip.readwrite.KNXAddress;
+import org.apache.plc4x.java.knxnetip.readwrite.KnxAddress;
 import org.apache.plc4x.java.knxnetip.readwrite.types.KnxLayer;
 import org.apache.plc4x.java.spi.configuration.HasConfiguration;
 import org.apache.plc4x.java.spi.context.DriverContext;
@@ -33,12 +33,12 @@ import java.io.File;
 public class KnxNetIpDriverContext implements DriverContext, HasConfiguration<KnxNetIpConfiguration> {
 
     private boolean passiveMode = false;
-    private KNXAddress gatewayAddress;
+    private KnxAddress gatewayAddress;
     private String gatewayName;
     private IPAddress localIPAddress;
     private int localPort;
     private short communicationChannelId;
-    private KNXAddress clientKnxAddress;
+    private KnxAddress clientKnxAddress;
     private byte groupAddressType;
     private KnxLayer tunnelConnectionType;
     private Ets5Model ets5Model;
@@ -69,11 +69,11 @@ public class KnxNetIpDriverContext implements DriverContext, HasConfiguration<Kn
         this.passiveMode = passiveMode;
     }
 
-    public KNXAddress getGatewayAddress() {
+    public KnxAddress getGatewayAddress() {
         return gatewayAddress;
     }
 
-    public void setGatewayAddress(KNXAddress gatewayAddress) {
+    public void setGatewayAddress(KnxAddress gatewayAddress) {
         this.gatewayAddress = gatewayAddress;
     }
 
@@ -109,11 +109,11 @@ public class KnxNetIpDriverContext implements DriverContext, HasConfiguration<Kn
         this.communicationChannelId = communicationChannelId;
     }
 
-    public KNXAddress getClientKnxAddress() {
+    public KnxAddress getClientKnxAddress() {
         return clientKnxAddress;
     }
 
-    public void setClientKnxAddress(KNXAddress clientKnxAddress) {
+    public void setClientKnxAddress(KnxAddress clientKnxAddress) {
         this.clientKnxAddress = clientKnxAddress;
     }
 
diff --git a/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/protocol/KnxNetIpProtocolLogic.java b/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/protocol/KnxNetIpProtocolLogic.java
index 09b4c67..47d0854 100644
--- a/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/protocol/KnxNetIpProtocolLogic.java
+++ b/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/protocol/KnxNetIpProtocolLogic.java
@@ -32,11 +32,11 @@ import org.apache.plc4x.java.knxnetip.ets5.model.Ets5Model;
 import org.apache.plc4x.java.knxnetip.ets5.model.GroupAddress;
 import org.apache.plc4x.java.knxnetip.field.KnxNetIpField;
 import org.apache.plc4x.java.knxnetip.model .KnxNetIpSubscriptionHandle;
-import org.apache.plc4x.java.knxnetip.readwrite.KNXGroupAddress;
-import org.apache.plc4x.java.knxnetip.readwrite.KNXGroupAddress2Level;
-import org.apache.plc4x.java.knxnetip.readwrite.KNXGroupAddress3Level;
-import org.apache.plc4x.java.knxnetip.readwrite.KNXGroupAddressFreeLevel;
-import org.apache.plc4x.java.knxnetip.readwrite.io.KNXGroupAddressIO;
+import org.apache.plc4x.java.knxnetip.readwrite.KnxGroupAddress;
+import org.apache.plc4x.java.knxnetip.readwrite.KnxGroupAddress2Level;
+import org.apache.plc4x.java.knxnetip.readwrite.KnxGroupAddress3Level;
+import org.apache.plc4x.java.knxnetip.readwrite.KnxGroupAddressFreeLevel;
+import org.apache.plc4x.java.knxnetip.readwrite.io.KnxGroupAddressIO;
 import org.apache.plc4x.java.knxnetip.readwrite.io.KnxDatapointIO;
 import org.apache.plc4x.java.knxnetip.readwrite.types.*;
 import org.apache.plc4x.java.spi.ConversationContext;
@@ -49,6 +49,7 @@ import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.apache.plc4x.java.spi.messages.*;
 import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
 import org.apache.plc4x.java.spi.model.DefaultPlcConsumerRegistration;
+import org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField;
 import org.apache.plc4x.java.spi.transaction.RequestTransactionManager;
 import org.apache.plc4x.java.spi.values.PlcSTRING;
 import org.apache.plc4x.java.spi.values.PlcStruct;
@@ -64,7 +65,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Consumer;
 
-public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> implements PlcSubscriber {
+public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KnxNetIpMessage> implements PlcSubscriber {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(KnxNetIpProtocolLogic.class);
     public static final Duration REQUEST_TIMEOUT = Duration.ofMillis(10000);
@@ -90,7 +91,7 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
     }
 
     @Override
-    public void onConnect(ConversationContext<KNXNetIPMessage> context) {
+    public void onConnect(ConversationContext<KnxNetIpMessage> context) {
         // Only the UDP transport supports login.
         if(!context.isPassive()) {
             LOGGER.info("KNX Driver running in ACTIVE mode.");
@@ -110,7 +111,7 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
                 new HPAIDiscoveryEndpoint(HostProtocolCode.IPV4_UDP,
                     knxNetIpDriverContext.getLocalIPAddress(), knxNetIpDriverContext.getLocalPort()));
             context.sendRequest(searchRequest)
-                .expectResponse(KNXNetIPMessage.class, Duration.ofMillis(1000))
+                .expectResponse(KnxNetIpMessage.class, Duration.ofMillis(1000))
                 .check(p -> p instanceof SearchResponse)
                 .unwrap(p -> (SearchResponse) p)
                 .handle(searchResponse -> {
@@ -140,7 +141,7 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
                                 knxNetIpDriverContext.getTunnelConnectionType()));
                         LOGGER.info("Sending KNXnet/IP Connection Request.");
                         context.sendRequest(connectionRequest)
-                            .expectResponse(KNXNetIPMessage.class, Duration.ofMillis(1000))
+                            .expectResponse(KnxNetIpMessage.class, Duration.ofMillis(1000))
                             .check(p -> p instanceof ConnectionResponse)
                             .unwrap(p -> (ConnectionResponse) p)
                             .handle(connectionResponse -> {
@@ -159,8 +160,8 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
                                     // Save the KNX Address the Gateway assigned to this connection.
                                     knxNetIpDriverContext.setClientKnxAddress(tunnelConnectionDataBlock.getKnxAddress());
 
-                                    final KNXAddress gatewayAddress = knxNetIpDriverContext.getGatewayAddress();
-                                    final KNXAddress clientKnxAddress = knxNetIpDriverContext.getClientKnxAddress();
+                                    final KnxAddress gatewayAddress = knxNetIpDriverContext.getGatewayAddress();
+                                    final KnxAddress clientKnxAddress = knxNetIpDriverContext.getClientKnxAddress();
                                     LOGGER.info(String.format("Successfully connected to KNXnet/IP Gateway '%s' with KNX address '%d.%d.%d' got assigned client KNX address '%d.%d.%d'",
                                         knxNetIpDriverContext.getGatewayName(),
                                         gatewayAddress.getMainGroup(), gatewayAddress.getMiddleGroup(),
@@ -184,7 +185,7 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
                                                         knxNetIpDriverContext.getLocalIPAddress(),
                                                         knxNetIpDriverContext.getLocalPort()));
                                             context.sendRequest(connectionStateRequest)
-                                                .expectResponse(KNXNetIPMessage.class, Duration.ofMillis(1000))
+                                                .expectResponse(KnxNetIpMessage.class, Duration.ofMillis(1000))
                                                 .check(p -> p instanceof ConnectionStateResponse)
                                                 .unwrap(p -> (ConnectionStateResponse) p)
                                                 .handle(connectionStateResponse -> {
@@ -230,7 +231,7 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
     }
 
     @Override
-    public void onDisconnect(ConversationContext<KNXNetIPMessage> context) {
+    public void onDisconnect(ConversationContext<KnxNetIpMessage> context) {
         // Cancel the timer for sending connection state requests.
         connectionStateTimer.cancel();
 
@@ -238,14 +239,14 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
             new HPAIControlEndpoint(HostProtocolCode.IPV4_UDP,
                 knxNetIpDriverContext.getLocalIPAddress(), knxNetIpDriverContext.getLocalPort()));
         context.sendRequest(disconnectRequest)
-            .expectResponse(KNXNetIPMessage.class, Duration.ofMillis(1000))
+            .expectResponse(KnxNetIpMessage.class, Duration.ofMillis(1000))
             .check(p -> p instanceof DisconnectResponse)
             .unwrap(p -> (DisconnectResponse) p)
             .handle(disconnectResponse -> {
                 // In general we should probably check if the disconnect was successful, but in
                 // the end we couldn't do much if the disconnect would fail.
                 final String gatewayName = knxNetIpDriverContext.getGatewayName();
-                final KNXAddress gatewayAddress = knxNetIpDriverContext.getGatewayAddress();
+                final KnxAddress gatewayAddress = knxNetIpDriverContext.getGatewayAddress();
                 LOGGER.info(String.format("Disconnected from KNX Gateway '%s' with KNX address '%d.%d.%d'", gatewayName,
                     gatewayAddress.getMainGroup(), gatewayAddress.getMiddleGroup(), gatewayAddress.getSubGroup()));
 
@@ -355,7 +356,7 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
             RequestTransactionManager.RequestTransaction transaction = tm.startRequest();
             // Start a new request-transaction (Is ended in the response-handler)
             transaction.submit(() -> context.sendRequest(knxRequest)
-                .expectResponse(KNXNetIPMessage.class, REQUEST_TIMEOUT)
+                .expectResponse(KnxNetIpMessage.class, REQUEST_TIMEOUT)
                 .onTimeout(future::completeExceptionally)
                 .onError((tr, e) -> future.completeExceptionally(e))
                 .check(tr -> tr instanceof TunnelingResponse)
@@ -386,7 +387,7 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
     }
 
     @Override
-    protected void decode(ConversationContext<KNXNetIPMessage> context, KNXNetIPMessage msg) throws Exception {
+    protected void decode(ConversationContext<KnxNetIpMessage> context, KnxNetIpMessage msg) throws Exception {
         // Handle a normal tunneling request, which is delivering KNX data.
         if(msg instanceof TunnelingRequest) {
             TunnelingRequest tunnelingRequest = (TunnelingRequest) msg;
@@ -428,7 +429,7 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
         }
     }
 
-    protected void processCemiData(KNXAddress sourceAddress, byte[] destinationGroupAddress,
+    protected void processCemiData(KnxAddress sourceAddress, byte[] destinationGroupAddress,
                                    byte firstByte, byte[] restBytes) throws ParseException {
         // The first byte is actually just 6 bit long, but we'll treat it as a full one.
         // So here we create a byte array containing the first and all the following bytes.
@@ -438,8 +439,8 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
 
         // Decode the group address depending on the project settings.
         ReadBuffer addressBuffer = new ReadBuffer(destinationGroupAddress);
-        final KNXGroupAddress knxGroupAddress =
-            KNXGroupAddressIO.staticParse(addressBuffer, knxNetIpDriverContext.getGroupAddressType());
+        final KnxGroupAddress knxGroupAddress =
+            KnxGroupAddressIO.staticParse(addressBuffer, knxNetIpDriverContext.getGroupAddressType());
         final String destinationAddress = toString(knxGroupAddress);
 
         // If there is an ETS5 model provided, continue decoding the payload.
@@ -500,7 +501,7 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
     }
 
     @Override
-    public void close(ConversationContext<KNXNetIPMessage> context) {
+    public void close(ConversationContext<KnxNetIpMessage> context) {
         // TODO Implement Closing on Protocol Level
     }
 
@@ -508,12 +509,12 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
     public CompletableFuture<PlcSubscriptionResponse> subscribe(PlcSubscriptionRequest subscriptionRequest) {
         Map<String, ResponseItem<PlcSubscriptionHandle>> values = new HashMap<>();
         for (String fieldName : subscriptionRequest.getFieldNames()) {
-            final PlcField field = subscriptionRequest.getField(fieldName);
-            if(!(field instanceof KnxNetIpField)) {
+            final DefaultPlcSubscriptionField field = (DefaultPlcSubscriptionField) subscriptionRequest.getField(fieldName);
+            if(!(field.getPlcField() instanceof KnxNetIpField)) {
                 values.put(fieldName, new ResponseItem<>(PlcResponseCode.INVALID_ADDRESS, null));
             } else {
                 values.put(fieldName, new ResponseItem<>(PlcResponseCode.OK,
-                    new KnxNetIpSubscriptionHandle(this, (KnxNetIpField) field)));
+                    new KnxNetIpSubscriptionHandle(this, (KnxNetIpField) field.getPlcField())));
             }
         }
         return CompletableFuture.completedFuture(
@@ -580,19 +581,19 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KNXNetIPMessage> im
         return address.getData();
     }
 
-    protected static String toString(KNXAddress knxAddress) {
+    protected static String toString(KnxAddress knxAddress) {
         return knxAddress.getMainGroup() + "." + knxAddress.getMiddleGroup() + "." + knxAddress.getSubGroup();
     }
 
-    protected static String toString(KNXGroupAddress groupAddress) {
-        if (groupAddress instanceof KNXGroupAddress3Level) {
-            KNXGroupAddress3Level level3 = (KNXGroupAddress3Level) groupAddress;
+    protected static String toString(KnxGroupAddress groupAddress) {
+        if (groupAddress instanceof KnxGroupAddress3Level) {
+            KnxGroupAddress3Level level3 = (KnxGroupAddress3Level) groupAddress;
             return level3.getMainGroup() + "/" + level3.getMiddleGroup() + "/" + level3.getSubGroup();
-        } else if (groupAddress instanceof KNXGroupAddress2Level) {
-            KNXGroupAddress2Level level2 = (KNXGroupAddress2Level) groupAddress;
+        } else if (groupAddress instanceof KnxGroupAddress2Level) {
+            KnxGroupAddress2Level level2 = (KnxGroupAddress2Level) groupAddress;
             return level2.getMainGroup() + "/" + level2.getSubGroup();
-        } else if(groupAddress instanceof KNXGroupAddressFreeLevel) {
-            KNXGroupAddressFreeLevel free = (KNXGroupAddressFreeLevel) groupAddress;
+        } else if(groupAddress instanceof KnxGroupAddressFreeLevel) {
+            KnxGroupAddressFreeLevel free = (KnxGroupAddressFreeLevel) groupAddress;
             return free.getSubGroup() + "";
         }
         throw new PlcRuntimeException("Unsupported Group Address Type " + groupAddress.getClass().getName());
diff --git a/plc4j/drivers/knxnetip/src/test/java/org/apache/plc4x/java/knxnetip/IOTest.java b/plc4j/drivers/knxnetip/src/test/java/org/apache/plc4x/java/knxnetip/IOTest.java
index 4f518b0..a47434a 100644
--- a/plc4j/drivers/knxnetip/src/test/java/org/apache/plc4x/java/knxnetip/IOTest.java
+++ b/plc4j/drivers/knxnetip/src/test/java/org/apache/plc4x/java/knxnetip/IOTest.java
@@ -22,8 +22,8 @@ package org.apache.plc4x.java.knxnetip;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import org.apache.commons.codec.binary.Hex;
-import org.apache.plc4x.java.knxnetip.readwrite.KNXNetIPMessage;
-import org.apache.plc4x.java.knxnetip.readwrite.io.KNXNetIPMessageIO;
+import org.apache.plc4x.java.knxnetip.readwrite.KnxNetIpMessage;
+import org.apache.plc4x.java.knxnetip.readwrite.io.KnxNetIpMessageIO;
 import org.apache.plc4x.java.spi.generation.ReadBuffer;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.junit.jupiter.api.Test;
@@ -37,10 +37,10 @@ public class IOTest {
         byte[] rData = Hex.decodeHex("06100420001c046b00002b0703010504024502bc360a1e0ce100810d");
         ObjectMapper mapper = new XmlMapper().enableDefaultTyping();
         ReadBuffer rBuf = new ReadBuffer(rData);
-        KNXNetIPMessage packet = new KNXNetIPMessageIO().parse(rBuf);
+        KnxNetIpMessage packet = new KnxNetIpMessageIO().parse(rBuf);
         String xml = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(packet);
         System.out.println(xml);
-        KNXNetIPMessage pack2 = mapper.readValue(xml, KNXNetIPMessage.class);
+        KnxNetIpMessage pack2 = mapper.readValue(xml, KnxNetIpMessage.class);
         System.out.println(pack2);
     }
 
@@ -49,10 +49,10 @@ public class IOTest {
         byte[] rData = Hex.decodeHex("0610020500180801c0a82a46c4090801c0a82a46c40a0203");
         ObjectMapper mapper = new ObjectMapper().enableDefaultTyping();
         ReadBuffer rBuf = new ReadBuffer(rData);
-        KNXNetIPMessage packet = new KNXNetIPMessageIO().parse(rBuf);
+        KnxNetIpMessage packet = new KnxNetIpMessageIO().parse(rBuf);
         String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(packet);
         System.out.println(json);
-        KNXNetIPMessage pack2 = mapper.readValue(json, KNXNetIPMessage.class);
+        KnxNetIpMessage pack2 = mapper.readValue(json, KnxNetIpMessage.class);
         System.out.println(pack2);
     }
 
@@ -62,13 +62,13 @@ public class IOTest {
         long start = System.currentTimeMillis();
         int numRunsParse = 20000;
 
-        KNXNetIPMessageIO knxNetIPMessageIO = new KNXNetIPMessageIO();
+        KnxNetIpMessageIO knxNetIPMessageIO = new KnxNetIpMessageIO();
 
         // Benchmark the parsing code
-        KNXNetIPMessage packet = null;
+        KnxNetIpMessage packet = null;
         for(int i = 0; i < numRunsParse; i++) {
             ReadBuffer rBuf = new ReadBuffer(rData);
-            packet = KNXNetIPMessageIO.staticParse(rBuf);
+            packet = KnxNetIpMessageIO.staticParse(rBuf);
         }
         long endParsing = System.currentTimeMillis();
 
@@ -80,7 +80,7 @@ public class IOTest {
         byte[] oData = null;
         for(int i = 0; i < numRunsSerialize; i++) {
             WriteBuffer wBuf = new WriteBuffer(packet.getLengthInBytes());
-            KNXNetIPMessageIO.staticSerialize(wBuf, packet);
+            KnxNetIpMessageIO.staticSerialize(wBuf, packet);
             oData = wBuf.getData();
         }
         long endSerializing = System.currentTimeMillis();
diff --git a/plc4j/drivers/knxnetip/src/test/java/org/apache/plc4x/java/knxnetip/KNXNetIpTest.java b/plc4j/drivers/knxnetip/src/test/java/org/apache/plc4x/java/knxnetip/KnxNetIpTest.java
similarity index 91%
rename from plc4j/drivers/knxnetip/src/test/java/org/apache/plc4x/java/knxnetip/KNXNetIpTest.java
rename to plc4j/drivers/knxnetip/src/test/java/org/apache/plc4x/java/knxnetip/KnxNetIpTest.java
index d6c89d8..8c6ba62 100644
--- a/plc4j/drivers/knxnetip/src/test/java/org/apache/plc4x/java/knxnetip/KNXNetIpTest.java
+++ b/plc4j/drivers/knxnetip/src/test/java/org/apache/plc4x/java/knxnetip/KnxNetIpTest.java
@@ -21,9 +21,9 @@ package org.apache.plc4x.java.knxnetip;
 
 import org.apache.plc4x.test.parserserializer.ParserSerializerTestsuiteRunner;
 
-public class KNXNetIpTest extends ParserSerializerTestsuiteRunner {
+public class KnxNetIpTest extends ParserSerializerTestsuiteRunner {
 
-    public KNXNetIpTest() {
+    public KnxNetIpTest() {
         super("/protocols/knxnetip/ParserSerializerTestsuite.xml");
     }
 
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionResponse.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionResponse.java
index afd6313..741bd93 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionResponse.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionResponse.java
@@ -27,7 +27,6 @@ import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
 import org.apache.plc4x.java.api.messages.PlcResponse;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
-import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.api.model.PlcSubscriptionField;
 import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
diff --git a/plc4j/transports/tcp/src/main/java/org/apache/plc4x/java/transport/tcp/TcpTransport.java b/plc4j/transports/tcp/src/main/java/org/apache/plc4x/java/transport/tcp/TcpTransport.java
index e40d49c..63b688c 100644
--- a/plc4j/transports/tcp/src/main/java/org/apache/plc4x/java/transport/tcp/TcpTransport.java
+++ b/plc4j/transports/tcp/src/main/java/org/apache/plc4x/java/transport/tcp/TcpTransport.java
@@ -31,7 +31,7 @@ import java.util.regex.Pattern;
 public class TcpTransport implements Transport, HasConfiguration<TcpTransportConfiguration> {
 
     private static final Pattern TRANSPORT_TCP_PATTERN = Pattern.compile(
-        "^((?<ip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})|(?<hostname>[a-zA-Z0-9\\.\\-]+))(:(?<port>[0-9]{1,5}))?");
+        "^((?<ip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})|(?<hostname>[a-zA-Z0-9.\\-]+))(:(?<port>[0-9]{1,5}))?");
 
     private TcpTransportConfiguration configuration;
 
diff --git a/plc4j/transports/udp/src/main/java/org/apache/plc4x/java/transport/udp/UdpTransport.java b/plc4j/transports/udp/src/main/java/org/apache/plc4x/java/transport/udp/UdpTransport.java
index a3c51cb..91b1eae 100644
--- a/plc4j/transports/udp/src/main/java/org/apache/plc4x/java/transport/udp/UdpTransport.java
+++ b/plc4j/transports/udp/src/main/java/org/apache/plc4x/java/transport/udp/UdpTransport.java
@@ -31,7 +31,7 @@ import java.util.regex.Pattern;
 public class UdpTransport implements Transport, HasConfiguration<UdpTransportConfiguration> {
 
     private static final Pattern TRANSPORT_UDP_PATTERN = Pattern.compile(
-        "^((?<ip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})|(?<hostname>[a-zA-Z0-9\\.\\-]+))(:(?<port>[0-9]{1,5}))?");
+        "^((?<ip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})|(?<hostname>[a-zA-Z0-9.\\-]+))(:(?<port>[0-9]{1,5}))?");
 
     private UdpTransportConfiguration configuration;
 
@@ -42,7 +42,7 @@ public class UdpTransport implements Transport, HasConfiguration<UdpTransportCon
 
     @Override
     public String getTransportName() {
-        return "IP/UDP Transport";
+        return "UDP Datagram Transport";
     }
 
     @Override
diff --git a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
index f4b6707..b326285 100644
--- a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
+++ b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
@@ -17,7 +17,7 @@
 // under the License.
 //
 
-[discriminatedType 'KNXNetIPMessage'
+[discriminatedType 'KnxNetIpMessage'
     [implicit      uint 8  'headerLength'    '6']
     [const         uint 8  'protocolVersion' '0x10']
     [discriminator uint 16 'msgType']
@@ -108,7 +108,7 @@
     [simple   uint 8       'descriptionType']
     [simple   uint 8       'knxMedium']
     [simple   DeviceStatus 'deviceStatus']
-    [simple   KNXAddress   'knxAddress']
+    [simple   KnxAddress   'knxAddress']
     [simple   ProjectInstallationIdentifier 'projectInstallationIdentifier']
     [array    int 8        'knxNetIpDeviceSerialNumber' count '6']
     [simple   IPAddress    'knxNetIpDeviceMulticastAddress']
@@ -149,7 +149,7 @@
         ['0x03' ConnectionResponseDataBlockDeviceManagement
         ]
         ['0x04' ConnectionResponseDataBlockTunnelConnection
-            [simple KNXAddress 'knxAddress']
+            [simple KnxAddress 'knxAddress']
         ]
     ]
 ]
@@ -190,7 +190,7 @@
     [array int 8 'addr' count '6']
 ]
 
-[type 'KNXAddress'
+[type 'KnxAddress'
     [simple uint 4 'mainGroup']
     [simple uint 4 'middleGroup']
     [simple uint 8 'subGroup']
@@ -316,7 +316,7 @@
     [simple        bit          'groupDestinationAddress']
     [simple        uint 3       'hopCount']
     [simple        uint 4       'extendedFrameFormat']
-    [simple        KNXAddress   'sourceAddress']
+    [simple        KnxAddress   'sourceAddress']
     [array         int 8        'destinationAddress' count '2']
     [simple        uint 8       'dataLength']
     [enum          TPCI         'tcpi']
@@ -340,7 +340,7 @@
         ['false' CEMIFrameAck
         ]
         ['true','true','false' CEMIFrameData
-            [simple   KNXAddress      'sourceAddress']
+            [simple   KnxAddress      'sourceAddress']
             [array    int 8           'destinationAddress' count '2']
             [simple   bit             'groupAddress']
             [simple   uint 3          'hopCount']
@@ -358,7 +358,7 @@
             [simple   bit             'groupAddress']
             [simple   uint 3          'hopCount']
             [simple   uint 4          'extendedFrameFormat']
-            [simple   KNXAddress      'sourceAddress']
+            [simple   KnxAddress      'sourceAddress']
             [array    int 8           'destinationAddress' count '2']
             [simple   uint 8          'dataLength']
             [enum     TPCI            'tcpi']
@@ -377,16 +377,16 @@
     [simple   uint 16 'timestamp']
 ]
 
-[discriminatedType 'KNXGroupAddress' [uint 2 'numLevels']
+[discriminatedType 'KnxGroupAddress' [uint 2 'numLevels']
     [typeSwitch 'numLevels'
-        ['1' KNXGroupAddressFreeLevel
+        ['1' KnxGroupAddressFreeLevel
             [simple uint 16 'subGroup']
         ]
-        ['2' KNXGroupAddress2Level
+        ['2' KnxGroupAddress2Level
             [simple uint 5  'mainGroup']
             [simple uint 11 'subGroup']
         ]
-        ['3' KNXGroupAddress3Level
+        ['3' KnxGroupAddress3Level
             [simple uint 5 'mainGroup']
             [simple uint 3 'middleGroup']
             [simple uint 8 'subGroup']
diff --git a/protocols/knxnetip/src/test/resources/org/apache/plc4x/protocols/knxnetip/protocol.tdml b/protocols/knxnetip/src/test/resources/org/apache/plc4x/protocols/knxnetip/protocol.tdml
index 3453454..ec12f08 100644
--- a/protocols/knxnetip/src/test/resources/org/apache/plc4x/protocols/knxnetip/protocol.tdml
+++ b/protocols/knxnetip/src/test/resources/org/apache/plc4x/protocols/knxnetip/protocol.tdml
@@ -38,8 +38,8 @@
         <!--xs:element name="TpktMessage" type="s7:TpktMessageType"/-->
     </tdml:defineSchema>
 
-    <tdml:parserTestCase name="KNXNetIP-Search-Request"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Search-Request"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Search-Request">
         <tdml:document>
@@ -48,7 +48,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -63,13 +63,13 @@
                             <ipPort>61326</ipPort>
                         </HPAIDiscoveryEndpoint>
                     </SearchRequest>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Search-Response"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Search-Response"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Search-Response">
         <tdml:document>
@@ -80,7 +80,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -141,13 +141,13 @@
                             </serviceIds>
                         </DIBSuppSvcFamilies>
                     </SearchResponse>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Description-Request"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Description-Request"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Description-Request">
         <tdml:document>
@@ -156,7 +156,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -171,13 +171,13 @@
                             <ipPort>0</ipPort>
                         </HPAIControlEndpoint>
                     </DescriptionRequest>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Description-Response"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Description-Response"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Description-Response">
         <tdml:document>
@@ -188,7 +188,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -243,13 +243,13 @@
                             </serviceIds>
                         </DIBSuppSvcFamilies>
                     </DescriptionResponse>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Connect-Request"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Connect-Request"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Connect-Request">
         <tdml:document>
@@ -258,7 +258,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -285,13 +285,13 @@
                             <reserved>0</reserved>
                         </ConnectionRequestInformation>
                     </ConnectionRequest>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Connect-Response"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Connect-Response"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Connect-Response">
         <tdml:document>
@@ -300,7 +300,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -326,13 +326,13 @@
                             </knxAddress>
                         </ConnectionResponseDataBlock>
                     </ConnectionResponse>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Connection-State-Request"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Connection-State-Request"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Connection-State-Request">
         <tdml:document>
@@ -341,7 +341,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -358,13 +358,13 @@
                             <ipPort>62513</ipPort>
                         </HPAIControlEndpoint>
                     </ConnectionStateRequest>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Connection-State-Response"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Connection-State-Response"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Connection-State-Response">
         <tdml:document>
@@ -373,7 +373,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -384,13 +384,13 @@
                         <communicationChannelId>102</communicationChannelId>
                         <status>0</status>
                     </ConnectionStateResponse>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Device-Configuration-Request"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Device-Configuration-Request"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Device-Configuration-Request">
         <tdml:document>
@@ -399,7 +399,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -422,13 +422,13 @@
                             </MPropRead>
                         </cEMI>
                     </DeviceConfigurationRequest>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Device-Configuration-Response"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Device-Configuration-Response"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Device-Configuration-Response">
         <tdml:document>
@@ -437,7 +437,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -450,13 +450,13 @@
                         <sequenceCounter>0</sequenceCounter>
                         <status>0</status>
                     </DeviceConfigurationResponse>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Disconnect-Request"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Disconnect-Request"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Disconnect-Request">
         <tdml:document>
@@ -465,7 +465,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -482,13 +482,13 @@
                             <ipPort>62513</ipPort>
                         </HPAIControlEndpoint>
                     </DisconnectRequest>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Disconnect-Response"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Disconnect-Response"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Disconnect-Response">
         <tdml:document>
@@ -497,7 +497,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -508,13 +508,13 @@
                         <communicationChannelId>103</communicationChannelId>
                         <status>0</status>
                     </DisconnectResponse>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Tunneling-Request"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Tunneling-Request"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Tunneling-Request">
         <tdml:document>
@@ -523,7 +523,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -566,13 +566,13 @@
                             </LBusmonInd>
                         </cEMI>
                     </TunnelingRequest>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
 
-    <tdml:parserTestCase name="KNXNetIP-Tunneling-Response"
-                         root="KNXNetIPMessage"
+    <tdml:parserTestCase name="KnxNetIp-Tunneling-Response"
+                         root="KnxNetIpMessage"
                          model="knxNetIpSchema"
                          description="KNXNet/IP Tunneling-Response">
         <tdml:document>
@@ -581,7 +581,7 @@
 
         <tdml:infoset>
             <tdml:dfdlInfoset>
-                <knx:KNXNetIPMessage>
+                <knx:KnxNetIpMessage>
                     <header>
                         <headerLength>6</headerLength>
                         <protocolVersion>16</protocolVersion>
@@ -594,7 +594,7 @@
                         <sequenceCounter>0</sequenceCounter>
                         <status>0</status>
                     </TunnelingResponse>
-                </knx:KNXNetIPMessage>
+                </knx:KnxNetIpMessage>
             </tdml:dfdlInfoset>
         </tdml:infoset>
     </tdml:parserTestCase>
diff --git a/protocols/knxnetip/src/test/resources/protocols/knxnetip/ParserSerializerTestsuite.xml b/protocols/knxnetip/src/test/resources/protocols/knxnetip/ParserSerializerTestsuite.xml
index 939c1b9..90217fe 100644
--- a/protocols/knxnetip/src/test/resources/protocols/knxnetip/ParserSerializerTestsuite.xml
+++ b/protocols/knxnetip/src/test/resources/protocols/knxnetip/ParserSerializerTestsuite.xml
@@ -40,7 +40,7 @@
     Differences from normal:
     Repeat: True
     Last two reserved bits are true
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <TunnelingRequest className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingRequest">
         <tunnelingRequestDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingRequestDataBlock">
@@ -80,7 +80,7 @@
     Raw CEMI Frame: bab8b838bb
     Control Field: ba
     First of the last two reserved bits is true
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <TunnelingRequest className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingRequest">
         <tunnelingRequestDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingRequestDataBlock">
@@ -117,7 +117,7 @@
   <testcase>
     <name>Search Request</name>
     <raw>06100201000e0801c0a82a46ef8e</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <SearchRequest className="org.apache.plc4x.java.knxnetip.readwrite.SearchRequest">
         <hpaiIDiscoveryEndpoint className="org.apache.plc4x.java.knxnetip.readwrite.HPAIDiscoveryEndpoint">
@@ -134,7 +134,7 @@
   <testcase>
     <name>Search Response</name>
     <raw>06100202004c0801c0a82a0b0e5736010200ffff000000082d409852e000170c000ab327553647697261204b4e582f49502d5363686e6974747374656c6c6500000000000802020103010401</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <SearchResponse className="org.apache.plc4x.java.knxnetip.readwrite.SearchResponse">
         <hpaiControlEndpoint className="org.apache.plc4x.java.knxnetip.readwrite.HPAIControlEndpoint">
@@ -150,7 +150,7 @@
           <deviceStatus className="org.apache.plc4x.java.knxnetip.readwrite.DeviceStatus">
             <programMode>false</programMode>
           </deviceStatus>
-          <knxAddress className="org.apache.plc4x.java.knxnetip.readwrite.KNXAddress">
+          <knxAddress className="org.apache.plc4x.java.knxnetip.readwrite.KnxAddress">
             <mainGroup>15</mainGroup>
             <middleGroup>15</middleGroup>
             <subGroup>255</subGroup>
@@ -189,7 +189,7 @@
   <testcase>
     <name>Description Request</name>
     <raw>06100203000e0801000000000000</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <DescriptionRequest className="org.apache.plc4x.java.knxnetip.readwrite.DescriptionRequest">
         <hpaiControlEndpoint className="org.apache.plc4x.java.knxnetip.readwrite.HPAIControlEndpoint">
@@ -206,7 +206,7 @@
   <testcase>
     <name>Description Response</name>
     <raw>06100204004436010200ffff000000082d409852e000170c000ab327553647697261204b4e582f49502d5363686e6974747374656c6c6500000000000802020103010401</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <DescriptionResponse className="org.apache.plc4x.java.knxnetip.readwrite.DescriptionResponse">
         <dibDeviceInfo className="org.apache.plc4x.java.knxnetip.readwrite.DIBDeviceInfo">
@@ -215,7 +215,7 @@
           <deviceStatus className="org.apache.plc4x.java.knxnetip.readwrite.DeviceStatus">
             <programMode>false</programMode>
           </deviceStatus>
-          <knxAddress className="org.apache.plc4x.java.knxnetip.readwrite.KNXAddress">
+          <knxAddress className="org.apache.plc4x.java.knxnetip.readwrite.KnxAddress">
             <mainGroup>15</mainGroup>
             <middleGroup>15</middleGroup>
             <subGroup>255</subGroup>
@@ -254,7 +254,7 @@
   <testcase>
     <name>Connect Request</name>
     <raw>06100205001a0801c0a82a46f4310801c0a82a46f43204040200</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <ConnectionRequest className="org.apache.plc4x.java.knxnetip.readwrite.ConnectionRequest">
         <hpaiDiscoveryEndpoint className="org.apache.plc4x.java.knxnetip.readwrite.HPAIDiscoveryEndpoint">
@@ -281,7 +281,7 @@
   <testcase>
     <name>Connect Response</name>
     <raw>06100206001466000801c0a82a0b0e5704041101</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <ConnectionResponse className="org.apache.plc4x.java.knxnetip.readwrite.ConnectionResponse">
         <communicationChannelId>102</communicationChannelId>
@@ -294,7 +294,7 @@
           <ipPort>3671</ipPort>
         </hpaiDataEndpoint>
         <connectionResponseDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.ConnectionResponseDataBlockTunnelConnection">
-          <knxAddress className="org.apache.plc4x.java.knxnetip.readwrite.KNXAddress">
+          <knxAddress className="org.apache.plc4x.java.knxnetip.readwrite.KnxAddress">
             <mainGroup>1</mainGroup>
             <middleGroup>1</middleGroup>
             <subGroup>1</subGroup>
@@ -307,7 +307,7 @@
   <testcase>
     <name>Connection State Request</name>
     <raw>06100207001066000801c0a82a46f431</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <ConnectionStateRequest className="org.apache.plc4x.java.knxnetip.readwrite.ConnectionStateRequest">
         <communicationChannelId>102</communicationChannelId>
@@ -325,7 +325,7 @@
   <testcase>
     <name>Connection State Response</name>
     <raw>0610020800086600</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <ConnectionStateResponse className="org.apache.plc4x.java.knxnetip.readwrite.ConnectionStateResponse">
         <communicationChannelId>102</communicationChannelId>
@@ -337,7 +337,7 @@
   <testcase>
     <name>Device Configuration Request</name>
     <raw>06100310001104670000fc000001531001</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <DeviceConfigurationRequest className="org.apache.plc4x.java.knxnetip.readwrite.DeviceConfigurationRequest">
         <deviceConfigurationRequestDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.DeviceConfigurationRequestDataBlock">
@@ -358,7 +358,7 @@
   <testcase>
     <name>Device Configuration Ack</name>
     <raw>06100311000a04670000</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <DeviceConfigurationAck className="org.apache.plc4x.java.knxnetip.readwrite.DeviceConfigurationAck">
         <deviceConfigurationAckDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.DeviceConfigurationAckDataBlock">
@@ -373,7 +373,7 @@
   <testcase>
     <name>Disconnect Request</name>
     <raw>06100209001067000801c0a82a46f431</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <DisconnectRequest className="org.apache.plc4x.java.knxnetip.readwrite.DisconnectRequest">
         <communicationChannelId>103</communicationChannelId>
@@ -391,7 +391,7 @@
   <testcase>
     <name>Disconnect Response</name>
     <raw>0610020a00086600</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <DisconnectResponse className="org.apache.plc4x.java.knxnetip.readwrite.DisconnectResponse">
         <communicationChannelId>102</communicationChannelId>
@@ -407,7 +407,7 @@
     Raw CEMI Frame: bc360a1e0ce100810d
     Control Field: bc
     -->
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <TunnelingRequest className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingRequest">
         <tunnelingRequestDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingRequestDataBlock">
@@ -436,7 +436,7 @@
             <priority>LOW</priority>
             <acknowledgeRequested>false</acknowledgeRequested>
             <errorFlag>false</errorFlag>
-            <sourceAddress className="org.apache.plc4x.java.knxnetip.readwrite.KNXAddress">
+            <sourceAddress className="org.apache.plc4x.java.knxnetip.readwrite.KnxAddress">
               <mainGroup>3</mainGroup>
               <middleGroup>6</middleGroup>
               <subGroup>10</subGroup>
@@ -460,7 +460,7 @@
   <testcase>
     <name>Tunneling Response</name>
     <raw>06100421000a046b0000</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <TunnelingResponse className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingResponse">
         <tunnelingResponseDataBlock className="org.apache.plc4x.java.knxnetip.readwrite.TunnelingResponseDataBlock">
@@ -475,7 +475,7 @@
   <testcase>
     <name>Default</name>
     <raw>0610020500180801c0a82a46c4090801c0a82a46c40a0203</raw>
-    <root-type>KNXNetIPMessage</root-type>
+    <root-type>KnxNetIpMessage</root-type>
     <xml>
       <ConnectionRequest className="org.apache.plc4x.java.knxnetip.readwrite.ConnectionRequest">
         <hpaiDiscoveryEndpoint className="org.apache.plc4x.java.knxnetip.readwrite.HPAIDiscoveryEndpoint">
diff --git a/sandbox/test-streampipes-plc4x-adapters/src/main/java/org/apache/plc4x/java/streampipes/adapters/source/knxnetip/KnxNetIpAdapter.java b/sandbox/test-streampipes-plc4x-adapters/src/main/java/org/apache/plc4x/java/streampipes/adapters/source/knxnetip/KnxNetIpAdapter.java
index a306a34..96b0136 100644
--- a/sandbox/test-streampipes-plc4x-adapters/src/main/java/org/apache/plc4x/java/streampipes/adapters/source/knxnetip/KnxNetIpAdapter.java
+++ b/sandbox/test-streampipes-plc4x-adapters/src/main/java/org/apache/plc4x/java/streampipes/adapters/source/knxnetip/KnxNetIpAdapter.java
@@ -19,7 +19,7 @@ under the License.
 package org.apache.plc4x.java.streampipes.adapters.source.knxnetip;
 
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-import org.apache.plc4x.java.knxnetip.readwrite.KNXAddress;
+import org.apache.plc4x.java.knxnetip.readwrite.KnxAddress;
 import org.apache.plc4x.java.spi.connection.DefaultNettyPlcConnection;
 import org.apache.plc4x.java.streampipes.shared.source.knxnetip.Constants;
 import org.slf4j.Logger;
@@ -215,7 +215,7 @@ public class KnxNetIpAdapter extends SpecificDataStreamAdapter {
         return Constants.KNXNET_ID;
     }
 
-    private String addressToString(KNXAddress knxAddress) {
+    private String addressToString(KnxAddress knxAddress) {
         return knxAddress.getMainGroup() + "." + knxAddress.getMiddleGroup() + "." + knxAddress.getSubGroup();
     }
 


[plc4x] 04/04: - Implemented the connection establishment of KNX connection and PING operation

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit cb235b9617c662d9a06e2ca14d9c6791cfbd4fff
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Mon Nov 9 13:11:37 2020 +0100

    - Implemented the connection establishment of KNX connection and PING operation
---
 .../BaseFreemarkerLanguageTemplateHelper.java      |   2 +-
 .../language/go/GoLanguageTemplateHelper.java      |   8 +-
 .../main/resources/templates/go/enum-template.ftlh |  18 +-
 .../resources/templates/go/model-template.ftlh     |  10 +-
 .../templates/go/parser-factory-template.ftlh      |   6 +-
 .../templates/go/xml-parser-factory-template.ftlh  |   4 +-
 plc4go/cmd/main/drivers/knxnetip_test.go           |  19 +-
 .../plc4go/bacnetip/readwrite/model/APDU.go        |  10 +-
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   |  10 +-
 .../bacnetip/readwrite/model/APDUComplexAck.go     |  10 +-
 .../readwrite/model/APDUConfirmedRequest.go        |  10 +-
 .../plc4go/bacnetip/readwrite/model/APDUError.go   |  10 +-
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  |  10 +-
 .../bacnetip/readwrite/model/APDUSegmentAck.go     |  10 +-
 .../bacnetip/readwrite/model/APDUSimpleAck.go      |  10 +-
 .../readwrite/model/APDUUnconfirmedRequest.go      |  10 +-
 .../bacnetip/readwrite/model/ApplicationTag.go     |  11 +-
 .../bacnetip/readwrite/model/BACnetAddress.go      |  10 +-
 .../readwrite/model/BACnetConfirmedServiceACK.go   |  10 +-
 .../BACnetConfirmedServiceACKAtomicReadFile.go     |  10 +-
 .../BACnetConfirmedServiceACKAtomicWriteFile.go    |  10 +-
 ...tConfirmedServiceACKConfirmedPrivateTransfer.go |  10 +-
 .../model/BACnetConfirmedServiceACKCreateObject.go |  10 +-
 .../BACnetConfirmedServiceACKGetAlarmSummary.go    |  10 +-
 ...ACnetConfirmedServiceACKGetEnrollmentSummary.go |  10 +-
 ...BACnetConfirmedServiceACKGetEventInformation.go |  10 +-
 .../model/BACnetConfirmedServiceACKReadProperty.go |  10 +-
 ...ACnetConfirmedServiceACKReadPropertyMultiple.go |  10 +-
 .../model/BACnetConfirmedServiceACKReadRange.go    |  10 +-
 ...BACnetConfirmedServiceACKRemovedAuthenticate.go |  10 +-
 ...rmedServiceACKRemovedReadPropertyConditional.go |  10 +-
 .../model/BACnetConfirmedServiceACKVTData.go       |  10 +-
 .../model/BACnetConfirmedServiceACKVTOpen.go       |  10 +-
 .../model/BACnetConfirmedServiceRequest.go         |  10 +-
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |  10 +-
 .../BACnetConfirmedServiceRequestAddListElement.go |  10 +-
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |  10 +-
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |  10 +-
 ...firmedServiceRequestConfirmedCOVNotification.go |  10 +-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |  10 +-
 ...rmedServiceRequestConfirmedEventNotification.go |  10 +-
 ...firmedServiceRequestConfirmedPrivateTransfer.go |  10 +-
 ...tConfirmedServiceRequestConfirmedTextMessage.go |  10 +-
 .../BACnetConfirmedServiceRequestCreateObject.go   |  10 +-
 .../BACnetConfirmedServiceRequestDeleteObject.go   |  10 +-
 ...rmedServiceRequestDeviceCommunicationControl.go |  10 +-
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |  10 +-
 ...etConfirmedServiceRequestGetEventInformation.go |  10 +-
 ...etConfirmedServiceRequestLifeSafetyOperation.go |  10 +-
 .../BACnetConfirmedServiceRequestReadProperty.go   |  10 +-
 ...tConfirmedServiceRequestReadPropertyMultiple.go |  10 +-
 .../BACnetConfirmedServiceRequestReadRange.go      |  10 +-
 ...netConfirmedServiceRequestReinitializeDevice.go |  10 +-
 ...CnetConfirmedServiceRequestRemoveListElement.go |  10 +-
 ...etConfirmedServiceRequestRemovedAuthenticate.go |  10 +-
 ...ServiceRequestRemovedReadPropertyConditional.go |  10 +-
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |  10 +-
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |  10 +-
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |  10 +-
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |  10 +-
 .../model/BACnetConfirmedServiceRequestVTClose.go  |  10 +-
 .../model/BACnetConfirmedServiceRequestVTData.go   |  10 +-
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |  10 +-
 .../BACnetConfirmedServiceRequestWriteProperty.go  |  10 +-
 ...ConfirmedServiceRequestWritePropertyMultiple.go |  10 +-
 .../plc4go/bacnetip/readwrite/model/BACnetError.go |  10 +-
 .../readwrite/model/BACnetErrorAtomicReadFile.go   |  10 +-
 .../readwrite/model/BACnetErrorAtomicWriteFile.go  |  10 +-
 .../model/BACnetErrorConfirmedPrivateTransfer.go   |  10 +-
 .../readwrite/model/BACnetErrorCreateObject.go     |  10 +-
 .../readwrite/model/BACnetErrorGetAlarmSummary.go  |  10 +-
 .../model/BACnetErrorGetEnrollmentSummary.go       |  10 +-
 .../model/BACnetErrorGetEventInformation.go        |  10 +-
 .../readwrite/model/BACnetErrorReadProperty.go     |  10 +-
 .../model/BACnetErrorReadPropertyMultiple.go       |  10 +-
 .../readwrite/model/BACnetErrorReadRange.go        |  10 +-
 .../model/BACnetErrorRemovedAuthenticate.go        |  10 +-
 .../BACnetErrorRemovedReadPropertyConditional.go   |  10 +-
 .../bacnetip/readwrite/model/BACnetErrorVTData.go  |  10 +-
 .../bacnetip/readwrite/model/BACnetErrorVTOpen.go  |  10 +-
 .../bacnetip/readwrite/model/BACnetNetworkType.go  |  11 +-
 .../bacnetip/readwrite/model/BACnetNodeType.go     |  11 +-
 .../bacnetip/readwrite/model/BACnetNotifyType.go   |  11 +-
 .../bacnetip/readwrite/model/BACnetObjectType.go   |  11 +-
 .../bacnetip/readwrite/model/BACnetServiceAck.go   |  10 +-
 .../model/BACnetServiceAckAtomicReadFile.go        |  10 +-
 .../model/BACnetServiceAckAtomicWriteFile.go       |  10 +-
 .../BACnetServiceAckConfirmedPrivateTransfer.go    |  10 +-
 .../model/BACnetServiceAckCreateObject.go          |  10 +-
 .../model/BACnetServiceAckGetAlarmSummary.go       |  10 +-
 .../model/BACnetServiceAckGetEnrollmentSummary.go  |  10 +-
 .../model/BACnetServiceAckGetEventInformation.go   |  10 +-
 .../model/BACnetServiceAckReadProperty.go          |  10 +-
 .../model/BACnetServiceAckReadPropertyMultiple.go  |  10 +-
 .../readwrite/model/BACnetServiceAckReadRange.go   |  10 +-
 .../model/BACnetServiceAckRemovedAuthenticate.go   |  10 +-
 ...CnetServiceAckRemovedReadPropertyConditional.go |  10 +-
 .../readwrite/model/BACnetServiceAckVTData.go      |  10 +-
 .../readwrite/model/BACnetServiceAckVTOpen.go      |  10 +-
 .../plc4go/bacnetip/readwrite/model/BACnetTag.go   |  10 +-
 .../model/BACnetTagApplicationBitString.go         |  10 +-
 .../readwrite/model/BACnetTagApplicationBoolean.go |  10 +-
 .../model/BACnetTagApplicationCharacterString.go   |  10 +-
 .../readwrite/model/BACnetTagApplicationDate.go    |  10 +-
 .../readwrite/model/BACnetTagApplicationDouble.go  |  10 +-
 .../model/BACnetTagApplicationEnumerated.go        |  10 +-
 .../readwrite/model/BACnetTagApplicationNull.go    |  10 +-
 .../model/BACnetTagApplicationObjectIdentifier.go  |  10 +-
 .../model/BACnetTagApplicationOctetString.go       |  10 +-
 .../readwrite/model/BACnetTagApplicationReal.go    |  10 +-
 .../model/BACnetTagApplicationSignedInteger.go     |  10 +-
 .../readwrite/model/BACnetTagApplicationTime.go    |  10 +-
 .../model/BACnetTagApplicationUnsignedInteger.go   |  10 +-
 .../bacnetip/readwrite/model/BACnetTagContext.go   |  10 +-
 .../readwrite/model/BACnetTagWithContent.go        |  10 +-
 .../model/BACnetUnconfirmedServiceRequest.go       |  10 +-
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |  10 +-
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |  10 +-
 ...UnconfirmedServiceRequestTimeSynchronization.go |  10 +-
 ...onfirmedServiceRequestUTCTimeSynchronization.go |  10 +-
 ...rmedServiceRequestUnconfirmedCOVNotification.go |  10 +-
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |  10 +-
 ...edServiceRequestUnconfirmedEventNotification.go |  10 +-
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go |  10 +-
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |  10 +-
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |  10 +-
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |  10 +-
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |  10 +-
 .../plc4go/bacnetip/readwrite/model/BVLC.go        |  10 +-
 .../model/BVLCDeleteForeignDeviceTableEntry.go     |  10 +-
 .../model/BVLCDistributeBroadcastToNetwork.go      |  10 +-
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |  10 +-
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |  10 +-
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |  10 +-
 .../model/BVLCReadBroadcastDistributionTable.go    |  10 +-
 .../model/BVLCReadBroadcastDistributionTableAck.go |  10 +-
 .../readwrite/model/BVLCReadForeignDeviceTable.go  |  10 +-
 .../model/BVLCReadForeignDeviceTableAck.go         |  10 +-
 .../readwrite/model/BVLCRegisterForeignDevice.go   |  10 +-
 .../plc4go/bacnetip/readwrite/model/BVLCResult.go  |  10 +-
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |  10 +-
 .../model/BVLCWideBroadcastDistributionTable.go    |  10 +-
 .../plc4go/bacnetip/readwrite/model/NLM.go         |  10 +-
 .../readwrite/model/NLMIAmRouterToNetwork.go       |  10 +-
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |  10 +-
 .../plc4go/bacnetip/readwrite/model/NPDU.go        |  10 +-
 .../internal/plc4go/knxnetip/KncNetIpConnection.go | 331 ++++++++++++++++-----
 plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go  |  11 +-
 .../plc4go/knxnetip/KnxNetIpMessageCodec.go        |  21 +-
 .../plc4go/knxnetip/readwrite/model/APCI.go        |  11 +-
 .../plc4go/knxnetip/readwrite/model/CEMI.go        |  10 +-
 .../readwrite/model/CEMIAdditionalInformation.go   |  10 +-
 .../CEMIAdditionalInformationBusmonitorInfo.go     |  10 +-
 .../CEMIAdditionalInformationRelativeTimestamp.go  |  10 +-
 .../knxnetip/readwrite/model/CEMIBusmonInd.go      |  10 +-
 .../plc4go/knxnetip/readwrite/model/CEMIDataCon.go |  10 +-
 .../knxnetip/readwrite/model/CEMIDataFrame.go      |  10 +-
 .../plc4go/knxnetip/readwrite/model/CEMIDataInd.go |  10 +-
 .../plc4go/knxnetip/readwrite/model/CEMIDataReq.go |  10 +-
 .../plc4go/knxnetip/readwrite/model/CEMIFrame.go   |  10 +-
 .../knxnetip/readwrite/model/CEMIFrameAck.go       |  10 +-
 .../knxnetip/readwrite/model/CEMIFrameData.go      |  10 +-
 .../knxnetip/readwrite/model/CEMIFrameDataExt.go   |  10 +-
 .../readwrite/model/CEMIFramePollingData.go        |  10 +-
 .../readwrite/model/CEMIFramePollingDataExt.go     |  10 +-
 .../knxnetip/readwrite/model/CEMIMPropReadCon.go   |  10 +-
 .../knxnetip/readwrite/model/CEMIMPropReadReq.go   |  10 +-
 .../knxnetip/readwrite/model/CEMIPollDataCon.go    |  10 +-
 .../knxnetip/readwrite/model/CEMIPollDataReq.go    |  10 +-
 .../knxnetip/readwrite/model/CEMIPriority.go       |  11 +-
 .../plc4go/knxnetip/readwrite/model/CEMIRawCon.go  |  10 +-
 .../plc4go/knxnetip/readwrite/model/CEMIRawInd.go  |  10 +-
 .../plc4go/knxnetip/readwrite/model/CEMIRawReq.go  |  10 +-
 .../knxnetip/readwrite/model/ConnectionRequest.go  |  10 +-
 .../model/ConnectionRequestInformation.go          |  10 +-
 ...ConnectionRequestInformationDeviceManagement.go |  10 +-
 ...ConnectionRequestInformationTunnelConnection.go |  10 +-
 .../knxnetip/readwrite/model/ConnectionResponse.go |  10 +-
 .../readwrite/model/ConnectionResponseDataBlock.go |  10 +-
 .../ConnectionResponseDataBlockDeviceManagement.go |  10 +-
 .../ConnectionResponseDataBlockTunnelConnection.go |  10 +-
 .../readwrite/model/ConnectionStateRequest.go      |  10 +-
 .../readwrite/model/ConnectionStateResponse.go     |  10 +-
 .../knxnetip/readwrite/model/DIBDeviceInfo.go      |  10 +-
 .../knxnetip/readwrite/model/DIBSuppSvcFamilies.go |  10 +-
 .../knxnetip/readwrite/model/DescriptionRequest.go |  10 +-
 .../readwrite/model/DescriptionResponse.go         |  10 +-
 .../readwrite/model/DeviceConfigurationAck.go      |  10 +-
 .../model/DeviceConfigurationAckDataBlock.go       |  10 +-
 .../readwrite/model/DeviceConfigurationRequest.go  |  10 +-
 .../model/DeviceConfigurationRequestDataBlock.go   |  10 +-
 .../knxnetip/readwrite/model/DeviceStatus.go       |  10 +-
 .../knxnetip/readwrite/model/DisconnectRequest.go  |  10 +-
 .../knxnetip/readwrite/model/DisconnectResponse.go |  10 +-
 .../readwrite/model/HPAIControlEndpoint.go         |  10 +-
 .../knxnetip/readwrite/model/HPAIDataEndpoint.go   |  10 +-
 .../readwrite/model/HPAIDiscoveryEndpoint.go       |  10 +-
 .../knxnetip/readwrite/model/HostProtocolCode.go   |  11 +-
 .../plc4go/knxnetip/readwrite/model/IPAddress.go   |  10 +-
 .../plc4go/knxnetip/readwrite/model/KnxAddress.go  |  10 +-
 .../knxnetip/readwrite/model/KnxDatapointType.go   |   9 -
 .../knxnetip/readwrite/model/KnxGroupAddress.go    |  10 +-
 .../readwrite/model/KnxGroupAddress2Level.go       |  10 +-
 .../readwrite/model/KnxGroupAddress3Level.go       |  10 +-
 .../readwrite/model/KnxGroupAddressFreeLevel.go    |  10 +-
 .../plc4go/knxnetip/readwrite/model/KnxLayer.go    |  11 +-
 .../knxnetip/readwrite/model/KnxNetIpCore.go       |  10 +-
 .../readwrite/model/KnxNetIpDeviceManagement.go    |  10 +-
 .../knxnetip/readwrite/model/KnxNetIpMessage.go    |  10 +-
 .../knxnetip/readwrite/model/KnxNetIpTunneling.go  |  10 +-
 .../knxnetip/readwrite/model/KnxNetObjectServer.go |  10 +-
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |  10 +-
 .../readwrite/model/KnxNetRemoteLogging.go         |  10 +-
 .../plc4go/knxnetip/readwrite/model/MACAddress.go  |  10 +-
 .../model/ProjectInstallationIdentifier.go         |  10 +-
 .../knxnetip/readwrite/model/RelativeTimestamp.go  |  10 +-
 .../knxnetip/readwrite/model/RoutingIndication.go  |  10 +-
 .../knxnetip/readwrite/model/SearchRequest.go      |  10 +-
 .../knxnetip/readwrite/model/SearchResponse.go     |  10 +-
 .../plc4go/knxnetip/readwrite/model/ServiceId.go   |  10 +-
 .../plc4go/knxnetip/readwrite/model/Status.go      |  11 +-
 .../plc4go/knxnetip/readwrite/model/TPCI.go        |  11 +-
 .../knxnetip/readwrite/model/TunnelingRequest.go   |  10 +-
 .../readwrite/model/TunnelingRequestDataBlock.go   |  10 +-
 .../knxnetip/readwrite/model/TunnelingResponse.go  |  10 +-
 .../readwrite/model/TunnelingResponseDataBlock.go  |  10 +-
 .../knxnetip/readwrite/model/UnknownMessage.go     |  10 +-
 plc4go/internal/plc4go/modbus/ModbusReader.go      |   2 +-
 plc4go/internal/plc4go/modbus/ModbusWriter.go      |   2 +-
 .../modbus/readwrite/model/ModbusConstants.go      |  10 +-
 .../modbus/readwrite/model/ModbusDataTypeSizes.go  |   9 -
 .../modbus/readwrite/model/ModbusErrorCode.go      |  11 +-
 .../plc4go/modbus/readwrite/model/ModbusPDU.go     |  10 +-
 .../readwrite/model/ModbusPDUDiagnosticRequest.go  |  10 +-
 .../readwrite/model/ModbusPDUDiagnosticResponse.go |  10 +-
 .../modbus/readwrite/model/ModbusPDUError.go       |  10 +-
 .../model/ModbusPDUGetComEventCounterRequest.go    |  10 +-
 .../model/ModbusPDUGetComEventCounterResponse.go   |  10 +-
 .../model/ModbusPDUGetComEventLogRequest.go        |  10 +-
 .../model/ModbusPDUGetComEventLogResponse.go       |  10 +-
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |  10 +-
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |  10 +-
 .../readwrite/model/ModbusPDUReadCoilsRequest.go   |  10 +-
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |  10 +-
 .../ModbusPDUReadDeviceIdentificationRequest.go    |  10 +-
 .../ModbusPDUReadDeviceIdentificationResponse.go   |  10 +-
 .../model/ModbusPDUReadDiscreteInputsRequest.go    |  10 +-
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |  10 +-
 .../model/ModbusPDUReadExceptionStatusRequest.go   |  10 +-
 .../model/ModbusPDUReadExceptionStatusResponse.go  |  10 +-
 .../model/ModbusPDUReadFifoQueueRequest.go         |  10 +-
 .../model/ModbusPDUReadFifoQueueResponse.go        |  10 +-
 .../model/ModbusPDUReadFileRecordRequest.go        |  10 +-
 .../model/ModbusPDUReadFileRecordRequestItem.go    |  10 +-
 .../model/ModbusPDUReadFileRecordResponse.go       |  10 +-
 .../model/ModbusPDUReadFileRecordResponseItem.go   |  10 +-
 .../model/ModbusPDUReadHoldingRegistersRequest.go  |  10 +-
 .../model/ModbusPDUReadHoldingRegistersResponse.go |  10 +-
 .../model/ModbusPDUReadInputRegistersRequest.go    |  10 +-
 .../model/ModbusPDUReadInputRegistersResponse.go   |  10 +-
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |  10 +-
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |  10 +-
 .../model/ModbusPDUReportServerIdRequest.go        |  10 +-
 .../model/ModbusPDUReportServerIdResponse.go       |  10 +-
 .../model/ModbusPDUWriteFileRecordRequest.go       |  10 +-
 .../model/ModbusPDUWriteFileRecordRequestItem.go   |  10 +-
 .../model/ModbusPDUWriteFileRecordResponse.go      |  10 +-
 .../model/ModbusPDUWriteFileRecordResponseItem.go  |  10 +-
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |  10 +-
 .../model/ModbusPDUWriteMultipleCoilsResponse.go   |  10 +-
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |  10 +-
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |  10 +-
 .../model/ModbusPDUWriteSingleCoilRequest.go       |  10 +-
 .../model/ModbusPDUWriteSingleCoilResponse.go      |  10 +-
 .../model/ModbusPDUWriteSingleRegisterRequest.go   |  10 +-
 .../model/ModbusPDUWriteSingleRegisterResponse.go  |  10 +-
 .../modbus/readwrite/model/ModbusSerialADU.go      |  10 +-
 .../plc4go/modbus/readwrite/model/ModbusTcpADU.go  |  10 +-
 .../plc4go/s7/readwrite/model/COTPPacket.go        |  10 +-
 .../readwrite/model/COTPPacketConnectionRequest.go |  10 +-
 .../model/COTPPacketConnectionResponse.go          |  10 +-
 .../plc4go/s7/readwrite/model/COTPPacketData.go    |  10 +-
 .../readwrite/model/COTPPacketDisconnectRequest.go |  10 +-
 .../model/COTPPacketDisconnectResponse.go          |  10 +-
 .../s7/readwrite/model/COTPPacketTpduError.go      |  10 +-
 .../plc4go/s7/readwrite/model/COTPParameter.go     |  10 +-
 .../s7/readwrite/model/COTPParameterCalledTsap.go  |  10 +-
 .../s7/readwrite/model/COTPParameterCallingTsap.go |  10 +-
 .../s7/readwrite/model/COTPParameterChecksum.go    |  10 +-
 ...COTPParameterDisconnectAdditionalInformation.go |  10 +-
 .../s7/readwrite/model/COTPParameterTpduSize.go    |  10 +-
 .../plc4go/s7/readwrite/model/COTPProtocolClass.go |  11 +-
 .../plc4go/s7/readwrite/model/COTPTpduSize.go      |  11 +-
 .../s7/readwrite/model/DataTransportErrorCode.go   |  11 +-
 .../plc4go/s7/readwrite/model/DataTransportSize.go |  11 +-
 .../plc4go/s7/readwrite/model/DeviceGroup.go       |  11 +-
 .../plc4go/s7/readwrite/model/MemoryArea.go        |  11 +-
 .../plc4go/s7/readwrite/model/S7Address.go         |  10 +-
 .../plc4go/s7/readwrite/model/S7AddressAny.go      |  10 +-
 .../plc4go/s7/readwrite/model/S7Message.go         |  10 +-
 .../plc4go/s7/readwrite/model/S7MessageRequest.go  |  10 +-
 .../plc4go/s7/readwrite/model/S7MessageResponse.go |  10 +-
 .../s7/readwrite/model/S7MessageResponseData.go    |  10 +-
 .../plc4go/s7/readwrite/model/S7MessageUserData.go |  10 +-
 .../plc4go/s7/readwrite/model/S7Parameter.go       |  10 +-
 .../readwrite/model/S7ParameterReadVarRequest.go   |  10 +-
 .../readwrite/model/S7ParameterReadVarResponse.go  |  10 +-
 .../model/S7ParameterSetupCommunication.go         |  10 +-
 .../s7/readwrite/model/S7ParameterUserData.go      |  10 +-
 .../s7/readwrite/model/S7ParameterUserDataItem.go  |  10 +-
 .../model/S7ParameterUserDataItemCPUFunctions.go   |  10 +-
 .../readwrite/model/S7ParameterWriteVarRequest.go  |  10 +-
 .../readwrite/model/S7ParameterWriteVarResponse.go |  10 +-
 .../plc4go/s7/readwrite/model/S7Payload.go         |  10 +-
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |  10 +-
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |  10 +-
 .../s7/readwrite/model/S7PayloadUserDataItem.go    |  10 +-
 ...PayloadUserDataItemCpuFunctionReadSzlRequest.go |  10 +-
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |  10 +-
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |  10 +-
 .../readwrite/model/S7PayloadWriteVarResponse.go   |  10 +-
 .../s7/readwrite/model/S7VarPayloadDataItem.go     |  10 +-
 .../s7/readwrite/model/S7VarPayloadStatusItem.go   |  10 +-
 .../readwrite/model/S7VarRequestParameterItem.go   |  10 +-
 .../model/S7VarRequestParameterItemAddress.go      |  10 +-
 .../plc4go/s7/readwrite/model/SzlDataTreeItem.go   |  10 +-
 plc4go/internal/plc4go/s7/readwrite/model/SzlId.go |  10 +-
 .../s7/readwrite/model/SzlModuleTypeClass.go       |  11 +-
 .../plc4go/s7/readwrite/model/SzlSublist.go        |  11 +-
 .../plc4go/s7/readwrite/model/TPKTPacket.go        |  10 +-
 .../plc4go/s7/readwrite/model/TransportSize.go     |  11 +-
 .../internal/plc4go/transports/tcp/TcpTransport.go |  37 +--
 .../internal/plc4go/transports/udp/UdpTransport.go |  45 +--
 333 files changed, 1984 insertions(+), 1741 deletions(-)

diff --git a/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java b/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
index 5f5b25e..25a68cf 100644
--- a/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
+++ b/build-utils/language-base-freemarker/src/main/java/org/apache/plc4x/plugins/codegenerator/protocol/freemarker/BaseFreemarkerLanguageTemplateHelper.java
@@ -285,7 +285,7 @@ public abstract class BaseFreemarkerLanguageTemplateHelper implements Freemarker
             throw new RuntimeException("Couldn't find given enum type definition with name " + complexTypeReference.getName());
         }
         if(!(typeDefinition instanceof EnumTypeDefinition)) {
-            throw new RuntimeException("Referenced tpye with name " + complexTypeReference.getName() + " is not an enum type");
+            throw new RuntimeException("Referenced type with name " + complexTypeReference.getName() + " is not an enum type");
         }
         EnumTypeDefinition enumTypeDefinition = (EnumTypeDefinition) typeDefinition;
         // Enum types always have simple type references.
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 f18ef00..e75a053 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
@@ -798,7 +798,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
             imports.add("\"math\"");
         }
 
-        imports.add("\"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils\"");
+        imports.add("\"plc4x.apache.org/plc4go/v0/internal/plc4go/utils\"");
 
         // For Constant field: "strconv"
         if(complexTypeDefinition.getFields().stream().anyMatch(field ->
@@ -821,9 +821,9 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
         List<String> imports = new ArrayList<>();
 
         imports.add("\"errors\"");
-        imports.add("\"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/model/values\"");
-        imports.add("\"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils\"");
-        imports.add("api \"plc4x.apache.org/plc4go-modbus-driver/v0/pkg/plc4go/values\"");
+        imports.add("\"plc4x.apache.org/plc4go/v0/internal/plc4go/model/values\"");
+        imports.add("\"plc4x.apache.org/plc4go/v0/internal/plc4go/utils\"");
+        imports.add("api \"plc4x.apache.org/plc4go/v0/pkg/plc4go/values\"");
 
         if(dataIo.getSwitchField().getCases().stream().anyMatch(typeCase ->
             (typeCase.getName().equals("TIME_OF_DAY") && hasFieldsWithNames(typeCase.getFields(), "hour", "minutes", "seconds")) ||
diff --git a/build-utils/language-go/src/main/resources/templates/go/enum-template.ftlh b/build-utils/language-go/src/main/resources/templates/go/enum-template.ftlh
index c01deab..8c38adb 100644
--- a/build-utils/language-go/src/main/resources/templates/go/enum-template.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/enum-template.ftlh
@@ -48,7 +48,7 @@ ${helper.fileName(protocolName, languageName, outputFlavor)?replace(".", "/")}/m
 package model
 
 import (
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 type ${type.name} <#if type.type?has_content>${helper.getLanguageTypeNameForTypeReference(type.type)}<#else>string</#if>
@@ -119,15 +119,21 @@ func (m ${type.name}) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-<#if type.type?has_content>
+<#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) {
-    // TODO: Implement ...
-    return <#if helper.isStringTypeReference(type.type)>""<#else>0</#if>, nil
+    val, err := ${helper.getReadBufferReadMethodCall(helper.getEnumBaseTypeReference(type.typeReference))}
+    if err != nil {
+        return <#if helper.isStringTypeReference(type.type)>""<#else>0</#if>, nil
+    }
+    return ${type.name}ValueOf(val), nil
 }
 
 func (e ${type.name}) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := ${helper.getWriteBufferWriteMethodCall(helper.getEnumBaseTypeReference(type.typeReference), helper.getLanguageTypeNameForTypeReference(helper.getEnumBaseTypeReference(type.typeReference)) + "(e)")}
+    return err
 }
+    </#if>
 </#if>
 </#outputformat>
\ No newline at end of file
diff --git a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
index 6c626bb..323a92a 100644
--- a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
@@ -175,13 +175,13 @@ func New${type.name}(<#list type.getPropertyFields() as field>${field.name} <#if
 </#if>
 }
 
-func Cast${type.name}(structType interface{}) ${type.name} {
-    castFunc := func(typ interface{}) ${type.name} {
+func Cast${type.name}(structType interface{}) *${type.name} {
+    castFunc := func(typ interface{}) *${type.name} {
         if casted, ok := typ.(${type.name}); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*${type.name}); ok {
-            return *casted
+            return casted
         }
     <#if type.parentType?has_content>
         if casted, ok := typ.(${type.parentType.name}); ok {
@@ -191,7 +191,7 @@ func Cast${type.name}(structType interface{}) ${type.name} {
             return Cast${type.name}(casted.Child)
         }
     </#if>
-        return ${type.name}{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/build-utils/language-go/src/main/resources/templates/go/parser-factory-template.ftlh b/build-utils/language-go/src/main/resources/templates/go/parser-factory-template.ftlh
index c32c2c8..15871d1 100644
--- a/build-utils/language-go/src/main/resources/templates/go/parser-factory-template.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/parser-factory-template.ftlh
@@ -64,9 +64,9 @@ package model
 
 import (
     "errors"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/${protocolName}/${outputFlavor?replace("-","")}/model"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/spi"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/${protocolName}/${outputFlavor?replace("-","")}/model"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
 )
 
 type ${protocolName?cap_first}ParserHelper struct {
diff --git a/build-utils/language-go/src/main/resources/templates/go/xml-parser-factory-template.ftlh b/build-utils/language-go/src/main/resources/templates/go/xml-parser-factory-template.ftlh
index 5291804..7d15bac 100644
--- a/build-utils/language-go/src/main/resources/templates/go/xml-parser-factory-template.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/xml-parser-factory-template.ftlh
@@ -65,8 +65,8 @@ package model
 import (
     "encoding/xml"
     "errors"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/${protocolName}/${outputFlavor?replace("-","")}/model"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/spi"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/${protocolName}/${outputFlavor?replace("-","")}/model"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
 )
 
 type ${protocolName?cap_first}XmlParserHelper struct {
diff --git a/plc4go/cmd/main/drivers/knxnetip_test.go b/plc4go/cmd/main/drivers/knxnetip_test.go
index 1a2667a..09e63be 100644
--- a/plc4go/cmd/main/drivers/knxnetip_test.go
+++ b/plc4go/cmd/main/drivers/knxnetip_test.go
@@ -20,7 +20,6 @@ package drivers
 
 import (
     "encoding/hex"
-    "fmt"
     "plc4x.apache.org/plc4go/v0/internal/plc4go/knxnetip"
     "plc4x.apache.org/plc4go/v0/internal/plc4go/knxnetip/readwrite/model"
     "plc4x.apache.org/plc4go/v0/internal/plc4go/transports/udp"
@@ -76,18 +75,18 @@ func TestKnxNetIpPlc4goDriver(t *testing.T) {
     defer connection.Close()
 
     // Prepare a read-request
-    rrb := connection.ReadRequestBuilder()
-    rrb.AddItem("field1", "holding-register:1:REAL")
-    rrb.AddItem("field2", "holding-register:3:REAL")
-    readRequest, err := rrb.Build()
+    srb := connection.SubscriptionRequestBuilder()
+    srb.AddChangeOfStateItem("field1", "*/*/*")
+    srb.AddChangeOfStateItem("field2", "holding-register:3:REAL")
+    subscriptionRequest, err := srb.Build()
     if err != nil {
-        t.Errorf("error preparing read-request: %s", connectionResult.Err.Error())
+        t.Errorf("error preparing subscription-request: %s", connectionResult.Err.Error())
         t.Fail()
         return
     }
 
-    // Execute a read-request
-    rrc := readRequest.Execute()
+    // Execute a subscription-request
+    rrc := subscriptionRequest.Execute()
 
     // Wait for the response to finish
     rrr := <-rrc
@@ -98,7 +97,7 @@ func TestKnxNetIpPlc4goDriver(t *testing.T) {
     }
 
     // Do something with the response
-    value1 := rrr.Response.GetValue("field1")
+    /*value1 := rrr.Response.GetValue("field1")
     value2 := rrr.Response.GetValue("field2")
     fmt.Printf("\n\nResult field1: %f\n", value1.GetFloat32())
     fmt.Printf("\n\nResult field1: %f\n", value2.GetFloat32())
@@ -126,6 +125,6 @@ func TestKnxNetIpPlc4goDriver(t *testing.T) {
     }
 
     fmt.Printf("\n\nResult field1: %d\n", wrr.Response.GetResponseCode("field1"))
-    fmt.Printf("\n\nResult field2: %d\n", wrr.Response.GetResponseCode("field2"))
+    fmt.Printf("\n\nResult field2: %d\n", wrr.Response.GetResponseCode("field2"))*/
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
index e2fac96..bdcc12a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
@@ -57,15 +57,15 @@ func NewAPDU() *APDU {
     return &APDU{}
 }
 
-func CastAPDU(structType interface{}) APDU {
-    castFunc := func(typ interface{}) APDU {
+func CastAPDU(structType interface{}) *APDU {
+    castFunc := func(typ interface{}) *APDU {
         if casted, ok := typ.(APDU); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*APDU); ok {
-            return *casted
+            return casted
         }
-        return APDU{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
index 63499cb..142e83a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
@@ -65,13 +65,13 @@ func NewAPDUAbort(server bool, originalInvokeId uint8, abortReason uint8, ) *APD
     return child.Parent
 }
 
-func CastAPDUAbort(structType interface{}) APDUAbort {
-    castFunc := func(typ interface{}) APDUAbort {
+func CastAPDUAbort(structType interface{}) *APDUAbort {
+    castFunc := func(typ interface{}) *APDUAbort {
         if casted, ok := typ.(APDUAbort); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*APDUAbort); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(APDU); ok {
             return CastAPDUAbort(casted.Child)
@@ -79,7 +79,7 @@ func CastAPDUAbort(structType interface{}) APDUAbort {
         if casted, ok := typ.(*APDU); ok {
             return CastAPDUAbort(casted.Child)
         }
-        return APDUAbort{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
index c334e12..e4f7414 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
@@ -71,13 +71,13 @@ func NewAPDUComplexAck(segmentedMessage bool, moreFollows bool, originalInvokeId
     return child.Parent
 }
 
-func CastAPDUComplexAck(structType interface{}) APDUComplexAck {
-    castFunc := func(typ interface{}) APDUComplexAck {
+func CastAPDUComplexAck(structType interface{}) *APDUComplexAck {
+    castFunc := func(typ interface{}) *APDUComplexAck {
         if casted, ok := typ.(APDUComplexAck); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*APDUComplexAck); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(APDU); ok {
             return CastAPDUComplexAck(casted.Child)
@@ -85,7 +85,7 @@ func CastAPDUComplexAck(structType interface{}) APDUComplexAck {
         if casted, ok := typ.(*APDU); ok {
             return CastAPDUComplexAck(casted.Child)
         }
-        return APDUComplexAck{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
index e49084b..85b248a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
@@ -77,13 +77,13 @@ func NewAPDUConfirmedRequest(segmentedMessage bool, moreFollows bool, segmentedR
     return child.Parent
 }
 
-func CastAPDUConfirmedRequest(structType interface{}) APDUConfirmedRequest {
-    castFunc := func(typ interface{}) APDUConfirmedRequest {
+func CastAPDUConfirmedRequest(structType interface{}) *APDUConfirmedRequest {
+    castFunc := func(typ interface{}) *APDUConfirmedRequest {
         if casted, ok := typ.(APDUConfirmedRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*APDUConfirmedRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(APDU); ok {
             return CastAPDUConfirmedRequest(casted.Child)
@@ -91,7 +91,7 @@ func CastAPDUConfirmedRequest(structType interface{}) APDUConfirmedRequest {
         if casted, ok := typ.(*APDU); ok {
             return CastAPDUConfirmedRequest(casted.Child)
         }
-        return APDUConfirmedRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
index 2937281..0e3290d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
@@ -63,13 +63,13 @@ func NewAPDUError(originalInvokeId uint8, error *BACnetError, ) *APDU {
     return child.Parent
 }
 
-func CastAPDUError(structType interface{}) APDUError {
-    castFunc := func(typ interface{}) APDUError {
+func CastAPDUError(structType interface{}) *APDUError {
+    castFunc := func(typ interface{}) *APDUError {
         if casted, ok := typ.(APDUError); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*APDUError); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(APDU); ok {
             return CastAPDUError(casted.Child)
@@ -77,7 +77,7 @@ func CastAPDUError(structType interface{}) APDUError {
         if casted, ok := typ.(*APDU); ok {
             return CastAPDUError(casted.Child)
         }
-        return APDUError{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
index f8821e7..826ca79 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
@@ -63,13 +63,13 @@ func NewAPDUReject(originalInvokeId uint8, rejectReason uint8, ) *APDU {
     return child.Parent
 }
 
-func CastAPDUReject(structType interface{}) APDUReject {
-    castFunc := func(typ interface{}) APDUReject {
+func CastAPDUReject(structType interface{}) *APDUReject {
+    castFunc := func(typ interface{}) *APDUReject {
         if casted, ok := typ.(APDUReject); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*APDUReject); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(APDU); ok {
             return CastAPDUReject(casted.Child)
@@ -77,7 +77,7 @@ func CastAPDUReject(structType interface{}) APDUReject {
         if casted, ok := typ.(*APDU); ok {
             return CastAPDUReject(casted.Child)
         }
-        return APDUReject{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
index 83e00ee..ecbbe51 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
@@ -69,13 +69,13 @@ func NewAPDUSegmentAck(negativeAck bool, server bool, originalInvokeId uint8, se
     return child.Parent
 }
 
-func CastAPDUSegmentAck(structType interface{}) APDUSegmentAck {
-    castFunc := func(typ interface{}) APDUSegmentAck {
+func CastAPDUSegmentAck(structType interface{}) *APDUSegmentAck {
+    castFunc := func(typ interface{}) *APDUSegmentAck {
         if casted, ok := typ.(APDUSegmentAck); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*APDUSegmentAck); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(APDU); ok {
             return CastAPDUSegmentAck(casted.Child)
@@ -83,7 +83,7 @@ func CastAPDUSegmentAck(structType interface{}) APDUSegmentAck {
         if casted, ok := typ.(*APDU); ok {
             return CastAPDUSegmentAck(casted.Child)
         }
-        return APDUSegmentAck{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
index 8788a31..f196b2e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
@@ -63,13 +63,13 @@ func NewAPDUSimpleAck(originalInvokeId uint8, serviceChoice uint8, ) *APDU {
     return child.Parent
 }
 
-func CastAPDUSimpleAck(structType interface{}) APDUSimpleAck {
-    castFunc := func(typ interface{}) APDUSimpleAck {
+func CastAPDUSimpleAck(structType interface{}) *APDUSimpleAck {
+    castFunc := func(typ interface{}) *APDUSimpleAck {
         if casted, ok := typ.(APDUSimpleAck); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*APDUSimpleAck); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(APDU); ok {
             return CastAPDUSimpleAck(casted.Child)
@@ -77,7 +77,7 @@ func CastAPDUSimpleAck(structType interface{}) APDUSimpleAck {
         if casted, ok := typ.(*APDU); ok {
             return CastAPDUSimpleAck(casted.Child)
         }
-        return APDUSimpleAck{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
index f00baf8..ff94e95 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
@@ -61,13 +61,13 @@ func NewAPDUUnconfirmedRequest(serviceRequest *BACnetUnconfirmedServiceRequest,
     return child.Parent
 }
 
-func CastAPDUUnconfirmedRequest(structType interface{}) APDUUnconfirmedRequest {
-    castFunc := func(typ interface{}) APDUUnconfirmedRequest {
+func CastAPDUUnconfirmedRequest(structType interface{}) *APDUUnconfirmedRequest {
+    castFunc := func(typ interface{}) *APDUUnconfirmedRequest {
         if casted, ok := typ.(APDUUnconfirmedRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*APDUUnconfirmedRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(APDU); ok {
             return CastAPDUUnconfirmedRequest(casted.Child)
@@ -75,7 +75,7 @@ func CastAPDUUnconfirmedRequest(structType interface{}) APDUUnconfirmedRequest {
         if casted, ok := typ.(*APDU); ok {
             return CastAPDUUnconfirmedRequest(casted.Child)
         }
-        return APDUUnconfirmedRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go
index 9766c1c..6467951 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go
@@ -95,11 +95,14 @@ func (m ApplicationTag) LengthInBytes() uint16 {
 }
 
 func ApplicationTagParse(io *utils.ReadBuffer) (ApplicationTag, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadInt8(4)
+    if err != nil {
+        return 0, nil
+    }
+    return ApplicationTagValueOf(val), nil
 }
 
 func (e ApplicationTag) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteInt8(4, int8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
index 5baa0ff..8382fe0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
@@ -44,15 +44,15 @@ func NewBACnetAddress(address []uint8, port uint16) *BACnetAddress {
     return &BACnetAddress{Address: address, Port: port}
 }
 
-func CastBACnetAddress(structType interface{}) BACnetAddress {
-    castFunc := func(typ interface{}) BACnetAddress {
+func CastBACnetAddress(structType interface{}) *BACnetAddress {
+    castFunc := func(typ interface{}) *BACnetAddress {
         if casted, ok := typ.(BACnetAddress); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetAddress); ok {
-            return *casted
+            return casted
         }
-        return BACnetAddress{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
index 2c72e86..63cac27 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
@@ -57,15 +57,15 @@ func NewBACnetConfirmedServiceACK() *BACnetConfirmedServiceACK {
     return &BACnetConfirmedServiceACK{}
 }
 
-func CastBACnetConfirmedServiceACK(structType interface{}) BACnetConfirmedServiceACK {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACK {
+func CastBACnetConfirmedServiceACK(structType interface{}) *BACnetConfirmedServiceACK {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACK {
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
-            return *casted
+            return casted
         }
-        return BACnetConfirmedServiceACK{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
index 63e8b94..9f13eea 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKAtomicReadFile() *BACnetConfirmedServiceACK {
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKAtomicReadFile(structType interface{}) BACnetConfirmedServiceACKAtomicReadFile {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKAtomicReadFile {
+func CastBACnetConfirmedServiceACKAtomicReadFile(structType interface{}) *BACnetConfirmedServiceACKAtomicReadFile {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKAtomicReadFile {
         if casted, ok := typ.(BACnetConfirmedServiceACKAtomicReadFile); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKAtomicReadFile); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKAtomicReadFile(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKAtomicReadFile(structType interface{}) BACnetC
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKAtomicReadFile(casted.Child)
         }
-        return BACnetConfirmedServiceACKAtomicReadFile{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
index c36240a..3c4c070 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKAtomicWriteFile() *BACnetConfirmedServiceACK {
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKAtomicWriteFile(structType interface{}) BACnetConfirmedServiceACKAtomicWriteFile {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKAtomicWriteFile {
+func CastBACnetConfirmedServiceACKAtomicWriteFile(structType interface{}) *BACnetConfirmedServiceACKAtomicWriteFile {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKAtomicWriteFile {
         if casted, ok := typ.(BACnetConfirmedServiceACKAtomicWriteFile); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKAtomicWriteFile); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKAtomicWriteFile(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKAtomicWriteFile(structType interface{}) BACnet
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKAtomicWriteFile(casted.Child)
         }
-        return BACnetConfirmedServiceACKAtomicWriteFile{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
index 55a3169..aa290ae 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKConfirmedPrivateTransfer() *BACnetConfirmedServ
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKConfirmedPrivateTransfer(structType interface{}) BACnetConfirmedServiceACKConfirmedPrivateTransfer {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKConfirmedPrivateTransfer {
+func CastBACnetConfirmedServiceACKConfirmedPrivateTransfer(structType interface{}) *BACnetConfirmedServiceACKConfirmedPrivateTransfer {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKConfirmedPrivateTransfer {
         if casted, ok := typ.(BACnetConfirmedServiceACKConfirmedPrivateTransfer); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKConfirmedPrivateTransfer); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKConfirmedPrivateTransfer(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKConfirmedPrivateTransfer(structType interface{
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKConfirmedPrivateTransfer(casted.Child)
         }
-        return BACnetConfirmedServiceACKConfirmedPrivateTransfer{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
index 29d7362..e95d7eb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKCreateObject() *BACnetConfirmedServiceACK {
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKCreateObject(structType interface{}) BACnetConfirmedServiceACKCreateObject {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKCreateObject {
+func CastBACnetConfirmedServiceACKCreateObject(structType interface{}) *BACnetConfirmedServiceACKCreateObject {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKCreateObject {
         if casted, ok := typ.(BACnetConfirmedServiceACKCreateObject); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKCreateObject); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKCreateObject(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKCreateObject(structType interface{}) BACnetCon
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKCreateObject(casted.Child)
         }
-        return BACnetConfirmedServiceACKCreateObject{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
index a136026..065835a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKGetAlarmSummary() *BACnetConfirmedServiceACK {
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKGetAlarmSummary(structType interface{}) BACnetConfirmedServiceACKGetAlarmSummary {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKGetAlarmSummary {
+func CastBACnetConfirmedServiceACKGetAlarmSummary(structType interface{}) *BACnetConfirmedServiceACKGetAlarmSummary {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKGetAlarmSummary {
         if casted, ok := typ.(BACnetConfirmedServiceACKGetAlarmSummary); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKGetAlarmSummary); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKGetAlarmSummary(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKGetAlarmSummary(structType interface{}) BACnet
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKGetAlarmSummary(casted.Child)
         }
-        return BACnetConfirmedServiceACKGetAlarmSummary{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
index f7b61f3..2e5cc88 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKGetEnrollmentSummary() *BACnetConfirmedServiceA
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKGetEnrollmentSummary(structType interface{}) BACnetConfirmedServiceACKGetEnrollmentSummary {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKGetEnrollmentSummary {
+func CastBACnetConfirmedServiceACKGetEnrollmentSummary(structType interface{}) *BACnetConfirmedServiceACKGetEnrollmentSummary {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKGetEnrollmentSummary {
         if casted, ok := typ.(BACnetConfirmedServiceACKGetEnrollmentSummary); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKGetEnrollmentSummary); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKGetEnrollmentSummary(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKGetEnrollmentSummary(structType interface{}) B
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKGetEnrollmentSummary(casted.Child)
         }
-        return BACnetConfirmedServiceACKGetEnrollmentSummary{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
index 4766f15..7396633 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKGetEventInformation() *BACnetConfirmedServiceAC
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKGetEventInformation(structType interface{}) BACnetConfirmedServiceACKGetEventInformation {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKGetEventInformation {
+func CastBACnetConfirmedServiceACKGetEventInformation(structType interface{}) *BACnetConfirmedServiceACKGetEventInformation {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKGetEventInformation {
         if casted, ok := typ.(BACnetConfirmedServiceACKGetEventInformation); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKGetEventInformation); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKGetEventInformation(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKGetEventInformation(structType interface{}) BA
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKGetEventInformation(casted.Child)
         }
-        return BACnetConfirmedServiceACKGetEventInformation{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
index c815c3b..dbc87ce 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKReadProperty() *BACnetConfirmedServiceACK {
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKReadProperty(structType interface{}) BACnetConfirmedServiceACKReadProperty {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKReadProperty {
+func CastBACnetConfirmedServiceACKReadProperty(structType interface{}) *BACnetConfirmedServiceACKReadProperty {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKReadProperty {
         if casted, ok := typ.(BACnetConfirmedServiceACKReadProperty); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKReadProperty); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKReadProperty(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKReadProperty(structType interface{}) BACnetCon
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKReadProperty(casted.Child)
         }
-        return BACnetConfirmedServiceACKReadProperty{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
index 3aa6d86..fdda40d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKReadPropertyMultiple() *BACnetConfirmedServiceA
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKReadPropertyMultiple(structType interface{}) BACnetConfirmedServiceACKReadPropertyMultiple {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKReadPropertyMultiple {
+func CastBACnetConfirmedServiceACKReadPropertyMultiple(structType interface{}) *BACnetConfirmedServiceACKReadPropertyMultiple {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKReadPropertyMultiple {
         if casted, ok := typ.(BACnetConfirmedServiceACKReadPropertyMultiple); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKReadPropertyMultiple); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKReadPropertyMultiple(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKReadPropertyMultiple(structType interface{}) B
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKReadPropertyMultiple(casted.Child)
         }
-        return BACnetConfirmedServiceACKReadPropertyMultiple{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
index afa5dc2..4d3b154 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKReadRange() *BACnetConfirmedServiceACK {
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKReadRange(structType interface{}) BACnetConfirmedServiceACKReadRange {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKReadRange {
+func CastBACnetConfirmedServiceACKReadRange(structType interface{}) *BACnetConfirmedServiceACKReadRange {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKReadRange {
         if casted, ok := typ.(BACnetConfirmedServiceACKReadRange); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKReadRange); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKReadRange(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKReadRange(structType interface{}) BACnetConfir
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKReadRange(casted.Child)
         }
-        return BACnetConfirmedServiceACKReadRange{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
index 74e8327..3204e47 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKRemovedAuthenticate() *BACnetConfirmedServiceAC
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKRemovedAuthenticate(structType interface{}) BACnetConfirmedServiceACKRemovedAuthenticate {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKRemovedAuthenticate {
+func CastBACnetConfirmedServiceACKRemovedAuthenticate(structType interface{}) *BACnetConfirmedServiceACKRemovedAuthenticate {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKRemovedAuthenticate {
         if casted, ok := typ.(BACnetConfirmedServiceACKRemovedAuthenticate); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKRemovedAuthenticate); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKRemovedAuthenticate(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKRemovedAuthenticate(structType interface{}) BA
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKRemovedAuthenticate(casted.Child)
         }
-        return BACnetConfirmedServiceACKRemovedAuthenticate{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
index 837e08f..1a35e6c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKRemovedReadPropertyConditional() *BACnetConfirm
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKRemovedReadPropertyConditional(structType interface{}) BACnetConfirmedServiceACKRemovedReadPropertyConditional {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKRemovedReadPropertyConditional {
+func CastBACnetConfirmedServiceACKRemovedReadPropertyConditional(structType interface{}) *BACnetConfirmedServiceACKRemovedReadPropertyConditional {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKRemovedReadPropertyConditional {
         if casted, ok := typ.(BACnetConfirmedServiceACKRemovedReadPropertyConditional); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKRemovedReadPropertyConditional); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKRemovedReadPropertyConditional(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKRemovedReadPropertyConditional(structType inte
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKRemovedReadPropertyConditional(casted.Child)
         }
-        return BACnetConfirmedServiceACKRemovedReadPropertyConditional{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
index b0894b1..0b11a43 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKVTData() *BACnetConfirmedServiceACK {
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKVTData(structType interface{}) BACnetConfirmedServiceACKVTData {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKVTData {
+func CastBACnetConfirmedServiceACKVTData(structType interface{}) *BACnetConfirmedServiceACKVTData {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKVTData {
         if casted, ok := typ.(BACnetConfirmedServiceACKVTData); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKVTData); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKVTData(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKVTData(structType interface{}) BACnetConfirmed
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKVTData(casted.Child)
         }
-        return BACnetConfirmedServiceACKVTData{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
index c512f64..8041a85 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceACKVTOpen() *BACnetConfirmedServiceACK {
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceACKVTOpen(structType interface{}) BACnetConfirmedServiceACKVTOpen {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceACKVTOpen {
+func CastBACnetConfirmedServiceACKVTOpen(structType interface{}) *BACnetConfirmedServiceACKVTOpen {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceACKVTOpen {
         if casted, ok := typ.(BACnetConfirmedServiceACKVTOpen); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceACKVTOpen); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKVTOpen(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceACKVTOpen(structType interface{}) BACnetConfirmed
         if casted, ok := typ.(*BACnetConfirmedServiceACK); ok {
             return CastBACnetConfirmedServiceACKVTOpen(casted.Child)
         }
-        return BACnetConfirmedServiceACKVTOpen{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
index 1eeefee..45805b1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
@@ -57,15 +57,15 @@ func NewBACnetConfirmedServiceRequest() *BACnetConfirmedServiceRequest {
     return &BACnetConfirmedServiceRequest{}
 }
 
-func CastBACnetConfirmedServiceRequest(structType interface{}) BACnetConfirmedServiceRequest {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequest {
+func CastBACnetConfirmedServiceRequest(structType interface{}) *BACnetConfirmedServiceRequest {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequest {
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
-            return *casted
+            return casted
         }
-        return BACnetConfirmedServiceRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
index 405bf8f..726852d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestAcknowledgeAlarm() *BACnetConfirmedServiceR
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestAcknowledgeAlarm(structType interface{}) BACnetConfirmedServiceRequestAcknowledgeAlarm {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestAcknowledgeAlarm {
+func CastBACnetConfirmedServiceRequestAcknowledgeAlarm(structType interface{}) *BACnetConfirmedServiceRequestAcknowledgeAlarm {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestAcknowledgeAlarm {
         if casted, ok := typ.(BACnetConfirmedServiceRequestAcknowledgeAlarm); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestAcknowledgeAlarm); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestAcknowledgeAlarm(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestAcknowledgeAlarm(structType interface{}) B
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestAcknowledgeAlarm(casted.Child)
         }
-        return BACnetConfirmedServiceRequestAcknowledgeAlarm{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
index 2cb69a0..2698347 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestAddListElement() *BACnetConfirmedServiceReq
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestAddListElement(structType interface{}) BACnetConfirmedServiceRequestAddListElement {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestAddListElement {
+func CastBACnetConfirmedServiceRequestAddListElement(structType interface{}) *BACnetConfirmedServiceRequestAddListElement {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestAddListElement {
         if casted, ok := typ.(BACnetConfirmedServiceRequestAddListElement); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestAddListElement); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestAddListElement(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestAddListElement(structType interface{}) BAC
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestAddListElement(casted.Child)
         }
-        return BACnetConfirmedServiceRequestAddListElement{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
index 36cae7e..c4293f8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestAtomicReadFile() *BACnetConfirmedServiceReq
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestAtomicReadFile(structType interface{}) BACnetConfirmedServiceRequestAtomicReadFile {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestAtomicReadFile {
+func CastBACnetConfirmedServiceRequestAtomicReadFile(structType interface{}) *BACnetConfirmedServiceRequestAtomicReadFile {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestAtomicReadFile {
         if casted, ok := typ.(BACnetConfirmedServiceRequestAtomicReadFile); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestAtomicReadFile); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestAtomicReadFile(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestAtomicReadFile(structType interface{}) BAC
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestAtomicReadFile(casted.Child)
         }
-        return BACnetConfirmedServiceRequestAtomicReadFile{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
index 9c7b685..36bcc1f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestAtomicWriteFile() *BACnetConfirmedServiceRe
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestAtomicWriteFile(structType interface{}) BACnetConfirmedServiceRequestAtomicWriteFile {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestAtomicWriteFile {
+func CastBACnetConfirmedServiceRequestAtomicWriteFile(structType interface{}) *BACnetConfirmedServiceRequestAtomicWriteFile {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestAtomicWriteFile {
         if casted, ok := typ.(BACnetConfirmedServiceRequestAtomicWriteFile); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestAtomicWriteFile); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestAtomicWriteFile(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestAtomicWriteFile(structType interface{}) BA
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestAtomicWriteFile(casted.Child)
         }
-        return BACnetConfirmedServiceRequestAtomicWriteFile{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
index 2de3cef..aa70489 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
@@ -84,13 +84,13 @@ func NewBACnetConfirmedServiceRequestConfirmedCOVNotification(subscriberProcessI
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestConfirmedCOVNotification(structType interface{}) BACnetConfirmedServiceRequestConfirmedCOVNotification {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestConfirmedCOVNotification {
+func CastBACnetConfirmedServiceRequestConfirmedCOVNotification(structType interface{}) *BACnetConfirmedServiceRequestConfirmedCOVNotification {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestConfirmedCOVNotification {
         if casted, ok := typ.(BACnetConfirmedServiceRequestConfirmedCOVNotification); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestConfirmedCOVNotification); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestConfirmedCOVNotification(casted.Child)
@@ -98,7 +98,7 @@ func CastBACnetConfirmedServiceRequestConfirmedCOVNotification(structType interf
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestConfirmedCOVNotification(casted.Child)
         }
-        return BACnetConfirmedServiceRequestConfirmedCOVNotification{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
index 5967c09..d2c1d3c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple() *BACnetC
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(structType interface{}) BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple {
+func CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(structType interface{}) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple {
         if casted, ok := typ.(BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(structTyp
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(casted.Child)
         }
-        return BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
index 95b5e3b..6afcbd3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestConfirmedEventNotification() *BACnetConfirm
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestConfirmedEventNotification(structType interface{}) BACnetConfirmedServiceRequestConfirmedEventNotification {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestConfirmedEventNotification {
+func CastBACnetConfirmedServiceRequestConfirmedEventNotification(structType interface{}) *BACnetConfirmedServiceRequestConfirmedEventNotification {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestConfirmedEventNotification {
         if casted, ok := typ.(BACnetConfirmedServiceRequestConfirmedEventNotification); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestConfirmedEventNotification); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestConfirmedEventNotification(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestConfirmedEventNotification(structType inte
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestConfirmedEventNotification(casted.Child)
         }
-        return BACnetConfirmedServiceRequestConfirmedEventNotification{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
index 09716dd..1d9ac8a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestConfirmedPrivateTransfer() *BACnetConfirmed
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestConfirmedPrivateTransfer(structType interface{}) BACnetConfirmedServiceRequestConfirmedPrivateTransfer {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestConfirmedPrivateTransfer {
+func CastBACnetConfirmedServiceRequestConfirmedPrivateTransfer(structType interface{}) *BACnetConfirmedServiceRequestConfirmedPrivateTransfer {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestConfirmedPrivateTransfer {
         if casted, ok := typ.(BACnetConfirmedServiceRequestConfirmedPrivateTransfer); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestConfirmedPrivateTransfer); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestConfirmedPrivateTransfer(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestConfirmedPrivateTransfer(structType interf
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestConfirmedPrivateTransfer(casted.Child)
         }
-        return BACnetConfirmedServiceRequestConfirmedPrivateTransfer{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
index 24cfb5a..fd37235 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestConfirmedTextMessage() *BACnetConfirmedServ
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestConfirmedTextMessage(structType interface{}) BACnetConfirmedServiceRequestConfirmedTextMessage {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestConfirmedTextMessage {
+func CastBACnetConfirmedServiceRequestConfirmedTextMessage(structType interface{}) *BACnetConfirmedServiceRequestConfirmedTextMessage {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestConfirmedTextMessage {
         if casted, ok := typ.(BACnetConfirmedServiceRequestConfirmedTextMessage); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestConfirmedTextMessage); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestConfirmedTextMessage(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestConfirmedTextMessage(structType interface{
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestConfirmedTextMessage(casted.Child)
         }
-        return BACnetConfirmedServiceRequestConfirmedTextMessage{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
index c67a760..543556e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestCreateObject() *BACnetConfirmedServiceReque
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestCreateObject(structType interface{}) BACnetConfirmedServiceRequestCreateObject {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestCreateObject {
+func CastBACnetConfirmedServiceRequestCreateObject(structType interface{}) *BACnetConfirmedServiceRequestCreateObject {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestCreateObject {
         if casted, ok := typ.(BACnetConfirmedServiceRequestCreateObject); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestCreateObject); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestCreateObject(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestCreateObject(structType interface{}) BACne
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestCreateObject(casted.Child)
         }
-        return BACnetConfirmedServiceRequestCreateObject{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
index 3657e53..2637a77 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestDeleteObject() *BACnetConfirmedServiceReque
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestDeleteObject(structType interface{}) BACnetConfirmedServiceRequestDeleteObject {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestDeleteObject {
+func CastBACnetConfirmedServiceRequestDeleteObject(structType interface{}) *BACnetConfirmedServiceRequestDeleteObject {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestDeleteObject {
         if casted, ok := typ.(BACnetConfirmedServiceRequestDeleteObject); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestDeleteObject); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestDeleteObject(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestDeleteObject(structType interface{}) BACne
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestDeleteObject(casted.Child)
         }
-        return BACnetConfirmedServiceRequestDeleteObject{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
index d3e7730..783fae3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestDeviceCommunicationControl() *BACnetConfirm
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestDeviceCommunicationControl(structType interface{}) BACnetConfirmedServiceRequestDeviceCommunicationControl {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestDeviceCommunicationControl {
+func CastBACnetConfirmedServiceRequestDeviceCommunicationControl(structType interface{}) *BACnetConfirmedServiceRequestDeviceCommunicationControl {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestDeviceCommunicationControl {
         if casted, ok := typ.(BACnetConfirmedServiceRequestDeviceCommunicationControl); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestDeviceCommunicationControl); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestDeviceCommunicationControl(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestDeviceCommunicationControl(structType inte
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestDeviceCommunicationControl(casted.Child)
         }
-        return BACnetConfirmedServiceRequestDeviceCommunicationControl{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
index 98fc99f..c79741a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestGetEnrollmentSummary() *BACnetConfirmedServ
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestGetEnrollmentSummary(structType interface{}) BACnetConfirmedServiceRequestGetEnrollmentSummary {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestGetEnrollmentSummary {
+func CastBACnetConfirmedServiceRequestGetEnrollmentSummary(structType interface{}) *BACnetConfirmedServiceRequestGetEnrollmentSummary {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestGetEnrollmentSummary {
         if casted, ok := typ.(BACnetConfirmedServiceRequestGetEnrollmentSummary); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestGetEnrollmentSummary); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestGetEnrollmentSummary(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestGetEnrollmentSummary(structType interface{
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestGetEnrollmentSummary(casted.Child)
         }
-        return BACnetConfirmedServiceRequestGetEnrollmentSummary{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
index b1c324d..29af954 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestGetEventInformation() *BACnetConfirmedServi
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestGetEventInformation(structType interface{}) BACnetConfirmedServiceRequestGetEventInformation {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestGetEventInformation {
+func CastBACnetConfirmedServiceRequestGetEventInformation(structType interface{}) *BACnetConfirmedServiceRequestGetEventInformation {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestGetEventInformation {
         if casted, ok := typ.(BACnetConfirmedServiceRequestGetEventInformation); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestGetEventInformation); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestGetEventInformation(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestGetEventInformation(structType interface{}
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestGetEventInformation(casted.Child)
         }
-        return BACnetConfirmedServiceRequestGetEventInformation{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
index cffb4d8..0b12fbf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestLifeSafetyOperation() *BACnetConfirmedServi
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestLifeSafetyOperation(structType interface{}) BACnetConfirmedServiceRequestLifeSafetyOperation {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestLifeSafetyOperation {
+func CastBACnetConfirmedServiceRequestLifeSafetyOperation(structType interface{}) *BACnetConfirmedServiceRequestLifeSafetyOperation {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestLifeSafetyOperation {
         if casted, ok := typ.(BACnetConfirmedServiceRequestLifeSafetyOperation); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestLifeSafetyOperation); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestLifeSafetyOperation(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestLifeSafetyOperation(structType interface{}
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestLifeSafetyOperation(casted.Child)
         }
-        return BACnetConfirmedServiceRequestLifeSafetyOperation{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
index 4704e60..1245a20 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
@@ -72,13 +72,13 @@ func NewBACnetConfirmedServiceRequestReadProperty(objectType uint16, objectInsta
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestReadProperty(structType interface{}) BACnetConfirmedServiceRequestReadProperty {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestReadProperty {
+func CastBACnetConfirmedServiceRequestReadProperty(structType interface{}) *BACnetConfirmedServiceRequestReadProperty {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestReadProperty {
         if casted, ok := typ.(BACnetConfirmedServiceRequestReadProperty); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestReadProperty); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestReadProperty(casted.Child)
@@ -86,7 +86,7 @@ func CastBACnetConfirmedServiceRequestReadProperty(structType interface{}) BACne
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestReadProperty(casted.Child)
         }
-        return BACnetConfirmedServiceRequestReadProperty{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
index 2d96b7d..df50239 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestReadPropertyMultiple() *BACnetConfirmedServ
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestReadPropertyMultiple(structType interface{}) BACnetConfirmedServiceRequestReadPropertyMultiple {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestReadPropertyMultiple {
+func CastBACnetConfirmedServiceRequestReadPropertyMultiple(structType interface{}) *BACnetConfirmedServiceRequestReadPropertyMultiple {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestReadPropertyMultiple {
         if casted, ok := typ.(BACnetConfirmedServiceRequestReadPropertyMultiple); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestReadPropertyMultiple); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestReadPropertyMultiple(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestReadPropertyMultiple(structType interface{
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestReadPropertyMultiple(casted.Child)
         }
-        return BACnetConfirmedServiceRequestReadPropertyMultiple{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
index 378391d..668e4f6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestReadRange() *BACnetConfirmedServiceRequest
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestReadRange(structType interface{}) BACnetConfirmedServiceRequestReadRange {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestReadRange {
+func CastBACnetConfirmedServiceRequestReadRange(structType interface{}) *BACnetConfirmedServiceRequestReadRange {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestReadRange {
         if casted, ok := typ.(BACnetConfirmedServiceRequestReadRange); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestReadRange); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestReadRange(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestReadRange(structType interface{}) BACnetCo
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestReadRange(casted.Child)
         }
-        return BACnetConfirmedServiceRequestReadRange{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
index 73f7994..fdf3c11 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestReinitializeDevice() *BACnetConfirmedServic
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestReinitializeDevice(structType interface{}) BACnetConfirmedServiceRequestReinitializeDevice {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestReinitializeDevice {
+func CastBACnetConfirmedServiceRequestReinitializeDevice(structType interface{}) *BACnetConfirmedServiceRequestReinitializeDevice {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestReinitializeDevice {
         if casted, ok := typ.(BACnetConfirmedServiceRequestReinitializeDevice); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestReinitializeDevice); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestReinitializeDevice(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestReinitializeDevice(structType interface{})
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestReinitializeDevice(casted.Child)
         }
-        return BACnetConfirmedServiceRequestReinitializeDevice{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
index 9673554..83126ed 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestRemoveListElement() *BACnetConfirmedService
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestRemoveListElement(structType interface{}) BACnetConfirmedServiceRequestRemoveListElement {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestRemoveListElement {
+func CastBACnetConfirmedServiceRequestRemoveListElement(structType interface{}) *BACnetConfirmedServiceRequestRemoveListElement {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestRemoveListElement {
         if casted, ok := typ.(BACnetConfirmedServiceRequestRemoveListElement); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestRemoveListElement); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestRemoveListElement(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestRemoveListElement(structType interface{})
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestRemoveListElement(casted.Child)
         }
-        return BACnetConfirmedServiceRequestRemoveListElement{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
index db1d878..c196e2c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestRemovedAuthenticate() *BACnetConfirmedServi
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestRemovedAuthenticate(structType interface{}) BACnetConfirmedServiceRequestRemovedAuthenticate {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestRemovedAuthenticate {
+func CastBACnetConfirmedServiceRequestRemovedAuthenticate(structType interface{}) *BACnetConfirmedServiceRequestRemovedAuthenticate {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestRemovedAuthenticate {
         if casted, ok := typ.(BACnetConfirmedServiceRequestRemovedAuthenticate); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestRemovedAuthenticate); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestRemovedAuthenticate(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestRemovedAuthenticate(structType interface{}
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestRemovedAuthenticate(casted.Child)
         }
-        return BACnetConfirmedServiceRequestRemovedAuthenticate{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
index 125465a..2243bcc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestRemovedReadPropertyConditional() *BACnetCon
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestRemovedReadPropertyConditional(structType interface{}) BACnetConfirmedServiceRequestRemovedReadPropertyConditional {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestRemovedReadPropertyConditional {
+func CastBACnetConfirmedServiceRequestRemovedReadPropertyConditional(structType interface{}) *BACnetConfirmedServiceRequestRemovedReadPropertyConditional {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestRemovedReadPropertyConditional {
         if casted, ok := typ.(BACnetConfirmedServiceRequestRemovedReadPropertyConditional); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestRemovedReadPropertyConditional); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestRemovedReadPropertyConditional(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestRemovedReadPropertyConditional(structType
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestRemovedReadPropertyConditional(casted.Child)
         }
-        return BACnetConfirmedServiceRequestRemovedReadPropertyConditional{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
index a072cb6..536c408 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestRemovedRequestKey() *BACnetConfirmedService
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestRemovedRequestKey(structType interface{}) BACnetConfirmedServiceRequestRemovedRequestKey {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestRemovedRequestKey {
+func CastBACnetConfirmedServiceRequestRemovedRequestKey(structType interface{}) *BACnetConfirmedServiceRequestRemovedRequestKey {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestRemovedRequestKey {
         if casted, ok := typ.(BACnetConfirmedServiceRequestRemovedRequestKey); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestRemovedRequestKey); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestRemovedRequestKey(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestRemovedRequestKey(structType interface{})
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestRemovedRequestKey(casted.Child)
         }
-        return BACnetConfirmedServiceRequestRemovedRequestKey{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
index 4bf19d6..40f13e4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
@@ -79,13 +79,13 @@ func NewBACnetConfirmedServiceRequestSubscribeCOV(subscriberProcessIdentifier ui
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestSubscribeCOV(structType interface{}) BACnetConfirmedServiceRequestSubscribeCOV {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestSubscribeCOV {
+func CastBACnetConfirmedServiceRequestSubscribeCOV(structType interface{}) *BACnetConfirmedServiceRequestSubscribeCOV {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestSubscribeCOV {
         if casted, ok := typ.(BACnetConfirmedServiceRequestSubscribeCOV); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestSubscribeCOV); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestSubscribeCOV(casted.Child)
@@ -93,7 +93,7 @@ func CastBACnetConfirmedServiceRequestSubscribeCOV(structType interface{}) BACne
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestSubscribeCOV(casted.Child)
         }
-        return BACnetConfirmedServiceRequestSubscribeCOV{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
index 3172f89..ab916d1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestSubscribeCOVProperty() *BACnetConfirmedServ
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestSubscribeCOVProperty(structType interface{}) BACnetConfirmedServiceRequestSubscribeCOVProperty {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestSubscribeCOVProperty {
+func CastBACnetConfirmedServiceRequestSubscribeCOVProperty(structType interface{}) *BACnetConfirmedServiceRequestSubscribeCOVProperty {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestSubscribeCOVProperty {
         if casted, ok := typ.(BACnetConfirmedServiceRequestSubscribeCOVProperty); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestSubscribeCOVProperty); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestSubscribeCOVProperty(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestSubscribeCOVProperty(structType interface{
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestSubscribeCOVProperty(casted.Child)
         }
-        return BACnetConfirmedServiceRequestSubscribeCOVProperty{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
index 44d0fdc..9083a0f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple() *BACnetConfi
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(structType interface{}) BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple {
+func CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(structType interface{}) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple {
         if casted, ok := typ.(BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(structType in
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(casted.Child)
         }
-        return BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
index f591758..b0de321 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestVTClose() *BACnetConfirmedServiceRequest {
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestVTClose(structType interface{}) BACnetConfirmedServiceRequestVTClose {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestVTClose {
+func CastBACnetConfirmedServiceRequestVTClose(structType interface{}) *BACnetConfirmedServiceRequestVTClose {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestVTClose {
         if casted, ok := typ.(BACnetConfirmedServiceRequestVTClose); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestVTClose); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestVTClose(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestVTClose(structType interface{}) BACnetConf
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestVTClose(casted.Child)
         }
-        return BACnetConfirmedServiceRequestVTClose{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
index 8780e32..27613e9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestVTData() *BACnetConfirmedServiceRequest {
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestVTData(structType interface{}) BACnetConfirmedServiceRequestVTData {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestVTData {
+func CastBACnetConfirmedServiceRequestVTData(structType interface{}) *BACnetConfirmedServiceRequestVTData {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestVTData {
         if casted, ok := typ.(BACnetConfirmedServiceRequestVTData); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestVTData); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestVTData(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestVTData(structType interface{}) BACnetConfi
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestVTData(casted.Child)
         }
-        return BACnetConfirmedServiceRequestVTData{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
index dc362da..2ce2f59 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestVTOpen() *BACnetConfirmedServiceRequest {
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestVTOpen(structType interface{}) BACnetConfirmedServiceRequestVTOpen {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestVTOpen {
+func CastBACnetConfirmedServiceRequestVTOpen(structType interface{}) *BACnetConfirmedServiceRequestVTOpen {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestVTOpen {
         if casted, ok := typ.(BACnetConfirmedServiceRequestVTOpen); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestVTOpen); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestVTOpen(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestVTOpen(structType interface{}) BACnetConfi
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestVTOpen(casted.Child)
         }
-        return BACnetConfirmedServiceRequestVTOpen{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
index e9a0de7..bf22764 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
@@ -78,13 +78,13 @@ func NewBACnetConfirmedServiceRequestWriteProperty(objectType uint16, objectInst
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestWriteProperty(structType interface{}) BACnetConfirmedServiceRequestWriteProperty {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestWriteProperty {
+func CastBACnetConfirmedServiceRequestWriteProperty(structType interface{}) *BACnetConfirmedServiceRequestWriteProperty {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestWriteProperty {
         if casted, ok := typ.(BACnetConfirmedServiceRequestWriteProperty); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestWriteProperty); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestWriteProperty(casted.Child)
@@ -92,7 +92,7 @@ func CastBACnetConfirmedServiceRequestWriteProperty(structType interface{}) BACn
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestWriteProperty(casted.Child)
         }
-        return BACnetConfirmedServiceRequestWriteProperty{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
index b6a5727..3a9de76 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
@@ -57,13 +57,13 @@ func NewBACnetConfirmedServiceRequestWritePropertyMultiple() *BACnetConfirmedSer
     return child.Parent
 }
 
-func CastBACnetConfirmedServiceRequestWritePropertyMultiple(structType interface{}) BACnetConfirmedServiceRequestWritePropertyMultiple {
-    castFunc := func(typ interface{}) BACnetConfirmedServiceRequestWritePropertyMultiple {
+func CastBACnetConfirmedServiceRequestWritePropertyMultiple(structType interface{}) *BACnetConfirmedServiceRequestWritePropertyMultiple {
+    castFunc := func(typ interface{}) *BACnetConfirmedServiceRequestWritePropertyMultiple {
         if casted, ok := typ.(BACnetConfirmedServiceRequestWritePropertyMultiple); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetConfirmedServiceRequestWritePropertyMultiple); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestWritePropertyMultiple(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetConfirmedServiceRequestWritePropertyMultiple(structType interface
         if casted, ok := typ.(*BACnetConfirmedServiceRequest); ok {
             return CastBACnetConfirmedServiceRequestWritePropertyMultiple(casted.Child)
         }
-        return BACnetConfirmedServiceRequestWritePropertyMultiple{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
index b6c4af7..a980da4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
@@ -57,15 +57,15 @@ func NewBACnetError() *BACnetError {
     return &BACnetError{}
 }
 
-func CastBACnetError(structType interface{}) BACnetError {
-    castFunc := func(typ interface{}) BACnetError {
+func CastBACnetError(structType interface{}) *BACnetError {
+    castFunc := func(typ interface{}) *BACnetError {
         if casted, ok := typ.(BACnetError); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetError); ok {
-            return *casted
+            return casted
         }
-        return BACnetError{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
index 1870b4d..5bbf023 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
@@ -57,13 +57,13 @@ func NewBACnetErrorAtomicReadFile() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorAtomicReadFile(structType interface{}) BACnetErrorAtomicReadFile {
-    castFunc := func(typ interface{}) BACnetErrorAtomicReadFile {
+func CastBACnetErrorAtomicReadFile(structType interface{}) *BACnetErrorAtomicReadFile {
+    castFunc := func(typ interface{}) *BACnetErrorAtomicReadFile {
         if casted, ok := typ.(BACnetErrorAtomicReadFile); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorAtomicReadFile); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorAtomicReadFile(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorAtomicReadFile(structType interface{}) BACnetErrorAtomicRead
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorAtomicReadFile(casted.Child)
         }
-        return BACnetErrorAtomicReadFile{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
index 84e70a9..07c7fa6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
@@ -57,13 +57,13 @@ func NewBACnetErrorAtomicWriteFile() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorAtomicWriteFile(structType interface{}) BACnetErrorAtomicWriteFile {
-    castFunc := func(typ interface{}) BACnetErrorAtomicWriteFile {
+func CastBACnetErrorAtomicWriteFile(structType interface{}) *BACnetErrorAtomicWriteFile {
+    castFunc := func(typ interface{}) *BACnetErrorAtomicWriteFile {
         if casted, ok := typ.(BACnetErrorAtomicWriteFile); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorAtomicWriteFile); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorAtomicWriteFile(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorAtomicWriteFile(structType interface{}) BACnetErrorAtomicWri
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorAtomicWriteFile(casted.Child)
         }
-        return BACnetErrorAtomicWriteFile{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
index 7a4a946..ccd87af 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
@@ -57,13 +57,13 @@ func NewBACnetErrorConfirmedPrivateTransfer() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorConfirmedPrivateTransfer(structType interface{}) BACnetErrorConfirmedPrivateTransfer {
-    castFunc := func(typ interface{}) BACnetErrorConfirmedPrivateTransfer {
+func CastBACnetErrorConfirmedPrivateTransfer(structType interface{}) *BACnetErrorConfirmedPrivateTransfer {
+    castFunc := func(typ interface{}) *BACnetErrorConfirmedPrivateTransfer {
         if casted, ok := typ.(BACnetErrorConfirmedPrivateTransfer); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorConfirmedPrivateTransfer); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorConfirmedPrivateTransfer(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorConfirmedPrivateTransfer(structType interface{}) BACnetError
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorConfirmedPrivateTransfer(casted.Child)
         }
-        return BACnetErrorConfirmedPrivateTransfer{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
index 44d5a79..9feb830 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
@@ -57,13 +57,13 @@ func NewBACnetErrorCreateObject() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorCreateObject(structType interface{}) BACnetErrorCreateObject {
-    castFunc := func(typ interface{}) BACnetErrorCreateObject {
+func CastBACnetErrorCreateObject(structType interface{}) *BACnetErrorCreateObject {
+    castFunc := func(typ interface{}) *BACnetErrorCreateObject {
         if casted, ok := typ.(BACnetErrorCreateObject); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorCreateObject); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorCreateObject(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorCreateObject(structType interface{}) BACnetErrorCreateObject
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorCreateObject(casted.Child)
         }
-        return BACnetErrorCreateObject{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
index 6f4651c..4238a07 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
@@ -57,13 +57,13 @@ func NewBACnetErrorGetAlarmSummary() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorGetAlarmSummary(structType interface{}) BACnetErrorGetAlarmSummary {
-    castFunc := func(typ interface{}) BACnetErrorGetAlarmSummary {
+func CastBACnetErrorGetAlarmSummary(structType interface{}) *BACnetErrorGetAlarmSummary {
+    castFunc := func(typ interface{}) *BACnetErrorGetAlarmSummary {
         if casted, ok := typ.(BACnetErrorGetAlarmSummary); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorGetAlarmSummary); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorGetAlarmSummary(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorGetAlarmSummary(structType interface{}) BACnetErrorGetAlarmS
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorGetAlarmSummary(casted.Child)
         }
-        return BACnetErrorGetAlarmSummary{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
index 07772fc..3d7bda3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
@@ -57,13 +57,13 @@ func NewBACnetErrorGetEnrollmentSummary() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorGetEnrollmentSummary(structType interface{}) BACnetErrorGetEnrollmentSummary {
-    castFunc := func(typ interface{}) BACnetErrorGetEnrollmentSummary {
+func CastBACnetErrorGetEnrollmentSummary(structType interface{}) *BACnetErrorGetEnrollmentSummary {
+    castFunc := func(typ interface{}) *BACnetErrorGetEnrollmentSummary {
         if casted, ok := typ.(BACnetErrorGetEnrollmentSummary); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorGetEnrollmentSummary); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorGetEnrollmentSummary(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorGetEnrollmentSummary(structType interface{}) BACnetErrorGetE
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorGetEnrollmentSummary(casted.Child)
         }
-        return BACnetErrorGetEnrollmentSummary{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
index 095f3b2..c0a355c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
@@ -57,13 +57,13 @@ func NewBACnetErrorGetEventInformation() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorGetEventInformation(structType interface{}) BACnetErrorGetEventInformation {
-    castFunc := func(typ interface{}) BACnetErrorGetEventInformation {
+func CastBACnetErrorGetEventInformation(structType interface{}) *BACnetErrorGetEventInformation {
+    castFunc := func(typ interface{}) *BACnetErrorGetEventInformation {
         if casted, ok := typ.(BACnetErrorGetEventInformation); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorGetEventInformation); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorGetEventInformation(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorGetEventInformation(structType interface{}) BACnetErrorGetEv
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorGetEventInformation(casted.Child)
         }
-        return BACnetErrorGetEventInformation{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
index 39d6aa6..8506062 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
@@ -72,13 +72,13 @@ func NewBACnetErrorReadProperty(errorClassLength uint8, errorClass []int8, error
     return child.Parent
 }
 
-func CastBACnetErrorReadProperty(structType interface{}) BACnetErrorReadProperty {
-    castFunc := func(typ interface{}) BACnetErrorReadProperty {
+func CastBACnetErrorReadProperty(structType interface{}) *BACnetErrorReadProperty {
+    castFunc := func(typ interface{}) *BACnetErrorReadProperty {
         if casted, ok := typ.(BACnetErrorReadProperty); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorReadProperty); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorReadProperty(casted.Child)
@@ -86,7 +86,7 @@ func CastBACnetErrorReadProperty(structType interface{}) BACnetErrorReadProperty
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorReadProperty(casted.Child)
         }
-        return BACnetErrorReadProperty{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
index 9defcdf..06daf4c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
@@ -57,13 +57,13 @@ func NewBACnetErrorReadPropertyMultiple() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorReadPropertyMultiple(structType interface{}) BACnetErrorReadPropertyMultiple {
-    castFunc := func(typ interface{}) BACnetErrorReadPropertyMultiple {
+func CastBACnetErrorReadPropertyMultiple(structType interface{}) *BACnetErrorReadPropertyMultiple {
+    castFunc := func(typ interface{}) *BACnetErrorReadPropertyMultiple {
         if casted, ok := typ.(BACnetErrorReadPropertyMultiple); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorReadPropertyMultiple); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorReadPropertyMultiple(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorReadPropertyMultiple(structType interface{}) BACnetErrorRead
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorReadPropertyMultiple(casted.Child)
         }
-        return BACnetErrorReadPropertyMultiple{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
index ab99f44..21ab2e0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
@@ -57,13 +57,13 @@ func NewBACnetErrorReadRange() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorReadRange(structType interface{}) BACnetErrorReadRange {
-    castFunc := func(typ interface{}) BACnetErrorReadRange {
+func CastBACnetErrorReadRange(structType interface{}) *BACnetErrorReadRange {
+    castFunc := func(typ interface{}) *BACnetErrorReadRange {
         if casted, ok := typ.(BACnetErrorReadRange); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorReadRange); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorReadRange(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorReadRange(structType interface{}) BACnetErrorReadRange {
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorReadRange(casted.Child)
         }
-        return BACnetErrorReadRange{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
index 13b0cbb..35b7d54 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
@@ -57,13 +57,13 @@ func NewBACnetErrorRemovedAuthenticate() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorRemovedAuthenticate(structType interface{}) BACnetErrorRemovedAuthenticate {
-    castFunc := func(typ interface{}) BACnetErrorRemovedAuthenticate {
+func CastBACnetErrorRemovedAuthenticate(structType interface{}) *BACnetErrorRemovedAuthenticate {
+    castFunc := func(typ interface{}) *BACnetErrorRemovedAuthenticate {
         if casted, ok := typ.(BACnetErrorRemovedAuthenticate); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorRemovedAuthenticate); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorRemovedAuthenticate(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorRemovedAuthenticate(structType interface{}) BACnetErrorRemov
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorRemovedAuthenticate(casted.Child)
         }
-        return BACnetErrorRemovedAuthenticate{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
index ec6285c..d5adb7b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
@@ -57,13 +57,13 @@ func NewBACnetErrorRemovedReadPropertyConditional() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorRemovedReadPropertyConditional(structType interface{}) BACnetErrorRemovedReadPropertyConditional {
-    castFunc := func(typ interface{}) BACnetErrorRemovedReadPropertyConditional {
+func CastBACnetErrorRemovedReadPropertyConditional(structType interface{}) *BACnetErrorRemovedReadPropertyConditional {
+    castFunc := func(typ interface{}) *BACnetErrorRemovedReadPropertyConditional {
         if casted, ok := typ.(BACnetErrorRemovedReadPropertyConditional); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorRemovedReadPropertyConditional); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorRemovedReadPropertyConditional(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorRemovedReadPropertyConditional(structType interface{}) BACne
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorRemovedReadPropertyConditional(casted.Child)
         }
-        return BACnetErrorRemovedReadPropertyConditional{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
index 9621635..3a4d034 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
@@ -57,13 +57,13 @@ func NewBACnetErrorVTData() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorVTData(structType interface{}) BACnetErrorVTData {
-    castFunc := func(typ interface{}) BACnetErrorVTData {
+func CastBACnetErrorVTData(structType interface{}) *BACnetErrorVTData {
+    castFunc := func(typ interface{}) *BACnetErrorVTData {
         if casted, ok := typ.(BACnetErrorVTData); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorVTData); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorVTData(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorVTData(structType interface{}) BACnetErrorVTData {
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorVTData(casted.Child)
         }
-        return BACnetErrorVTData{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
index 58b6a5a..687bdad 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
@@ -57,13 +57,13 @@ func NewBACnetErrorVTOpen() *BACnetError {
     return child.Parent
 }
 
-func CastBACnetErrorVTOpen(structType interface{}) BACnetErrorVTOpen {
-    castFunc := func(typ interface{}) BACnetErrorVTOpen {
+func CastBACnetErrorVTOpen(structType interface{}) *BACnetErrorVTOpen {
+    castFunc := func(typ interface{}) *BACnetErrorVTOpen {
         if casted, ok := typ.(BACnetErrorVTOpen); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetErrorVTOpen); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetError); ok {
             return CastBACnetErrorVTOpen(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetErrorVTOpen(structType interface{}) BACnetErrorVTOpen {
         if casted, ok := typ.(*BACnetError); ok {
             return CastBACnetErrorVTOpen(casted.Child)
         }
-        return BACnetErrorVTOpen{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go
index 6ef07fb..d23be0f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go
@@ -89,11 +89,14 @@ func (m BACnetNetworkType) LengthInBytes() uint16 {
 }
 
 func BACnetNetworkTypeParse(io *utils.ReadBuffer) (BACnetNetworkType, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(4)
+    if err != nil {
+        return 0, nil
+    }
+    return BACnetNetworkTypeValueOf(val), nil
 }
 
 func (e BACnetNetworkType) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(4, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go
index cf3ebbb..3e0258e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go
@@ -122,11 +122,14 @@ func (m BACnetNodeType) LengthInBytes() uint16 {
 }
 
 func BACnetNodeTypeParse(io *utils.ReadBuffer) (BACnetNodeType, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(8)
+    if err != nil {
+        return 0, nil
+    }
+    return BACnetNodeTypeValueOf(val), nil
 }
 
 func (e BACnetNodeType) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(8, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
index 5cbc228..cb5f81f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
@@ -65,11 +65,14 @@ func (m BACnetNotifyType) LengthInBytes() uint16 {
 }
 
 func BACnetNotifyTypeParse(io *utils.ReadBuffer) (BACnetNotifyType, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(4)
+    if err != nil {
+        return 0, nil
+    }
+    return BACnetNotifyTypeValueOf(val), nil
 }
 
 func (e BACnetNotifyType) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(4, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go
index 69dbbc8..5f677ff 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go
@@ -233,11 +233,14 @@ func (m BACnetObjectType) LengthInBytes() uint16 {
 }
 
 func BACnetObjectTypeParse(io *utils.ReadBuffer) (BACnetObjectType, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint16(10)
+    if err != nil {
+        return 0, nil
+    }
+    return BACnetObjectTypeValueOf(val), nil
 }
 
 func (e BACnetObjectType) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint16(10, uint16(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
index c4e6e1f..9788f05 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
@@ -57,15 +57,15 @@ func NewBACnetServiceAck() *BACnetServiceAck {
     return &BACnetServiceAck{}
 }
 
-func CastBACnetServiceAck(structType interface{}) BACnetServiceAck {
-    castFunc := func(typ interface{}) BACnetServiceAck {
+func CastBACnetServiceAck(structType interface{}) *BACnetServiceAck {
+    castFunc := func(typ interface{}) *BACnetServiceAck {
         if casted, ok := typ.(BACnetServiceAck); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAck); ok {
-            return *casted
+            return casted
         }
-        return BACnetServiceAck{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
index eb572d5..8e06a99 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckAtomicReadFile() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckAtomicReadFile(structType interface{}) BACnetServiceAckAtomicReadFile {
-    castFunc := func(typ interface{}) BACnetServiceAckAtomicReadFile {
+func CastBACnetServiceAckAtomicReadFile(structType interface{}) *BACnetServiceAckAtomicReadFile {
+    castFunc := func(typ interface{}) *BACnetServiceAckAtomicReadFile {
         if casted, ok := typ.(BACnetServiceAckAtomicReadFile); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckAtomicReadFile); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckAtomicReadFile(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckAtomicReadFile(structType interface{}) BACnetServiceAck
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckAtomicReadFile(casted.Child)
         }
-        return BACnetServiceAckAtomicReadFile{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
index 1c731ad..0ffde0f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckAtomicWriteFile() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckAtomicWriteFile(structType interface{}) BACnetServiceAckAtomicWriteFile {
-    castFunc := func(typ interface{}) BACnetServiceAckAtomicWriteFile {
+func CastBACnetServiceAckAtomicWriteFile(structType interface{}) *BACnetServiceAckAtomicWriteFile {
+    castFunc := func(typ interface{}) *BACnetServiceAckAtomicWriteFile {
         if casted, ok := typ.(BACnetServiceAckAtomicWriteFile); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckAtomicWriteFile); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckAtomicWriteFile(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckAtomicWriteFile(structType interface{}) BACnetServiceAc
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckAtomicWriteFile(casted.Child)
         }
-        return BACnetServiceAckAtomicWriteFile{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
index 73fcc59..339c867 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckConfirmedPrivateTransfer() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckConfirmedPrivateTransfer(structType interface{}) BACnetServiceAckConfirmedPrivateTransfer {
-    castFunc := func(typ interface{}) BACnetServiceAckConfirmedPrivateTransfer {
+func CastBACnetServiceAckConfirmedPrivateTransfer(structType interface{}) *BACnetServiceAckConfirmedPrivateTransfer {
+    castFunc := func(typ interface{}) *BACnetServiceAckConfirmedPrivateTransfer {
         if casted, ok := typ.(BACnetServiceAckConfirmedPrivateTransfer); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckConfirmedPrivateTransfer); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckConfirmedPrivateTransfer(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckConfirmedPrivateTransfer(structType interface{}) BACnet
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckConfirmedPrivateTransfer(casted.Child)
         }
-        return BACnetServiceAckConfirmedPrivateTransfer{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
index d29fe14..abf12db 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckCreateObject() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckCreateObject(structType interface{}) BACnetServiceAckCreateObject {
-    castFunc := func(typ interface{}) BACnetServiceAckCreateObject {
+func CastBACnetServiceAckCreateObject(structType interface{}) *BACnetServiceAckCreateObject {
+    castFunc := func(typ interface{}) *BACnetServiceAckCreateObject {
         if casted, ok := typ.(BACnetServiceAckCreateObject); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckCreateObject); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckCreateObject(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckCreateObject(structType interface{}) BACnetServiceAckCr
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckCreateObject(casted.Child)
         }
-        return BACnetServiceAckCreateObject{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
index 6f4c089..9cf78a2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckGetAlarmSummary() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckGetAlarmSummary(structType interface{}) BACnetServiceAckGetAlarmSummary {
-    castFunc := func(typ interface{}) BACnetServiceAckGetAlarmSummary {
+func CastBACnetServiceAckGetAlarmSummary(structType interface{}) *BACnetServiceAckGetAlarmSummary {
+    castFunc := func(typ interface{}) *BACnetServiceAckGetAlarmSummary {
         if casted, ok := typ.(BACnetServiceAckGetAlarmSummary); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckGetAlarmSummary); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckGetAlarmSummary(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckGetAlarmSummary(structType interface{}) BACnetServiceAc
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckGetAlarmSummary(casted.Child)
         }
-        return BACnetServiceAckGetAlarmSummary{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
index 923c9f6..72d0302 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckGetEnrollmentSummary() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckGetEnrollmentSummary(structType interface{}) BACnetServiceAckGetEnrollmentSummary {
-    castFunc := func(typ interface{}) BACnetServiceAckGetEnrollmentSummary {
+func CastBACnetServiceAckGetEnrollmentSummary(structType interface{}) *BACnetServiceAckGetEnrollmentSummary {
+    castFunc := func(typ interface{}) *BACnetServiceAckGetEnrollmentSummary {
         if casted, ok := typ.(BACnetServiceAckGetEnrollmentSummary); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckGetEnrollmentSummary); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckGetEnrollmentSummary(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckGetEnrollmentSummary(structType interface{}) BACnetServ
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckGetEnrollmentSummary(casted.Child)
         }
-        return BACnetServiceAckGetEnrollmentSummary{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
index cd72d4f..69a469a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckGetEventInformation() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckGetEventInformation(structType interface{}) BACnetServiceAckGetEventInformation {
-    castFunc := func(typ interface{}) BACnetServiceAckGetEventInformation {
+func CastBACnetServiceAckGetEventInformation(structType interface{}) *BACnetServiceAckGetEventInformation {
+    castFunc := func(typ interface{}) *BACnetServiceAckGetEventInformation {
         if casted, ok := typ.(BACnetServiceAckGetEventInformation); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckGetEventInformation); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckGetEventInformation(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckGetEventInformation(structType interface{}) BACnetServi
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckGetEventInformation(casted.Child)
         }
-        return BACnetServiceAckGetEventInformation{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
index bdedfb8..f5acad9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
@@ -76,13 +76,13 @@ func NewBACnetServiceAckReadProperty(objectType uint16, objectInstanceNumber uin
     return child.Parent
 }
 
-func CastBACnetServiceAckReadProperty(structType interface{}) BACnetServiceAckReadProperty {
-    castFunc := func(typ interface{}) BACnetServiceAckReadProperty {
+func CastBACnetServiceAckReadProperty(structType interface{}) *BACnetServiceAckReadProperty {
+    castFunc := func(typ interface{}) *BACnetServiceAckReadProperty {
         if casted, ok := typ.(BACnetServiceAckReadProperty); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckReadProperty); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckReadProperty(casted.Child)
@@ -90,7 +90,7 @@ func CastBACnetServiceAckReadProperty(structType interface{}) BACnetServiceAckRe
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckReadProperty(casted.Child)
         }
-        return BACnetServiceAckReadProperty{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
index 7a4551f..4add0d5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckReadPropertyMultiple() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckReadPropertyMultiple(structType interface{}) BACnetServiceAckReadPropertyMultiple {
-    castFunc := func(typ interface{}) BACnetServiceAckReadPropertyMultiple {
+func CastBACnetServiceAckReadPropertyMultiple(structType interface{}) *BACnetServiceAckReadPropertyMultiple {
+    castFunc := func(typ interface{}) *BACnetServiceAckReadPropertyMultiple {
         if casted, ok := typ.(BACnetServiceAckReadPropertyMultiple); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckReadPropertyMultiple); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckReadPropertyMultiple(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckReadPropertyMultiple(structType interface{}) BACnetServ
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckReadPropertyMultiple(casted.Child)
         }
-        return BACnetServiceAckReadPropertyMultiple{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
index 3871c9d..ae76381 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckReadRange() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckReadRange(structType interface{}) BACnetServiceAckReadRange {
-    castFunc := func(typ interface{}) BACnetServiceAckReadRange {
+func CastBACnetServiceAckReadRange(structType interface{}) *BACnetServiceAckReadRange {
+    castFunc := func(typ interface{}) *BACnetServiceAckReadRange {
         if casted, ok := typ.(BACnetServiceAckReadRange); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckReadRange); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckReadRange(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckReadRange(structType interface{}) BACnetServiceAckReadR
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckReadRange(casted.Child)
         }
-        return BACnetServiceAckReadRange{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
index 6c8b40d..6b3a7c3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckRemovedAuthenticate() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckRemovedAuthenticate(structType interface{}) BACnetServiceAckRemovedAuthenticate {
-    castFunc := func(typ interface{}) BACnetServiceAckRemovedAuthenticate {
+func CastBACnetServiceAckRemovedAuthenticate(structType interface{}) *BACnetServiceAckRemovedAuthenticate {
+    castFunc := func(typ interface{}) *BACnetServiceAckRemovedAuthenticate {
         if casted, ok := typ.(BACnetServiceAckRemovedAuthenticate); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckRemovedAuthenticate); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckRemovedAuthenticate(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckRemovedAuthenticate(structType interface{}) BACnetServi
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckRemovedAuthenticate(casted.Child)
         }
-        return BACnetServiceAckRemovedAuthenticate{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
index a5819b1..7557f5d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckRemovedReadPropertyConditional() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckRemovedReadPropertyConditional(structType interface{}) BACnetServiceAckRemovedReadPropertyConditional {
-    castFunc := func(typ interface{}) BACnetServiceAckRemovedReadPropertyConditional {
+func CastBACnetServiceAckRemovedReadPropertyConditional(structType interface{}) *BACnetServiceAckRemovedReadPropertyConditional {
+    castFunc := func(typ interface{}) *BACnetServiceAckRemovedReadPropertyConditional {
         if casted, ok := typ.(BACnetServiceAckRemovedReadPropertyConditional); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckRemovedReadPropertyConditional); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckRemovedReadPropertyConditional(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckRemovedReadPropertyConditional(structType interface{})
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckRemovedReadPropertyConditional(casted.Child)
         }
-        return BACnetServiceAckRemovedReadPropertyConditional{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
index a292f3f..d1d10ae 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckVTData() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckVTData(structType interface{}) BACnetServiceAckVTData {
-    castFunc := func(typ interface{}) BACnetServiceAckVTData {
+func CastBACnetServiceAckVTData(structType interface{}) *BACnetServiceAckVTData {
+    castFunc := func(typ interface{}) *BACnetServiceAckVTData {
         if casted, ok := typ.(BACnetServiceAckVTData); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckVTData); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckVTData(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckVTData(structType interface{}) BACnetServiceAckVTData {
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckVTData(casted.Child)
         }
-        return BACnetServiceAckVTData{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
index 8a5b87c..40edf1e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
@@ -57,13 +57,13 @@ func NewBACnetServiceAckVTOpen() *BACnetServiceAck {
     return child.Parent
 }
 
-func CastBACnetServiceAckVTOpen(structType interface{}) BACnetServiceAckVTOpen {
-    castFunc := func(typ interface{}) BACnetServiceAckVTOpen {
+func CastBACnetServiceAckVTOpen(structType interface{}) *BACnetServiceAckVTOpen {
+    castFunc := func(typ interface{}) *BACnetServiceAckVTOpen {
         if casted, ok := typ.(BACnetServiceAckVTOpen); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetServiceAckVTOpen); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetServiceAck); ok {
             return CastBACnetServiceAckVTOpen(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetServiceAckVTOpen(structType interface{}) BACnetServiceAckVTOpen {
         if casted, ok := typ.(*BACnetServiceAck); ok {
             return CastBACnetServiceAckVTOpen(casted.Child)
         }
-        return BACnetServiceAckVTOpen{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
index bff70e5..2ebe2be 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
@@ -61,15 +61,15 @@ func NewBACnetTag(typeOrTagNumber uint8, lengthValueType uint8, extTagNumber *ui
     return &BACnetTag{TypeOrTagNumber: typeOrTagNumber, LengthValueType: lengthValueType, ExtTagNumber: extTagNumber, ExtLength: extLength}
 }
 
-func CastBACnetTag(structType interface{}) BACnetTag {
-    castFunc := func(typ interface{}) BACnetTag {
+func CastBACnetTag(structType interface{}) *BACnetTag {
+    castFunc := func(typ interface{}) *BACnetTag {
         if casted, ok := typ.(BACnetTag); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTag); ok {
-            return *casted
+            return casted
         }
-        return BACnetTag{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
index 984c9b6..71464b4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
@@ -67,13 +67,13 @@ func NewBACnetTagApplicationBitString(unusedBits uint8, data []int8, typeOrTagNu
     return child.Parent
 }
 
-func CastBACnetTagApplicationBitString(structType interface{}) BACnetTagApplicationBitString {
-    castFunc := func(typ interface{}) BACnetTagApplicationBitString {
+func CastBACnetTagApplicationBitString(structType interface{}) *BACnetTagApplicationBitString {
+    castFunc := func(typ interface{}) *BACnetTagApplicationBitString {
         if casted, ok := typ.(BACnetTagApplicationBitString); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationBitString); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationBitString(casted.Child)
@@ -81,7 +81,7 @@ func CastBACnetTagApplicationBitString(structType interface{}) BACnetTagApplicat
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationBitString(casted.Child)
         }
-        return BACnetTagApplicationBitString{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
index 472ebc8..77a75bf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
@@ -61,13 +61,13 @@ func NewBACnetTagApplicationBoolean(typeOrTagNumber uint8, lengthValueType uint8
     return child.Parent
 }
 
-func CastBACnetTagApplicationBoolean(structType interface{}) BACnetTagApplicationBoolean {
-    castFunc := func(typ interface{}) BACnetTagApplicationBoolean {
+func CastBACnetTagApplicationBoolean(structType interface{}) *BACnetTagApplicationBoolean {
+    castFunc := func(typ interface{}) *BACnetTagApplicationBoolean {
         if casted, ok := typ.(BACnetTagApplicationBoolean); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationBoolean); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationBoolean(casted.Child)
@@ -75,7 +75,7 @@ func CastBACnetTagApplicationBoolean(structType interface{}) BACnetTagApplicatio
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationBoolean(casted.Child)
         }
-        return BACnetTagApplicationBoolean{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
index 3a117dd..83dae35 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
@@ -61,13 +61,13 @@ func NewBACnetTagApplicationCharacterString(typeOrTagNumber uint8, lengthValueTy
     return child.Parent
 }
 
-func CastBACnetTagApplicationCharacterString(structType interface{}) BACnetTagApplicationCharacterString {
-    castFunc := func(typ interface{}) BACnetTagApplicationCharacterString {
+func CastBACnetTagApplicationCharacterString(structType interface{}) *BACnetTagApplicationCharacterString {
+    castFunc := func(typ interface{}) *BACnetTagApplicationCharacterString {
         if casted, ok := typ.(BACnetTagApplicationCharacterString); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationCharacterString); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationCharacterString(casted.Child)
@@ -75,7 +75,7 @@ func CastBACnetTagApplicationCharacterString(structType interface{}) BACnetTagAp
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationCharacterString(casted.Child)
         }
-        return BACnetTagApplicationCharacterString{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
index 629358b..9ef032c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
@@ -61,13 +61,13 @@ func NewBACnetTagApplicationDate(typeOrTagNumber uint8, lengthValueType uint8, e
     return child.Parent
 }
 
-func CastBACnetTagApplicationDate(structType interface{}) BACnetTagApplicationDate {
-    castFunc := func(typ interface{}) BACnetTagApplicationDate {
+func CastBACnetTagApplicationDate(structType interface{}) *BACnetTagApplicationDate {
+    castFunc := func(typ interface{}) *BACnetTagApplicationDate {
         if casted, ok := typ.(BACnetTagApplicationDate); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationDate); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationDate(casted.Child)
@@ -75,7 +75,7 @@ func CastBACnetTagApplicationDate(structType interface{}) BACnetTagApplicationDa
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationDate(casted.Child)
         }
-        return BACnetTagApplicationDate{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
index f03c848..ad396a4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
@@ -64,13 +64,13 @@ func NewBACnetTagApplicationDouble(value float64, typeOrTagNumber uint8, lengthV
     return child.Parent
 }
 
-func CastBACnetTagApplicationDouble(structType interface{}) BACnetTagApplicationDouble {
-    castFunc := func(typ interface{}) BACnetTagApplicationDouble {
+func CastBACnetTagApplicationDouble(structType interface{}) *BACnetTagApplicationDouble {
+    castFunc := func(typ interface{}) *BACnetTagApplicationDouble {
         if casted, ok := typ.(BACnetTagApplicationDouble); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationDouble); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationDouble(casted.Child)
@@ -78,7 +78,7 @@ func CastBACnetTagApplicationDouble(structType interface{}) BACnetTagApplication
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationDouble(casted.Child)
         }
-        return BACnetTagApplicationDouble{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
index e077ba8..699aad0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
@@ -65,13 +65,13 @@ func NewBACnetTagApplicationEnumerated(data []int8, typeOrTagNumber uint8, lengt
     return child.Parent
 }
 
-func CastBACnetTagApplicationEnumerated(structType interface{}) BACnetTagApplicationEnumerated {
-    castFunc := func(typ interface{}) BACnetTagApplicationEnumerated {
+func CastBACnetTagApplicationEnumerated(structType interface{}) *BACnetTagApplicationEnumerated {
+    castFunc := func(typ interface{}) *BACnetTagApplicationEnumerated {
         if casted, ok := typ.(BACnetTagApplicationEnumerated); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationEnumerated); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationEnumerated(casted.Child)
@@ -79,7 +79,7 @@ func CastBACnetTagApplicationEnumerated(structType interface{}) BACnetTagApplica
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationEnumerated(casted.Child)
         }
-        return BACnetTagApplicationEnumerated{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
index d5db62b..76b1abf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
@@ -61,13 +61,13 @@ func NewBACnetTagApplicationNull(typeOrTagNumber uint8, lengthValueType uint8, e
     return child.Parent
 }
 
-func CastBACnetTagApplicationNull(structType interface{}) BACnetTagApplicationNull {
-    castFunc := func(typ interface{}) BACnetTagApplicationNull {
+func CastBACnetTagApplicationNull(structType interface{}) *BACnetTagApplicationNull {
+    castFunc := func(typ interface{}) *BACnetTagApplicationNull {
         if casted, ok := typ.(BACnetTagApplicationNull); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationNull); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationNull(casted.Child)
@@ -75,7 +75,7 @@ func CastBACnetTagApplicationNull(structType interface{}) BACnetTagApplicationNu
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationNull(casted.Child)
         }
-        return BACnetTagApplicationNull{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
index 3345abc..62b65d5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
@@ -61,13 +61,13 @@ func NewBACnetTagApplicationObjectIdentifier(typeOrTagNumber uint8, lengthValueT
     return child.Parent
 }
 
-func CastBACnetTagApplicationObjectIdentifier(structType interface{}) BACnetTagApplicationObjectIdentifier {
-    castFunc := func(typ interface{}) BACnetTagApplicationObjectIdentifier {
+func CastBACnetTagApplicationObjectIdentifier(structType interface{}) *BACnetTagApplicationObjectIdentifier {
+    castFunc := func(typ interface{}) *BACnetTagApplicationObjectIdentifier {
         if casted, ok := typ.(BACnetTagApplicationObjectIdentifier); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationObjectIdentifier); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationObjectIdentifier(casted.Child)
@@ -75,7 +75,7 @@ func CastBACnetTagApplicationObjectIdentifier(structType interface{}) BACnetTagA
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationObjectIdentifier(casted.Child)
         }
-        return BACnetTagApplicationObjectIdentifier{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
index a50d6e6..78f762c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
@@ -61,13 +61,13 @@ func NewBACnetTagApplicationOctetString(typeOrTagNumber uint8, lengthValueType u
     return child.Parent
 }
 
-func CastBACnetTagApplicationOctetString(structType interface{}) BACnetTagApplicationOctetString {
-    castFunc := func(typ interface{}) BACnetTagApplicationOctetString {
+func CastBACnetTagApplicationOctetString(structType interface{}) *BACnetTagApplicationOctetString {
+    castFunc := func(typ interface{}) *BACnetTagApplicationOctetString {
         if casted, ok := typ.(BACnetTagApplicationOctetString); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationOctetString); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationOctetString(casted.Child)
@@ -75,7 +75,7 @@ func CastBACnetTagApplicationOctetString(structType interface{}) BACnetTagApplic
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationOctetString(casted.Child)
         }
-        return BACnetTagApplicationOctetString{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
index c7023d5..fe18b28 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
@@ -64,13 +64,13 @@ func NewBACnetTagApplicationReal(value float32, typeOrTagNumber uint8, lengthVal
     return child.Parent
 }
 
-func CastBACnetTagApplicationReal(structType interface{}) BACnetTagApplicationReal {
-    castFunc := func(typ interface{}) BACnetTagApplicationReal {
+func CastBACnetTagApplicationReal(structType interface{}) *BACnetTagApplicationReal {
+    castFunc := func(typ interface{}) *BACnetTagApplicationReal {
         if casted, ok := typ.(BACnetTagApplicationReal); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationReal); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationReal(casted.Child)
@@ -78,7 +78,7 @@ func CastBACnetTagApplicationReal(structType interface{}) BACnetTagApplicationRe
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationReal(casted.Child)
         }
-        return BACnetTagApplicationReal{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
index a4027f8..7742fad 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
@@ -65,13 +65,13 @@ func NewBACnetTagApplicationSignedInteger(data []int8, typeOrTagNumber uint8, le
     return child.Parent
 }
 
-func CastBACnetTagApplicationSignedInteger(structType interface{}) BACnetTagApplicationSignedInteger {
-    castFunc := func(typ interface{}) BACnetTagApplicationSignedInteger {
+func CastBACnetTagApplicationSignedInteger(structType interface{}) *BACnetTagApplicationSignedInteger {
+    castFunc := func(typ interface{}) *BACnetTagApplicationSignedInteger {
         if casted, ok := typ.(BACnetTagApplicationSignedInteger); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationSignedInteger); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationSignedInteger(casted.Child)
@@ -79,7 +79,7 @@ func CastBACnetTagApplicationSignedInteger(structType interface{}) BACnetTagAppl
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationSignedInteger(casted.Child)
         }
-        return BACnetTagApplicationSignedInteger{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go
index ec490bd..af62106 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go
@@ -61,13 +61,13 @@ func NewBACnetTagApplicationTime(typeOrTagNumber uint8, lengthValueType uint8, e
     return child.Parent
 }
 
-func CastBACnetTagApplicationTime(structType interface{}) BACnetTagApplicationTime {
-    castFunc := func(typ interface{}) BACnetTagApplicationTime {
+func CastBACnetTagApplicationTime(structType interface{}) *BACnetTagApplicationTime {
+    castFunc := func(typ interface{}) *BACnetTagApplicationTime {
         if casted, ok := typ.(BACnetTagApplicationTime); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationTime); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationTime(casted.Child)
@@ -75,7 +75,7 @@ func CastBACnetTagApplicationTime(structType interface{}) BACnetTagApplicationTi
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationTime(casted.Child)
         }
-        return BACnetTagApplicationTime{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
index a3cffb6..d0a1286 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
@@ -65,13 +65,13 @@ func NewBACnetTagApplicationUnsignedInteger(data []int8, typeOrTagNumber uint8,
     return child.Parent
 }
 
-func CastBACnetTagApplicationUnsignedInteger(structType interface{}) BACnetTagApplicationUnsignedInteger {
-    castFunc := func(typ interface{}) BACnetTagApplicationUnsignedInteger {
+func CastBACnetTagApplicationUnsignedInteger(structType interface{}) *BACnetTagApplicationUnsignedInteger {
+    castFunc := func(typ interface{}) *BACnetTagApplicationUnsignedInteger {
         if casted, ok := typ.(BACnetTagApplicationUnsignedInteger); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagApplicationUnsignedInteger); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagApplicationUnsignedInteger(casted.Child)
@@ -79,7 +79,7 @@ func CastBACnetTagApplicationUnsignedInteger(structType interface{}) BACnetTagAp
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagApplicationUnsignedInteger(casted.Child)
         }
-        return BACnetTagApplicationUnsignedInteger{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
index 090949c..d7a6a19 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
@@ -65,13 +65,13 @@ func NewBACnetTagContext(data []int8, typeOrTagNumber uint8, lengthValueType uin
     return child.Parent
 }
 
-func CastBACnetTagContext(structType interface{}) BACnetTagContext {
-    castFunc := func(typ interface{}) BACnetTagContext {
+func CastBACnetTagContext(structType interface{}) *BACnetTagContext {
+    castFunc := func(typ interface{}) *BACnetTagContext {
         if casted, ok := typ.(BACnetTagContext); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagContext); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetTag); ok {
             return CastBACnetTagContext(casted.Child)
@@ -79,7 +79,7 @@ func CastBACnetTagContext(structType interface{}) BACnetTagContext {
         if casted, ok := typ.(*BACnetTag); ok {
             return CastBACnetTagContext(casted.Child)
         }
-        return BACnetTagContext{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go
index 164f33e..429621a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go
@@ -54,15 +54,15 @@ func NewBACnetTagWithContent(typeOrTagNumber uint8, contextSpecificTag uint8, le
     return &BACnetTagWithContent{TypeOrTagNumber: typeOrTagNumber, ContextSpecificTag: contextSpecificTag, LengthValueType: lengthValueType, ExtTagNumber: extTagNumber, ExtLength: extLength, PropertyIdentifier: propertyIdentifier, Value: value}
 }
 
-func CastBACnetTagWithContent(structType interface{}) BACnetTagWithContent {
-    castFunc := func(typ interface{}) BACnetTagWithContent {
+func CastBACnetTagWithContent(structType interface{}) *BACnetTagWithContent {
+    castFunc := func(typ interface{}) *BACnetTagWithContent {
         if casted, ok := typ.(BACnetTagWithContent); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetTagWithContent); ok {
-            return *casted
+            return casted
         }
-        return BACnetTagWithContent{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
index 14117c8..eb16edc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
@@ -57,15 +57,15 @@ func NewBACnetUnconfirmedServiceRequest() *BACnetUnconfirmedServiceRequest {
     return &BACnetUnconfirmedServiceRequest{}
 }
 
-func CastBACnetUnconfirmedServiceRequest(structType interface{}) BACnetUnconfirmedServiceRequest {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequest {
+func CastBACnetUnconfirmedServiceRequest(structType interface{}) *BACnetUnconfirmedServiceRequest {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequest {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
-            return *casted
+            return casted
         }
-        return BACnetUnconfirmedServiceRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
index f4e2463..0b58373 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
@@ -78,13 +78,13 @@ func NewBACnetUnconfirmedServiceRequestIAm(objectType uint16, objectInstanceNumb
     return child.Parent
 }
 
-func CastBACnetUnconfirmedServiceRequestIAm(structType interface{}) BACnetUnconfirmedServiceRequestIAm {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequestIAm {
+func CastBACnetUnconfirmedServiceRequestIAm(structType interface{}) *BACnetUnconfirmedServiceRequestIAm {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestIAm {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequestIAm); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequestIAm); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestIAm(casted.Child)
@@ -92,7 +92,7 @@ func CastBACnetUnconfirmedServiceRequestIAm(structType interface{}) BACnetUnconf
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestIAm(casted.Child)
         }
-        return BACnetUnconfirmedServiceRequestIAm{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
index a75d0cd..e23612f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
@@ -57,13 +57,13 @@ func NewBACnetUnconfirmedServiceRequestIHave() *BACnetUnconfirmedServiceRequest
     return child.Parent
 }
 
-func CastBACnetUnconfirmedServiceRequestIHave(structType interface{}) BACnetUnconfirmedServiceRequestIHave {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequestIHave {
+func CastBACnetUnconfirmedServiceRequestIHave(structType interface{}) *BACnetUnconfirmedServiceRequestIHave {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestIHave {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequestIHave); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequestIHave); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestIHave(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetUnconfirmedServiceRequestIHave(structType interface{}) BACnetUnco
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestIHave(casted.Child)
         }
-        return BACnetUnconfirmedServiceRequestIHave{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
index 0094f86..ae3e82a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
@@ -57,13 +57,13 @@ func NewBACnetUnconfirmedServiceRequestTimeSynchronization() *BACnetUnconfirmedS
     return child.Parent
 }
 
-func CastBACnetUnconfirmedServiceRequestTimeSynchronization(structType interface{}) BACnetUnconfirmedServiceRequestTimeSynchronization {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequestTimeSynchronization {
+func CastBACnetUnconfirmedServiceRequestTimeSynchronization(structType interface{}) *BACnetUnconfirmedServiceRequestTimeSynchronization {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestTimeSynchronization {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequestTimeSynchronization); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequestTimeSynchronization); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestTimeSynchronization(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetUnconfirmedServiceRequestTimeSynchronization(structType interface
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestTimeSynchronization(casted.Child)
         }
-        return BACnetUnconfirmedServiceRequestTimeSynchronization{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
index 1bedadf..59385b8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
@@ -57,13 +57,13 @@ func NewBACnetUnconfirmedServiceRequestUTCTimeSynchronization() *BACnetUnconfirm
     return child.Parent
 }
 
-func CastBACnetUnconfirmedServiceRequestUTCTimeSynchronization(structType interface{}) BACnetUnconfirmedServiceRequestUTCTimeSynchronization {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequestUTCTimeSynchronization {
+func CastBACnetUnconfirmedServiceRequestUTCTimeSynchronization(structType interface{}) *BACnetUnconfirmedServiceRequestUTCTimeSynchronization {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestUTCTimeSynchronization {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequestUTCTimeSynchronization); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequestUTCTimeSynchronization); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestUTCTimeSynchronization(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetUnconfirmedServiceRequestUTCTimeSynchronization(structType interf
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestUTCTimeSynchronization(casted.Child)
         }
-        return BACnetUnconfirmedServiceRequestUTCTimeSynchronization{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
index d735d68..060412a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
@@ -57,13 +57,13 @@ func NewBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification() *BACnetUncon
     return child.Parent
 }
 
-func CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification(structType interface{}) BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification {
+func CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification(structType interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification(structType in
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification(casted.Child)
         }
-        return BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
index 7fc68dd..259909b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
@@ -57,13 +57,13 @@ func NewBACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple() *BAC
     return child.Parent
 }
 
-func CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple(structType interface{}) BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple {
+func CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple(structType interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple(struc
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple(casted.Child)
         }
-        return BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
index 4c845b9..6e46ee8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
@@ -57,13 +57,13 @@ func NewBACnetUnconfirmedServiceRequestUnconfirmedEventNotification() *BACnetUnc
     return child.Parent
 }
 
-func CastBACnetUnconfirmedServiceRequestUnconfirmedEventNotification(structType interface{}) BACnetUnconfirmedServiceRequestUnconfirmedEventNotification {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequestUnconfirmedEventNotification {
+func CastBACnetUnconfirmedServiceRequestUnconfirmedEventNotification(structType interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedEventNotification {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedEventNotification {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequestUnconfirmedEventNotification); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequestUnconfirmedEventNotification); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestUnconfirmedEventNotification(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetUnconfirmedServiceRequestUnconfirmedEventNotification(structType
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestUnconfirmedEventNotification(casted.Child)
         }
-        return BACnetUnconfirmedServiceRequestUnconfirmedEventNotification{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
index cd6a795..1d4952a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
@@ -72,13 +72,13 @@ func NewBACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer(vendorId uint8
     return child.Parent
 }
 
-func CastBACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer(structType interface{}) BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer {
+func CastBACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer(structType interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer(casted.Child)
@@ -86,7 +86,7 @@ func CastBACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer(structType in
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer(casted.Child)
         }
-        return BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
index 0be5e34..cde4984 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
@@ -57,13 +57,13 @@ func NewBACnetUnconfirmedServiceRequestUnconfirmedTextMessage() *BACnetUnconfirm
     return child.Parent
 }
 
-func CastBACnetUnconfirmedServiceRequestUnconfirmedTextMessage(structType interface{}) BACnetUnconfirmedServiceRequestUnconfirmedTextMessage {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequestUnconfirmedTextMessage {
+func CastBACnetUnconfirmedServiceRequestUnconfirmedTextMessage(structType interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedTextMessage {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedTextMessage {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequestUnconfirmedTextMessage); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequestUnconfirmedTextMessage); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestUnconfirmedTextMessage(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetUnconfirmedServiceRequestUnconfirmedTextMessage(structType interf
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestUnconfirmedTextMessage(casted.Child)
         }
-        return BACnetUnconfirmedServiceRequestUnconfirmedTextMessage{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
index 67992ee..0111f98 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
@@ -73,13 +73,13 @@ func NewBACnetUnconfirmedServiceRequestWhoHas(deviceInstanceLowLimit uint32, dev
     return child.Parent
 }
 
-func CastBACnetUnconfirmedServiceRequestWhoHas(structType interface{}) BACnetUnconfirmedServiceRequestWhoHas {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequestWhoHas {
+func CastBACnetUnconfirmedServiceRequestWhoHas(structType interface{}) *BACnetUnconfirmedServiceRequestWhoHas {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestWhoHas {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequestWhoHas); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequestWhoHas); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestWhoHas(casted.Child)
@@ -87,7 +87,7 @@ func CastBACnetUnconfirmedServiceRequestWhoHas(structType interface{}) BACnetUnc
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestWhoHas(casted.Child)
         }
-        return BACnetUnconfirmedServiceRequestWhoHas{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
index e19ca71..6d78dd8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
@@ -72,13 +72,13 @@ func NewBACnetUnconfirmedServiceRequestWhoIs(deviceInstanceRangeLowLimitLength u
     return child.Parent
 }
 
-func CastBACnetUnconfirmedServiceRequestWhoIs(structType interface{}) BACnetUnconfirmedServiceRequestWhoIs {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequestWhoIs {
+func CastBACnetUnconfirmedServiceRequestWhoIs(structType interface{}) *BACnetUnconfirmedServiceRequestWhoIs {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestWhoIs {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequestWhoIs); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequestWhoIs); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestWhoIs(casted.Child)
@@ -86,7 +86,7 @@ func CastBACnetUnconfirmedServiceRequestWhoIs(structType interface{}) BACnetUnco
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestWhoIs(casted.Child)
         }
-        return BACnetUnconfirmedServiceRequestWhoIs{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
index cc96754..011fbf5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
@@ -57,13 +57,13 @@ func NewBACnetUnconfirmedServiceRequestWriteGroup() *BACnetUnconfirmedServiceReq
     return child.Parent
 }
 
-func CastBACnetUnconfirmedServiceRequestWriteGroup(structType interface{}) BACnetUnconfirmedServiceRequestWriteGroup {
-    castFunc := func(typ interface{}) BACnetUnconfirmedServiceRequestWriteGroup {
+func CastBACnetUnconfirmedServiceRequestWriteGroup(structType interface{}) *BACnetUnconfirmedServiceRequestWriteGroup {
+    castFunc := func(typ interface{}) *BACnetUnconfirmedServiceRequestWriteGroup {
         if casted, ok := typ.(BACnetUnconfirmedServiceRequestWriteGroup); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequestWriteGroup); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestWriteGroup(casted.Child)
@@ -71,7 +71,7 @@ func CastBACnetUnconfirmedServiceRequestWriteGroup(structType interface{}) BACne
         if casted, ok := typ.(*BACnetUnconfirmedServiceRequest); ok {
             return CastBACnetUnconfirmedServiceRequestWriteGroup(casted.Child)
         }
-        return BACnetUnconfirmedServiceRequestWriteGroup{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
index e63b0b5..a2d6abb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
@@ -61,15 +61,15 @@ func NewBVLC() *BVLC {
     return &BVLC{}
 }
 
-func CastBVLC(structType interface{}) BVLC {
-    castFunc := func(typ interface{}) BVLC {
+func CastBVLC(structType interface{}) *BVLC {
+    castFunc := func(typ interface{}) *BVLC {
         if casted, ok := typ.(BVLC); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLC); ok {
-            return *casted
+            return casted
         }
-        return BVLC{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
index 4d1efef..e2cb8cc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
@@ -57,13 +57,13 @@ func NewBVLCDeleteForeignDeviceTableEntry() *BVLC {
     return child.Parent
 }
 
-func CastBVLCDeleteForeignDeviceTableEntry(structType interface{}) BVLCDeleteForeignDeviceTableEntry {
-    castFunc := func(typ interface{}) BVLCDeleteForeignDeviceTableEntry {
+func CastBVLCDeleteForeignDeviceTableEntry(structType interface{}) *BVLCDeleteForeignDeviceTableEntry {
+    castFunc := func(typ interface{}) *BVLCDeleteForeignDeviceTableEntry {
         if casted, ok := typ.(BVLCDeleteForeignDeviceTableEntry); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCDeleteForeignDeviceTableEntry); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCDeleteForeignDeviceTableEntry(casted.Child)
@@ -71,7 +71,7 @@ func CastBVLCDeleteForeignDeviceTableEntry(structType interface{}) BVLCDeleteFor
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCDeleteForeignDeviceTableEntry(casted.Child)
         }
-        return BVLCDeleteForeignDeviceTableEntry{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
index d76495b..f0d1822 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
@@ -57,13 +57,13 @@ func NewBVLCDistributeBroadcastToNetwork() *BVLC {
     return child.Parent
 }
 
-func CastBVLCDistributeBroadcastToNetwork(structType interface{}) BVLCDistributeBroadcastToNetwork {
-    castFunc := func(typ interface{}) BVLCDistributeBroadcastToNetwork {
+func CastBVLCDistributeBroadcastToNetwork(structType interface{}) *BVLCDistributeBroadcastToNetwork {
+    castFunc := func(typ interface{}) *BVLCDistributeBroadcastToNetwork {
         if casted, ok := typ.(BVLCDistributeBroadcastToNetwork); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCDistributeBroadcastToNetwork); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCDistributeBroadcastToNetwork(casted.Child)
@@ -71,7 +71,7 @@ func CastBVLCDistributeBroadcastToNetwork(structType interface{}) BVLCDistribute
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCDistributeBroadcastToNetwork(casted.Child)
         }
-        return BVLCDistributeBroadcastToNetwork{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
index 0343002..b2e626e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
@@ -64,13 +64,13 @@ func NewBVLCForwardedNPDU(ip []uint8, port uint16, npdu *NPDU, ) *BVLC {
     return child.Parent
 }
 
-func CastBVLCForwardedNPDU(structType interface{}) BVLCForwardedNPDU {
-    castFunc := func(typ interface{}) BVLCForwardedNPDU {
+func CastBVLCForwardedNPDU(structType interface{}) *BVLCForwardedNPDU {
+    castFunc := func(typ interface{}) *BVLCForwardedNPDU {
         if casted, ok := typ.(BVLCForwardedNPDU); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCForwardedNPDU); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCForwardedNPDU(casted.Child)
@@ -78,7 +78,7 @@ func CastBVLCForwardedNPDU(structType interface{}) BVLCForwardedNPDU {
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCForwardedNPDU(casted.Child)
         }
-        return BVLCForwardedNPDU{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
index ba47760..9889315 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
@@ -60,13 +60,13 @@ func NewBVLCOriginalBroadcastNPDU(npdu *NPDU, ) *BVLC {
     return child.Parent
 }
 
-func CastBVLCOriginalBroadcastNPDU(structType interface{}) BVLCOriginalBroadcastNPDU {
-    castFunc := func(typ interface{}) BVLCOriginalBroadcastNPDU {
+func CastBVLCOriginalBroadcastNPDU(structType interface{}) *BVLCOriginalBroadcastNPDU {
+    castFunc := func(typ interface{}) *BVLCOriginalBroadcastNPDU {
         if casted, ok := typ.(BVLCOriginalBroadcastNPDU); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCOriginalBroadcastNPDU); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCOriginalBroadcastNPDU(casted.Child)
@@ -74,7 +74,7 @@ func CastBVLCOriginalBroadcastNPDU(structType interface{}) BVLCOriginalBroadcast
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCOriginalBroadcastNPDU(casted.Child)
         }
-        return BVLCOriginalBroadcastNPDU{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
index 55c58e7..95e2ab4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
@@ -60,13 +60,13 @@ func NewBVLCOriginalUnicastNPDU(npdu *NPDU, ) *BVLC {
     return child.Parent
 }
 
-func CastBVLCOriginalUnicastNPDU(structType interface{}) BVLCOriginalUnicastNPDU {
-    castFunc := func(typ interface{}) BVLCOriginalUnicastNPDU {
+func CastBVLCOriginalUnicastNPDU(structType interface{}) *BVLCOriginalUnicastNPDU {
+    castFunc := func(typ interface{}) *BVLCOriginalUnicastNPDU {
         if casted, ok := typ.(BVLCOriginalUnicastNPDU); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCOriginalUnicastNPDU); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCOriginalUnicastNPDU(casted.Child)
@@ -74,7 +74,7 @@ func CastBVLCOriginalUnicastNPDU(structType interface{}) BVLCOriginalUnicastNPDU
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCOriginalUnicastNPDU(casted.Child)
         }
-        return BVLCOriginalUnicastNPDU{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
index b84e7d0..a042a36 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
@@ -57,13 +57,13 @@ func NewBVLCReadBroadcastDistributionTable() *BVLC {
     return child.Parent
 }
 
-func CastBVLCReadBroadcastDistributionTable(structType interface{}) BVLCReadBroadcastDistributionTable {
-    castFunc := func(typ interface{}) BVLCReadBroadcastDistributionTable {
+func CastBVLCReadBroadcastDistributionTable(structType interface{}) *BVLCReadBroadcastDistributionTable {
+    castFunc := func(typ interface{}) *BVLCReadBroadcastDistributionTable {
         if casted, ok := typ.(BVLCReadBroadcastDistributionTable); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCReadBroadcastDistributionTable); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCReadBroadcastDistributionTable(casted.Child)
@@ -71,7 +71,7 @@ func CastBVLCReadBroadcastDistributionTable(structType interface{}) BVLCReadBroa
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCReadBroadcastDistributionTable(casted.Child)
         }
-        return BVLCReadBroadcastDistributionTable{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
index 195b2a5..eef99c6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
@@ -57,13 +57,13 @@ func NewBVLCReadBroadcastDistributionTableAck() *BVLC {
     return child.Parent
 }
 
-func CastBVLCReadBroadcastDistributionTableAck(structType interface{}) BVLCReadBroadcastDistributionTableAck {
-    castFunc := func(typ interface{}) BVLCReadBroadcastDistributionTableAck {
+func CastBVLCReadBroadcastDistributionTableAck(structType interface{}) *BVLCReadBroadcastDistributionTableAck {
+    castFunc := func(typ interface{}) *BVLCReadBroadcastDistributionTableAck {
         if casted, ok := typ.(BVLCReadBroadcastDistributionTableAck); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCReadBroadcastDistributionTableAck); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCReadBroadcastDistributionTableAck(casted.Child)
@@ -71,7 +71,7 @@ func CastBVLCReadBroadcastDistributionTableAck(structType interface{}) BVLCReadB
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCReadBroadcastDistributionTableAck(casted.Child)
         }
-        return BVLCReadBroadcastDistributionTableAck{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
index 2415723..3483c58 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
@@ -57,13 +57,13 @@ func NewBVLCReadForeignDeviceTable() *BVLC {
     return child.Parent
 }
 
-func CastBVLCReadForeignDeviceTable(structType interface{}) BVLCReadForeignDeviceTable {
-    castFunc := func(typ interface{}) BVLCReadForeignDeviceTable {
+func CastBVLCReadForeignDeviceTable(structType interface{}) *BVLCReadForeignDeviceTable {
+    castFunc := func(typ interface{}) *BVLCReadForeignDeviceTable {
         if casted, ok := typ.(BVLCReadForeignDeviceTable); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCReadForeignDeviceTable); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCReadForeignDeviceTable(casted.Child)
@@ -71,7 +71,7 @@ func CastBVLCReadForeignDeviceTable(structType interface{}) BVLCReadForeignDevic
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCReadForeignDeviceTable(casted.Child)
         }
-        return BVLCReadForeignDeviceTable{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
index 5ff6848..8226bf2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
@@ -57,13 +57,13 @@ func NewBVLCReadForeignDeviceTableAck() *BVLC {
     return child.Parent
 }
 
-func CastBVLCReadForeignDeviceTableAck(structType interface{}) BVLCReadForeignDeviceTableAck {
-    castFunc := func(typ interface{}) BVLCReadForeignDeviceTableAck {
+func CastBVLCReadForeignDeviceTableAck(structType interface{}) *BVLCReadForeignDeviceTableAck {
+    castFunc := func(typ interface{}) *BVLCReadForeignDeviceTableAck {
         if casted, ok := typ.(BVLCReadForeignDeviceTableAck); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCReadForeignDeviceTableAck); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCReadForeignDeviceTableAck(casted.Child)
@@ -71,7 +71,7 @@ func CastBVLCReadForeignDeviceTableAck(structType interface{}) BVLCReadForeignDe
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCReadForeignDeviceTableAck(casted.Child)
         }
-        return BVLCReadForeignDeviceTableAck{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
index a0a1c74..4d75fa1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
@@ -57,13 +57,13 @@ func NewBVLCRegisterForeignDevice() *BVLC {
     return child.Parent
 }
 
-func CastBVLCRegisterForeignDevice(structType interface{}) BVLCRegisterForeignDevice {
-    castFunc := func(typ interface{}) BVLCRegisterForeignDevice {
+func CastBVLCRegisterForeignDevice(structType interface{}) *BVLCRegisterForeignDevice {
+    castFunc := func(typ interface{}) *BVLCRegisterForeignDevice {
         if casted, ok := typ.(BVLCRegisterForeignDevice); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCRegisterForeignDevice); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCRegisterForeignDevice(casted.Child)
@@ -71,7 +71,7 @@ func CastBVLCRegisterForeignDevice(structType interface{}) BVLCRegisterForeignDe
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCRegisterForeignDevice(casted.Child)
         }
-        return BVLCRegisterForeignDevice{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
index 32cb52a..ddf9cca 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
@@ -57,13 +57,13 @@ func NewBVLCResult() *BVLC {
     return child.Parent
 }
 
-func CastBVLCResult(structType interface{}) BVLCResult {
-    castFunc := func(typ interface{}) BVLCResult {
+func CastBVLCResult(structType interface{}) *BVLCResult {
+    castFunc := func(typ interface{}) *BVLCResult {
         if casted, ok := typ.(BVLCResult); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCResult); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCResult(casted.Child)
@@ -71,7 +71,7 @@ func CastBVLCResult(structType interface{}) BVLCResult {
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCResult(casted.Child)
         }
-        return BVLCResult{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
index 6b2a16c..2f7fd43 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
@@ -57,13 +57,13 @@ func NewBVLCSecureBVLL() *BVLC {
     return child.Parent
 }
 
-func CastBVLCSecureBVLL(structType interface{}) BVLCSecureBVLL {
-    castFunc := func(typ interface{}) BVLCSecureBVLL {
+func CastBVLCSecureBVLL(structType interface{}) *BVLCSecureBVLL {
+    castFunc := func(typ interface{}) *BVLCSecureBVLL {
         if casted, ok := typ.(BVLCSecureBVLL); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCSecureBVLL); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCSecureBVLL(casted.Child)
@@ -71,7 +71,7 @@ func CastBVLCSecureBVLL(structType interface{}) BVLCSecureBVLL {
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCSecureBVLL(casted.Child)
         }
-        return BVLCSecureBVLL{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go
index bf0263b..ea28c3c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go
@@ -57,13 +57,13 @@ func NewBVLCWideBroadcastDistributionTable() *BVLC {
     return child.Parent
 }
 
-func CastBVLCWideBroadcastDistributionTable(structType interface{}) BVLCWideBroadcastDistributionTable {
-    castFunc := func(typ interface{}) BVLCWideBroadcastDistributionTable {
+func CastBVLCWideBroadcastDistributionTable(structType interface{}) *BVLCWideBroadcastDistributionTable {
+    castFunc := func(typ interface{}) *BVLCWideBroadcastDistributionTable {
         if casted, ok := typ.(BVLCWideBroadcastDistributionTable); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*BVLCWideBroadcastDistributionTable); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(BVLC); ok {
             return CastBVLCWideBroadcastDistributionTable(casted.Child)
@@ -71,7 +71,7 @@ func CastBVLCWideBroadcastDistributionTable(structType interface{}) BVLCWideBroa
         if casted, ok := typ.(*BVLC); ok {
             return CastBVLCWideBroadcastDistributionTable(casted.Child)
         }
-        return BVLCWideBroadcastDistributionTable{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
index 111ae12..8680ebf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
@@ -58,15 +58,15 @@ func NewNLM(vendorId *uint16) *NLM {
     return &NLM{VendorId: vendorId}
 }
 
-func CastNLM(structType interface{}) NLM {
-    castFunc := func(typ interface{}) NLM {
+func CastNLM(structType interface{}) *NLM {
+    castFunc := func(typ interface{}) *NLM {
         if casted, ok := typ.(NLM); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*NLM); ok {
-            return *casted
+            return casted
         }
-        return NLM{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
index 1289b56..785134a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
@@ -61,13 +61,13 @@ func NewNLMIAmRouterToNetwork(destinationNetworkAddress []uint16, vendorId *uint
     return child.Parent
 }
 
-func CastNLMIAmRouterToNetwork(structType interface{}) NLMIAmRouterToNetwork {
-    castFunc := func(typ interface{}) NLMIAmRouterToNetwork {
+func CastNLMIAmRouterToNetwork(structType interface{}) *NLMIAmRouterToNetwork {
+    castFunc := func(typ interface{}) *NLMIAmRouterToNetwork {
         if casted, ok := typ.(NLMIAmRouterToNetwork); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*NLMIAmRouterToNetwork); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(NLM); ok {
             return CastNLMIAmRouterToNetwork(casted.Child)
@@ -75,7 +75,7 @@ func CastNLMIAmRouterToNetwork(structType interface{}) NLMIAmRouterToNetwork {
         if casted, ok := typ.(*NLM); ok {
             return CastNLMIAmRouterToNetwork(casted.Child)
         }
-        return NLMIAmRouterToNetwork{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
index 217e24d..4ff484e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
@@ -61,13 +61,13 @@ func NewNLMWhoIsRouterToNetwork(destinationNetworkAddress []uint16, vendorId *ui
     return child.Parent
 }
 
-func CastNLMWhoIsRouterToNetwork(structType interface{}) NLMWhoIsRouterToNetwork {
-    castFunc := func(typ interface{}) NLMWhoIsRouterToNetwork {
+func CastNLMWhoIsRouterToNetwork(structType interface{}) *NLMWhoIsRouterToNetwork {
+    castFunc := func(typ interface{}) *NLMWhoIsRouterToNetwork {
         if casted, ok := typ.(NLMWhoIsRouterToNetwork); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*NLMWhoIsRouterToNetwork); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(NLM); ok {
             return CastNLMWhoIsRouterToNetwork(casted.Child)
@@ -75,7 +75,7 @@ func CastNLMWhoIsRouterToNetwork(structType interface{}) NLMWhoIsRouterToNetwork
         if casted, ok := typ.(*NLM); ok {
             return CastNLMWhoIsRouterToNetwork(casted.Child)
         }
-        return NLMWhoIsRouterToNetwork{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
index 7f194f8..60dcc62 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
@@ -58,15 +58,15 @@ func NewNPDU(protocolVersionNumber uint8, messageTypeFieldPresent bool, destinat
     return &NPDU{ProtocolVersionNumber: protocolVersionNumber, MessageTypeFieldPresent: messageTypeFieldPresent, DestinationSpecified: destinationSpecified, SourceSpecified: sourceSpecified, ExpectingReply: expectingReply, NetworkPriority: networkPriority, DestinationNetworkAddress: destinationNetworkAddress, DestinationLength: destinationLength, DestinationAddress: destinationAddress, SourceNetworkAddress: sourceNetworkAddress, SourceLength: sourceLength, SourceAddress: sourceAddress, H [...]
 }
 
-func CastNPDU(structType interface{}) NPDU {
-    castFunc := func(typ interface{}) NPDU {
+func CastNPDU(structType interface{}) *NPDU {
+    castFunc := func(typ interface{}) *NPDU {
         if casted, ok := typ.(NPDU); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*NPDU); ok {
-            return *casted
+            return casted
         }
-        return NPDU{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/KncNetIpConnection.go b/plc4go/internal/plc4go/knxnetip/KncNetIpConnection.go
index 78609d7..0093bbd 100644
--- a/plc4go/internal/plc4go/knxnetip/KncNetIpConnection.go
+++ b/plc4go/internal/plc4go/knxnetip/KncNetIpConnection.go
@@ -19,12 +19,21 @@
 package knxnetip
 
 import (
+    "bytes"
+    "errors"
+    "fmt"
+    "net"
+    driverModel "plc4x.apache.org/plc4go/v0/internal/plc4go/knxnetip/readwrite/model"
     internalModel "plc4x.apache.org/plc4go/v0/internal/plc4go/model"
     "plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
     "plc4x.apache.org/plc4go/v0/internal/plc4go/spi/interceptors"
     "plc4x.apache.org/plc4go/v0/internal/plc4go/transports"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/transports/udp"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
     "plc4x.apache.org/plc4go/v0/pkg/plc4go"
     apiModel "plc4x.apache.org/plc4go/v0/pkg/plc4go/model"
+    "strconv"
+    "time"
 )
 
 type ConnectionMetadata struct {
@@ -32,95 +41,265 @@ type ConnectionMetadata struct {
 }
 
 func (m ConnectionMetadata) CanRead() bool {
-	return false
+    return false
 }
 
 func (m ConnectionMetadata) CanWrite() bool {
-	return true
+    return true
 }
 
 func (m ConnectionMetadata) CanSubscribe() bool {
-	return true
+    return true
 }
 
 type KnxNetIpConnection struct {
-	messageCodec       spi.MessageCodec
-	options            map[string][]string
-	fieldHandler       spi.PlcFieldHandler
-	valueHandler       spi.PlcValueHandler
-	requestInterceptor internalModel.RequestInterceptor
-	plc4go.PlcConnection
+    messageCodec             spi.MessageCodec
+    options                  map[string][]string
+    fieldHandler             spi.PlcFieldHandler
+    valueHandler             spi.PlcValueHandler
+    quitConnectionStateTimer chan struct{}
+
+    GatewayKnxAddress      *driverModel.KnxAddress
+    GatewayName            string
+    ClientKnxAddress       *driverModel.KnxAddress
+    CommunicationChannelId uint8
+
+    requestInterceptor internalModel.RequestInterceptor
+    plc4go.PlcConnection
 }
 
 func NewKnxNetIpConnection(messageCodec spi.MessageCodec, options map[string][]string, fieldHandler spi.PlcFieldHandler) KnxNetIpConnection {
-	return KnxNetIpConnection{
-		messageCodec:       messageCodec,
-		options:            options,
-		fieldHandler:       fieldHandler,
-		valueHandler:       NewValueHandler(),
-		requestInterceptor: interceptors.NewSingleItemRequestInterceptor(),
-	}
+    return KnxNetIpConnection{
+        messageCodec:       messageCodec,
+        options:            options,
+        fieldHandler:       fieldHandler,
+        valueHandler:       NewValueHandler(),
+        requestInterceptor: interceptors.NewSingleItemRequestInterceptor(),
+    }
 }
 
 func (m KnxNetIpConnection) Connect() <-chan plc4go.PlcConnectionConnectResult {
-	ch := make(chan plc4go.PlcConnectionConnectResult)
-	go func() {
-		err := m.messageCodec.Connect()
-		ch <- plc4go.NewPlcConnectionConnectResult(m, err)
-	}()
-	return ch
+    ch := make(chan plc4go.PlcConnectionConnectResult)
+    go func() {
+        err := m.messageCodec.Connect()
+        if err != nil {
+            ch <- plc4go.NewPlcConnectionConnectResult(m, err)
+            return
+        }
+
+        transportInstanceExposer, ok := m.messageCodec.(spi.TransportInstanceExposer)
+        if !ok {
+            ch <- plc4go.NewPlcConnectionConnectResult(m, errors.New(
+                "used transport, is not a TransportInstanceExposer"))
+            return
+        }
+
+        // Prepare a SearchReq
+        udpTransportInstance, ok := transportInstanceExposer.GetTransportInstance().(*udp.UdpTransportInstance)
+        if !ok {
+            ch <- plc4go.NewPlcConnectionConnectResult(m, errors.New(
+                "used transport, is not a UdpTransportInstance"))
+            return
+        }
+        localAddress := driverModel.NewIPAddress(utils.ByteToInt8(udpTransportInstance.LocalAddress.IP))
+        discoveryEndpoint := driverModel.NewHPAIDiscoveryEndpoint(
+            driverModel.HostProtocolCode_IPV4_UDP, localAddress, uint16(udpTransportInstance.LocalAddress.Port))
+        searchRequest := driverModel.NewSearchRequest(discoveryEndpoint)
+        // Send the SearchReq
+        err = m.messageCodec.Send(searchRequest)
+        if err != nil {
+            ch <- plc4go.NewPlcConnectionConnectResult(m, errors.New(
+                "error sending search request"))
+            return
+        }
+        // Register an expected response
+        check := func(response interface{}) bool {
+            searchResponse := driverModel.CastSearchResponse(response)
+            return searchResponse != nil
+        }
+
+        // Create a channel for async execution of the connection
+        connectionResult := make(chan error)
+
+        // Register a callback to handle the response
+        searchResponseChan := m.messageCodec.Expect(check)
+        go func() {
+            response := <-searchResponseChan
+
+            searchResponse := driverModel.CastSearchResponse(response)
+            // Check if this device supports tunneling services
+            supportsTunneling := false
+            for _, serviceId := range searchResponse.DibSuppSvcFamilies.ServiceIds {
+                _, ok := serviceId.Child.(*driverModel.KnxNetIpTunneling)
+                if ok {
+                    supportsTunneling = true
+                    break
+                }
+            }
+            if supportsTunneling {
+                // Save some important information
+                m.GatewayName = string(bytes.Trim(utils.Int8ToByte(
+                    searchResponse.DibDeviceInfo.DeviceFriendlyName), "\x00"))
+                m.GatewayKnxAddress = searchResponse.DibDeviceInfo.KnxAddress
+
+                // As soon as we got a successful search-response back, send a connection request.
+                localAddress := m.castIpToKnxAddress(udpTransportInstance.LocalAddress.IP)
+                remoteAddress := m.castIpToKnxAddress(udpTransportInstance.RemoteAddress.IP)
+                connectionRequest := driverModel.NewConnectionRequest(
+                    driverModel.NewHPAIDiscoveryEndpoint(driverModel.HostProtocolCode_IPV4_UDP,
+                        localAddress, uint16(udpTransportInstance.LocalAddress.Port)),
+                    driverModel.NewHPAIDataEndpoint(driverModel.HostProtocolCode_IPV4_UDP,
+                        remoteAddress, uint16(udpTransportInstance.RemoteAddress.Port)),
+                    driverModel.NewConnectionRequestInformationTunnelConnection(driverModel.KnxLayer_TUNNEL_LINK_LAYER),
+                )
+
+                // Send the connection request
+                err = m.messageCodec.Send(connectionRequest)
+                if err != nil {
+                    // TODO: Different channel ...
+                    ch <- plc4go.NewPlcConnectionConnectResult(m, errors.New(
+                        "error sending connection request"))
+                    return
+                }
+                // Register an expected response
+                check := func(response interface{}) bool {
+                    connectionResponse := driverModel.CastConnectionResponse(response)
+                    return connectionResponse != nil
+                }
+
+                // Expected:    06100205001a 0801c0a82a32c70e 0801c0a82a32c70e 04040200
+                //                      xxxx
+                // Got:         061002050026 0801c0a82a32fd37 140100000000000000000000ffffc0a82a0b0e57 04040200
+
+                // Register a callback to handle the response
+                connectionResponseChan := m.messageCodec.Expect(check)
+                go func() {
+                    response := <-connectionResponseChan
+                    connectionResponse := driverModel.CastConnectionResponse(response)
+                    // Save the communication channel id
+                    m.CommunicationChannelId = connectionResponse.CommunicationChannelId
+                    if connectionResponse.Status == driverModel.Status_NO_ERROR {
+                        tunnelConnectionDataBlock := connectionResponse.ConnectionResponseDataBlock.Child.(
+                        *driverModel.ConnectionResponseDataBlockTunnelConnection)
+                        // Save the KNX Address the Gateway assigned to this connection.
+                        m.ClientKnxAddress = tunnelConnectionDataBlock.KnxAddress
+
+                        fmt.Printf("Successfully connected to KNXnet/IP Gateway '%s' with KNX address '%d.%d.%d' got assigned client KNX address '%d.%d.%d'",
+                            m.GatewayName,
+                            m.GatewayKnxAddress.MainGroup, m.GatewayKnxAddress.MiddleGroup, m.GatewayKnxAddress.SubGroup,
+                            m.ClientKnxAddress.MainGroup, m.ClientKnxAddress.MiddleGroup, m.ClientKnxAddress.SubGroup)
+
+                        // Fire the "connected" event
+                        ch <- plc4go.NewPlcConnectionConnectResult(m, nil)
+
+                        // Start a timer that sends connection-state requests every 60 seconds
+                        connectionStateTimer := time.NewTicker(60 * time.Second)
+                        m.quitConnectionStateTimer = make(chan struct{})
+                        go func() {
+                            for {
+                                select {
+                                case <-connectionStateTimer.C:
+                                    // We're using the connection-state-request as ping operation ...
+                                    ping := m.Ping()
+                                    pingResult := <- ping
+                                    if pingResult.Err != nil {
+                                        // TODO: Do some error handling here ...
+                                        connectionStateTimer.Stop()
+                                    }
+                                case <-m.quitConnectionStateTimer:
+                                    // TODO: Do some error handling here ...
+                                    connectionStateTimer.Stop()
+                                    return
+                                }
+                            }
+                        }()
+                    } else {
+                        ch <- plc4go.NewPlcConnectionConnectResult(m,
+                            errors.New("got a connection response with status " + strconv.Itoa(int(connectionResponse.Status))))
+                    }
+                }()
+            } else {
+                ch <- plc4go.NewPlcConnectionConnectResult(m,
+                    errors.New("this connection doesn't support tunneling"))
+            }
+        }()
+        // Wait for the connection to be established
+        err = <-connectionResult
+        ch <- plc4go.NewPlcConnectionConnectResult(m, err)
+    }()
+    return ch
 }
 
 func (m KnxNetIpConnection) Close() <-chan plc4go.PlcConnectionCloseResult {
-	// TODO: Implement ...
-	ch := make(chan plc4go.PlcConnectionCloseResult)
-	go func() {
-		ch <- plc4go.NewPlcConnectionCloseResult(m, nil)
-	}()
-	return ch
+    // TODO: Implement ...
+    ch := make(chan plc4go.PlcConnectionCloseResult)
+    go func() {
+        ch <- plc4go.NewPlcConnectionCloseResult(m, nil)
+    }()
+    return ch
 }
 
 func (m KnxNetIpConnection) IsConnected() bool {
-	panic("implement me")
+    panic("implement me")
 }
 
 func (m KnxNetIpConnection) Ping() <-chan plc4go.PlcConnectionPingResult {
-	result := make(chan plc4go.PlcConnectionPingResult)
-//	diagnosticRequestPdu := driverModel.NewModbusPDUDiagnosticRequest(0, 0x42)
-	go func() {
-/*		pingRequest := driverModel.NewModbusTcpADU(1, diagnosticRequestPdu)
-		err := m.messageCodec.Send(pingRequest)
-		if err != nil {
-			result <- plc4go.NewPlcConnectionPingResult(err)
-			return
-		}
-		// Register an expected response
-		check := func(response interface{}) bool {
-			responseAdu := driverModel.CastModbusTcpADU(response)
-			return responseAdu.TransactionIdentifier == 1 &&
-				responseAdu.UnitIdentifier == m.unitIdentifier
-		}
-		// Register a callback to handle the response
-		pingResponseChanel := m.messageCodec.Expect(check)
-		if pingResponseChanel == nil {
-			result <- plc4go.NewPlcConnectionPingResult(errors.New("no response channel"))
-			return
-		}
-		// Wait for the response to come in
-		pingResponse := <-pingResponseChanel
-		if pingResponse == nil {
-			result <- plc4go.NewPlcConnectionPingResult(errors.New("no response"))
-			return
-		}
-		// If we got a valid response (even if it will probably contain an error, we know the remote is available)
-		result <- plc4go.NewPlcConnectionPingResult(nil)*/
-	}()
-
-	return result
+    result := make(chan plc4go.PlcConnectionPingResult)
+    //	diagnosticRequestPdu := driverModel.NewModbusPDUDiagnosticRequest(0, 0x42)
+    go func() {
+        transportInstanceExposer, ok := m.messageCodec.(spi.TransportInstanceExposer)
+        if !ok {
+            result <- plc4go.NewPlcConnectionPingResult(errors.New(
+                "used transport, is not a TransportInstanceExposer"))
+            return
+        }
+
+        // Prepare a SearchReq
+        udpTransportInstance, ok := transportInstanceExposer.GetTransportInstance().(*udp.UdpTransportInstance)
+        if !ok {
+            result <- plc4go.NewPlcConnectionPingResult(errors.New(
+                "used transport, is not a UdpTransportInstance"))
+            return
+        }
+
+        localAddress := m.castIpToKnxAddress(udpTransportInstance.LocalAddress.IP)
+
+        connectionStateRequest := driverModel.NewConnectionStateRequest(
+            m.CommunicationChannelId,
+            driverModel.NewHPAIControlEndpoint(
+                driverModel.HostProtocolCode_IPV4_UDP,
+                localAddress, uint16(udpTransportInstance.LocalAddress.Port)))
+
+        // Send the connection state request
+        err := m.messageCodec.Send(connectionStateRequest)
+        if err != nil {
+            result <- plc4go.NewPlcConnectionPingResult(err)
+            return
+        }
+        // Register an expected response
+        check := func(response interface{}) bool {
+            connectionStateResponse := driverModel.CastConnectionStateResponse(response)
+            return connectionStateResponse != nil
+        }
+
+        // Register a callback to handle the response
+        connectionStateResponseChan := m.messageCodec.Expect(check)
+        go func() {
+            response := <-connectionStateResponseChan
+            connectionStateResponse := driverModel.CastConnectionStateResponse(response)
+            if connectionStateResponse.Status != driverModel.Status_NO_ERROR {
+                result <- plc4go.NewPlcConnectionPingResult(errors.New(
+                    "got a failure response code " + strconv.Itoa(int(connectionStateResponse.Status))))
+            } else {
+                result <- plc4go.NewPlcConnectionPingResult(nil)
+            }
+        }()
+    }()
+    return result
 }
 
 func (m KnxNetIpConnection) GetMetadata() apiModel.PlcConnectionMetadata {
-	return ConnectionMetadata{}
+    return ConnectionMetadata{}
 }
 
 func (m KnxNetIpConnection) ReadRequestBuilder() apiModel.PlcReadRequestBuilder {
@@ -128,31 +307,35 @@ func (m KnxNetIpConnection) ReadRequestBuilder() apiModel.PlcReadRequestBuilder
 }
 
 func (m KnxNetIpConnection) WriteRequestBuilder() apiModel.PlcWriteRequestBuilder {
-	return internalModel.NewDefaultPlcWriteRequestBuilder(
-		m.fieldHandler, m.valueHandler, NewKnxNetIpWriter(m.messageCodec))
+    return internalModel.NewDefaultPlcWriteRequestBuilder(
+        m.fieldHandler, m.valueHandler, NewKnxNetIpWriter(m.messageCodec))
 }
 
 func (m KnxNetIpConnection) SubscriptionRequestBuilder() apiModel.PlcSubscriptionRequestBuilder {
-    return nil/*internalModel.NewDefaultPlcSubscriptionRequestBuilder(
-        m.fieldHandler, m.valueHandler, NewKnxNetIpSubscriber(m.unitIdentifier, m.messageCodec))*/
+    return nil /*internalModel.NewDefaultPlcSubscriptionRequestBuilder(
+      m.fieldHandler, m.valueHandler, NewKnxNetIpSubscriber(m.unitIdentifier, m.messageCodec))*/
 }
 
 func (m KnxNetIpConnection) UnsubscriptionRequestBuilder() apiModel.PlcUnsubscriptionRequestBuilder {
-    return nil/*internalModel.NewDefaultPlcUnsubscriptionRequestBuilder(
-        m.fieldHandler, m.valueHandler, NewKnxNetIpSubscriber(m.unitIdentifier, m.messageCodec))*/
+    return nil /*internalModel.NewDefaultPlcUnsubscriptionRequestBuilder(
+      m.fieldHandler, m.valueHandler, NewKnxNetIpSubscriber(m.unitIdentifier, m.messageCodec))*/
 }
 
 func (m KnxNetIpConnection) GetTransportInstance() transports.TransportInstance {
-	if mc, ok := m.messageCodec.(spi.TransportInstanceExposer); ok {
-		return mc.GetTransportInstance()
-	}
-	return nil
+    if mc, ok := m.messageCodec.(spi.TransportInstanceExposer); ok {
+        return mc.GetTransportInstance()
+    }
+    return nil
 }
 
 func (m KnxNetIpConnection) GetPlcFieldHandler() spi.PlcFieldHandler {
-	return m.fieldHandler
+    return m.fieldHandler
 }
 
 func (m KnxNetIpConnection) GetPlcValueHandler() spi.PlcValueHandler {
-	return m.valueHandler
+    return m.valueHandler
+}
+
+func (m KnxNetIpConnection) castIpToKnxAddress(ip net.IP) *driverModel.IPAddress {
+    return driverModel.NewIPAddress(utils.ByteToInt8(ip)[len(ip) - 4:])
 }
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go
index 7600ff9..6ccdc84 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go
@@ -20,8 +20,8 @@ package knxnetip
 
 import (
     "errors"
+    "fmt"
     "net/url"
-    "plc4x.apache.org/plc4go/v0/internal/plc4go/modbus"
     "plc4x.apache.org/plc4go/v0/internal/plc4go/spi"
     "plc4x.apache.org/plc4go/v0/internal/plc4go/transports"
     "plc4x.apache.org/plc4go/v0/pkg/plc4go"
@@ -78,6 +78,7 @@ func (m KnxNetIpDriver) GetConnection(transportUrl url.URL, transports map[strin
     go func() {
         for {
             _ = <-defaultChanel
+            fmt.Printf("Hurz")
 /*            adu := model.CastModbusTcpADU(msg)
             serialized, err := json.Marshal(adu)
             if err != nil {
@@ -85,12 +86,16 @@ func (m KnxNetIpDriver) GetConnection(transportUrl url.URL, transports map[strin
             } else {
                 fmt.Printf("got message in the default handler %s\n", serialized)
             }*/
+//            06100201000e0801c0a82a32c70e
+//                          xxxx
+//            06100201000e08  c0a82a32c95f
         }
     }()
-    codec := modbus.NewModbusMessageCodec(transportInstance, nil)
+    codec := NewKnxNetIpMessageCodec(transportInstance, nil)
 
     // Create the new connection
-    connection := modbus.NewModbusConnection(uint8(1), codec, options, m.fieldHandler)
+    connection := NewKnxNetIpConnection(codec, options, m.fieldHandler)
+
     return connection.Connect()
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpMessageCodec.go b/plc4go/internal/plc4go/knxnetip/KnxNetIpMessageCodec.go
index c6d46f2..90f288d 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpMessageCodec.go
+++ b/plc4go/internal/plc4go/knxnetip/KnxNetIpMessageCodec.go
@@ -20,11 +20,11 @@ package knxnetip
 
 import (
     "errors"
-	"fmt"
+    "fmt"
     "plc4x.apache.org/plc4go/v0/internal/plc4go/knxnetip/readwrite/model"
     "plc4x.apache.org/plc4go/v0/internal/plc4go/transports"
-	"plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
-	"time"
+    "plc4x.apache.org/plc4go/v0/internal/plc4go/utils"
+    "time"
 )
 
 type KnxNetIpExpectation struct {
@@ -42,7 +42,7 @@ type KnxNetIpMessageCodec struct {
 func NewKnxNetIpMessageCodec(transportInstance transports.TransportInstance, defaultIncomingMessageChannel chan interface{}) *KnxNetIpMessageCodec {
 	codec := &KnxNetIpMessageCodec{
 		transportInstance:             transportInstance,
-		defaultIncomingMessageChannel: defaultIncomingMessageChannel,
+        defaultIncomingMessageChannel: defaultIncomingMessageChannel,
 		expectations:                  []KnxNetIpExpectation{},
 	}
 	// Start a worker that handles processing of responses
@@ -51,11 +51,8 @@ func NewKnxNetIpMessageCodec(transportInstance transports.TransportInstance, def
 }
 
 func (m *KnxNetIpMessageCodec) Connect() error {
-	// "connect" to the remote UDP server
-    err := m.transportInstance.Connect()
-	
-
-	return err
+    // "connect" to the remote UDP server
+    return m.transportInstance.Connect()
 }
 
 func (m *KnxNetIpMessageCodec) Disconnect() error {
@@ -89,7 +86,7 @@ func (m *KnxNetIpMessageCodec) Receive() (interface{}, error) {
 			return nil, nil
 		}
 		// Get the size of the entire packet
-		packetSize := (uint32(data[4]) << 8) + uint32(data[5]) + 6
+		packetSize := (uint32(data[4]) << 8) + uint32(data[5])
 		if num >= packetSize {
 			data, err = m.transportInstance.Read(packetSize)
 			if err != nil {
@@ -97,12 +94,12 @@ func (m *KnxNetIpMessageCodec) Receive() (interface{}, error) {
 				return nil, nil
 			}
 			rb := utils.NewReadBuffer(data)
-			adu, err := model.KnxNetIpMessageParse(rb)
+			knxMessage, err := model.KnxNetIpMessageParse(rb)
 			if err != nil {
 				// TODO: Possibly clean up ...
 				return nil, nil
 			}
-			return adu, nil
+			return knxMessage, nil
 		}
 	}
 	return nil, nil
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go
index e55b7b4..d7f5a93 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/APCI.go
@@ -104,11 +104,14 @@ func (m APCI) LengthInBytes() uint16 {
 }
 
 func APCIParse(io *utils.ReadBuffer) (APCI, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(4)
+    if err != nil {
+        return 0, nil
+    }
+    return APCIValueOf(val), nil
 }
 
 func (e APCI) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(4, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
index 826b930..7079387 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
@@ -57,15 +57,15 @@ func NewCEMI() *CEMI {
     return &CEMI{}
 }
 
-func CastCEMI(structType interface{}) CEMI {
-    castFunc := func(typ interface{}) CEMI {
+func CastCEMI(structType interface{}) *CEMI {
+    castFunc := func(typ interface{}) *CEMI {
         if casted, ok := typ.(CEMI); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMI); ok {
-            return *casted
+            return casted
         }
-        return CEMI{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
index d8cc9e3..afeaba1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
@@ -57,15 +57,15 @@ func NewCEMIAdditionalInformation() *CEMIAdditionalInformation {
     return &CEMIAdditionalInformation{}
 }
 
-func CastCEMIAdditionalInformation(structType interface{}) CEMIAdditionalInformation {
-    castFunc := func(typ interface{}) CEMIAdditionalInformation {
+func CastCEMIAdditionalInformation(structType interface{}) *CEMIAdditionalInformation {
+    castFunc := func(typ interface{}) *CEMIAdditionalInformation {
         if casted, ok := typ.(CEMIAdditionalInformation); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIAdditionalInformation); ok {
-            return *casted
+            return casted
         }
-        return CEMIAdditionalInformation{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
index c0db1b3..47a3aee 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
@@ -74,13 +74,13 @@ func NewCEMIAdditionalInformationBusmonitorInfo(frameErrorFlag bool, bitErrorFla
     return child.Parent
 }
 
-func CastCEMIAdditionalInformationBusmonitorInfo(structType interface{}) CEMIAdditionalInformationBusmonitorInfo {
-    castFunc := func(typ interface{}) CEMIAdditionalInformationBusmonitorInfo {
+func CastCEMIAdditionalInformationBusmonitorInfo(structType interface{}) *CEMIAdditionalInformationBusmonitorInfo {
+    castFunc := func(typ interface{}) *CEMIAdditionalInformationBusmonitorInfo {
         if casted, ok := typ.(CEMIAdditionalInformationBusmonitorInfo); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIAdditionalInformationBusmonitorInfo); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMIAdditionalInformation); ok {
             return CastCEMIAdditionalInformationBusmonitorInfo(casted.Child)
@@ -88,7 +88,7 @@ func CastCEMIAdditionalInformationBusmonitorInfo(structType interface{}) CEMIAdd
         if casted, ok := typ.(*CEMIAdditionalInformation); ok {
             return CastCEMIAdditionalInformationBusmonitorInfo(casted.Child)
         }
-        return CEMIAdditionalInformationBusmonitorInfo{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
index b04dfbd..cc3b6a1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
@@ -64,13 +64,13 @@ func NewCEMIAdditionalInformationRelativeTimestamp(relativeTimestamp *RelativeTi
     return child.Parent
 }
 
-func CastCEMIAdditionalInformationRelativeTimestamp(structType interface{}) CEMIAdditionalInformationRelativeTimestamp {
-    castFunc := func(typ interface{}) CEMIAdditionalInformationRelativeTimestamp {
+func CastCEMIAdditionalInformationRelativeTimestamp(structType interface{}) *CEMIAdditionalInformationRelativeTimestamp {
+    castFunc := func(typ interface{}) *CEMIAdditionalInformationRelativeTimestamp {
         if casted, ok := typ.(CEMIAdditionalInformationRelativeTimestamp); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIAdditionalInformationRelativeTimestamp); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMIAdditionalInformation); ok {
             return CastCEMIAdditionalInformationRelativeTimestamp(casted.Child)
@@ -78,7 +78,7 @@ func CastCEMIAdditionalInformationRelativeTimestamp(structType interface{}) CEMI
         if casted, ok := typ.(*CEMIAdditionalInformation); ok {
             return CastCEMIAdditionalInformationRelativeTimestamp(casted.Child)
         }
-        return CEMIAdditionalInformationRelativeTimestamp{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go
index 6247b4f..a6817a3 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIBusmonInd.go
@@ -64,13 +64,13 @@ func NewCEMIBusmonInd(additionalInformationLength uint8, additionalInformation [
     return child.Parent
 }
 
-func CastCEMIBusmonInd(structType interface{}) CEMIBusmonInd {
-    castFunc := func(typ interface{}) CEMIBusmonInd {
+func CastCEMIBusmonInd(structType interface{}) *CEMIBusmonInd {
+    castFunc := func(typ interface{}) *CEMIBusmonInd {
         if casted, ok := typ.(CEMIBusmonInd); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIBusmonInd); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMI); ok {
             return CastCEMIBusmonInd(casted.Child)
@@ -78,7 +78,7 @@ func CastCEMIBusmonInd(structType interface{}) CEMIBusmonInd {
         if casted, ok := typ.(*CEMI); ok {
             return CastCEMIBusmonInd(casted.Child)
         }
-        return CEMIBusmonInd{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go
index 2a9357c..711609b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataCon.go
@@ -64,13 +64,13 @@ func NewCEMIDataCon(additionalInformationLength uint8, additionalInformation []*
     return child.Parent
 }
 
-func CastCEMIDataCon(structType interface{}) CEMIDataCon {
-    castFunc := func(typ interface{}) CEMIDataCon {
+func CastCEMIDataCon(structType interface{}) *CEMIDataCon {
+    castFunc := func(typ interface{}) *CEMIDataCon {
         if casted, ok := typ.(CEMIDataCon); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIDataCon); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMI); ok {
             return CastCEMIDataCon(casted.Child)
@@ -78,7 +78,7 @@ func CastCEMIDataCon(structType interface{}) CEMIDataCon {
         if casted, ok := typ.(*CEMI); ok {
             return CastCEMIDataCon(casted.Child)
         }
-        return CEMIDataCon{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go
index f41217a..8f49d2d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataFrame.go
@@ -61,15 +61,15 @@ func NewCEMIDataFrame(standardFrame bool, polling bool, notRepeated bool, notAck
     return &CEMIDataFrame{StandardFrame: standardFrame, Polling: polling, NotRepeated: notRepeated, NotAckFrame: notAckFrame, Priority: priority, AcknowledgeRequested: acknowledgeRequested, ErrorFlag: errorFlag, GroupDestinationAddress: groupDestinationAddress, HopCount: hopCount, ExtendedFrameFormat: extendedFrameFormat, SourceAddress: sourceAddress, DestinationAddress: destinationAddress, DataLength: dataLength, Tcpi: tcpi, Counter: counter, Apci: apci, DataFirstByte: dataFirstByte, Da [...]
 }
 
-func CastCEMIDataFrame(structType interface{}) CEMIDataFrame {
-    castFunc := func(typ interface{}) CEMIDataFrame {
+func CastCEMIDataFrame(structType interface{}) *CEMIDataFrame {
+    castFunc := func(typ interface{}) *CEMIDataFrame {
         if casted, ok := typ.(CEMIDataFrame); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIDataFrame); ok {
-            return *casted
+            return casted
         }
-        return CEMIDataFrame{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go
index 98be1dd..34811a7 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataInd.go
@@ -64,13 +64,13 @@ func NewCEMIDataInd(additionalInformationLength uint8, additionalInformation []*
     return child.Parent
 }
 
-func CastCEMIDataInd(structType interface{}) CEMIDataInd {
-    castFunc := func(typ interface{}) CEMIDataInd {
+func CastCEMIDataInd(structType interface{}) *CEMIDataInd {
+    castFunc := func(typ interface{}) *CEMIDataInd {
         if casted, ok := typ.(CEMIDataInd); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIDataInd); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMI); ok {
             return CastCEMIDataInd(casted.Child)
@@ -78,7 +78,7 @@ func CastCEMIDataInd(structType interface{}) CEMIDataInd {
         if casted, ok := typ.(*CEMI); ok {
             return CastCEMIDataInd(casted.Child)
         }
-        return CEMIDataInd{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go
index 1f7b410..83da8ca 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIDataReq.go
@@ -64,13 +64,13 @@ func NewCEMIDataReq(additionalInformationLength uint8, additionalInformation []*
     return child.Parent
 }
 
-func CastCEMIDataReq(structType interface{}) CEMIDataReq {
-    castFunc := func(typ interface{}) CEMIDataReq {
+func CastCEMIDataReq(structType interface{}) *CEMIDataReq {
+    castFunc := func(typ interface{}) *CEMIDataReq {
         if casted, ok := typ.(CEMIDataReq); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIDataReq); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMI); ok {
             return CastCEMIDataReq(casted.Child)
@@ -78,7 +78,7 @@ func CastCEMIDataReq(structType interface{}) CEMIDataReq {
         if casted, ok := typ.(*CEMI); ok {
             return CastCEMIDataReq(casted.Child)
         }
-        return CEMIDataReq{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go
index 3372154..a1bc68c 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrame.go
@@ -63,15 +63,15 @@ func NewCEMIFrame(repeated bool, priority CEMIPriority, acknowledgeRequested boo
     return &CEMIFrame{Repeated: repeated, Priority: priority, AcknowledgeRequested: acknowledgeRequested, ErrorFlag: errorFlag}
 }
 
-func CastCEMIFrame(structType interface{}) CEMIFrame {
-    castFunc := func(typ interface{}) CEMIFrame {
+func CastCEMIFrame(structType interface{}) *CEMIFrame {
+    castFunc := func(typ interface{}) *CEMIFrame {
         if casted, ok := typ.(CEMIFrame); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIFrame); ok {
-            return *casted
+            return casted
         }
-        return CEMIFrame{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go
index cc5a0dd..f35ec22 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameAck.go
@@ -69,13 +69,13 @@ func NewCEMIFrameAck(repeated bool, priority CEMIPriority, acknowledgeRequested
     return child.Parent
 }
 
-func CastCEMIFrameAck(structType interface{}) CEMIFrameAck {
-    castFunc := func(typ interface{}) CEMIFrameAck {
+func CastCEMIFrameAck(structType interface{}) *CEMIFrameAck {
+    castFunc := func(typ interface{}) *CEMIFrameAck {
         if casted, ok := typ.(CEMIFrameAck); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIFrameAck); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMIFrame); ok {
             return CastCEMIFrameAck(casted.Child)
@@ -83,7 +83,7 @@ func CastCEMIFrameAck(structType interface{}) CEMIFrameAck {
         if casted, ok := typ.(*CEMIFrame); ok {
             return CastCEMIFrameAck(casted.Child)
         }
-        return CEMIFrameAck{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go
index fbae36b..f79c811 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameData.go
@@ -93,13 +93,13 @@ func NewCEMIFrameData(sourceAddress *KnxAddress, destinationAddress []int8, grou
     return child.Parent
 }
 
-func CastCEMIFrameData(structType interface{}) CEMIFrameData {
-    castFunc := func(typ interface{}) CEMIFrameData {
+func CastCEMIFrameData(structType interface{}) *CEMIFrameData {
+    castFunc := func(typ interface{}) *CEMIFrameData {
         if casted, ok := typ.(CEMIFrameData); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIFrameData); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMIFrame); ok {
             return CastCEMIFrameData(casted.Child)
@@ -107,7 +107,7 @@ func CastCEMIFrameData(structType interface{}) CEMIFrameData {
         if casted, ok := typ.(*CEMIFrame); ok {
             return CastCEMIFrameData(casted.Child)
         }
-        return CEMIFrameData{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go
index 1c4ea64..708643d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFrameDataExt.go
@@ -95,13 +95,13 @@ func NewCEMIFrameDataExt(groupAddress bool, hopCount uint8, extendedFrameFormat
     return child.Parent
 }
 
-func CastCEMIFrameDataExt(structType interface{}) CEMIFrameDataExt {
-    castFunc := func(typ interface{}) CEMIFrameDataExt {
+func CastCEMIFrameDataExt(structType interface{}) *CEMIFrameDataExt {
+    castFunc := func(typ interface{}) *CEMIFrameDataExt {
         if casted, ok := typ.(CEMIFrameDataExt); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIFrameDataExt); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMIFrame); ok {
             return CastCEMIFrameDataExt(casted.Child)
@@ -109,7 +109,7 @@ func CastCEMIFrameDataExt(structType interface{}) CEMIFrameDataExt {
         if casted, ok := typ.(*CEMIFrame); ok {
             return CastCEMIFrameDataExt(casted.Child)
         }
-        return CEMIFrameDataExt{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go
index 8468590..82a7c5d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingData.go
@@ -69,13 +69,13 @@ func NewCEMIFramePollingData(repeated bool, priority CEMIPriority, acknowledgeRe
     return child.Parent
 }
 
-func CastCEMIFramePollingData(structType interface{}) CEMIFramePollingData {
-    castFunc := func(typ interface{}) CEMIFramePollingData {
+func CastCEMIFramePollingData(structType interface{}) *CEMIFramePollingData {
+    castFunc := func(typ interface{}) *CEMIFramePollingData {
         if casted, ok := typ.(CEMIFramePollingData); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIFramePollingData); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMIFrame); ok {
             return CastCEMIFramePollingData(casted.Child)
@@ -83,7 +83,7 @@ func CastCEMIFramePollingData(structType interface{}) CEMIFramePollingData {
         if casted, ok := typ.(*CEMIFrame); ok {
             return CastCEMIFramePollingData(casted.Child)
         }
-        return CEMIFramePollingData{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go
index 05a509c..7ac6538 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIFramePollingDataExt.go
@@ -69,13 +69,13 @@ func NewCEMIFramePollingDataExt(repeated bool, priority CEMIPriority, acknowledg
     return child.Parent
 }
 
-func CastCEMIFramePollingDataExt(structType interface{}) CEMIFramePollingDataExt {
-    castFunc := func(typ interface{}) CEMIFramePollingDataExt {
+func CastCEMIFramePollingDataExt(structType interface{}) *CEMIFramePollingDataExt {
+    castFunc := func(typ interface{}) *CEMIFramePollingDataExt {
         if casted, ok := typ.(CEMIFramePollingDataExt); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIFramePollingDataExt); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMIFrame); ok {
             return CastCEMIFramePollingDataExt(casted.Child)
@@ -83,7 +83,7 @@ func CastCEMIFramePollingDataExt(structType interface{}) CEMIFramePollingDataExt
         if casted, ok := typ.(*CEMIFrame); ok {
             return CastCEMIFramePollingDataExt(casted.Child)
         }
-        return CEMIFramePollingDataExt{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go
index 6f117ac..3f20609 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadCon.go
@@ -70,13 +70,13 @@ func NewCEMIMPropReadCon(interfaceObjectType uint16, objectInstance uint8, prope
     return child.Parent
 }
 
-func CastCEMIMPropReadCon(structType interface{}) CEMIMPropReadCon {
-    castFunc := func(typ interface{}) CEMIMPropReadCon {
+func CastCEMIMPropReadCon(structType interface{}) *CEMIMPropReadCon {
+    castFunc := func(typ interface{}) *CEMIMPropReadCon {
         if casted, ok := typ.(CEMIMPropReadCon); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIMPropReadCon); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMI); ok {
             return CastCEMIMPropReadCon(casted.Child)
@@ -84,7 +84,7 @@ func CastCEMIMPropReadCon(structType interface{}) CEMIMPropReadCon {
         if casted, ok := typ.(*CEMI); ok {
             return CastCEMIMPropReadCon(casted.Child)
         }
-        return CEMIMPropReadCon{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go
index c88f506..abde048 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIMPropReadReq.go
@@ -68,13 +68,13 @@ func NewCEMIMPropReadReq(interfaceObjectType uint16, objectInstance uint8, prope
     return child.Parent
 }
 
-func CastCEMIMPropReadReq(structType interface{}) CEMIMPropReadReq {
-    castFunc := func(typ interface{}) CEMIMPropReadReq {
+func CastCEMIMPropReadReq(structType interface{}) *CEMIMPropReadReq {
+    castFunc := func(typ interface{}) *CEMIMPropReadReq {
         if casted, ok := typ.(CEMIMPropReadReq); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIMPropReadReq); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMI); ok {
             return CastCEMIMPropReadReq(casted.Child)
@@ -82,7 +82,7 @@ func CastCEMIMPropReadReq(structType interface{}) CEMIMPropReadReq {
         if casted, ok := typ.(*CEMI); ok {
             return CastCEMIMPropReadReq(casted.Child)
         }
-        return CEMIMPropReadReq{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go
index 937bb42..2561266 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataCon.go
@@ -57,13 +57,13 @@ func NewCEMIPollDataCon() *CEMI {
     return child.Parent
 }
 
-func CastCEMIPollDataCon(structType interface{}) CEMIPollDataCon {
-    castFunc := func(typ interface{}) CEMIPollDataCon {
+func CastCEMIPollDataCon(structType interface{}) *CEMIPollDataCon {
+    castFunc := func(typ interface{}) *CEMIPollDataCon {
         if casted, ok := typ.(CEMIPollDataCon); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIPollDataCon); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMI); ok {
             return CastCEMIPollDataCon(casted.Child)
@@ -71,7 +71,7 @@ func CastCEMIPollDataCon(structType interface{}) CEMIPollDataCon {
         if casted, ok := typ.(*CEMI); ok {
             return CastCEMIPollDataCon(casted.Child)
         }
-        return CEMIPollDataCon{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go
index 82c00e8..64a326a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPollDataReq.go
@@ -57,13 +57,13 @@ func NewCEMIPollDataReq() *CEMI {
     return child.Parent
 }
 
-func CastCEMIPollDataReq(structType interface{}) CEMIPollDataReq {
-    castFunc := func(typ interface{}) CEMIPollDataReq {
+func CastCEMIPollDataReq(structType interface{}) *CEMIPollDataReq {
+    castFunc := func(typ interface{}) *CEMIPollDataReq {
         if casted, ok := typ.(CEMIPollDataReq); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIPollDataReq); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMI); ok {
             return CastCEMIPollDataReq(casted.Child)
@@ -71,7 +71,7 @@ func CastCEMIPollDataReq(structType interface{}) CEMIPollDataReq {
         if casted, ok := typ.(*CEMI); ok {
             return CastCEMIPollDataReq(casted.Child)
         }
-        return CEMIPollDataReq{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go
index 7f8ebc4..ab1bb03 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIPriority.go
@@ -68,11 +68,14 @@ func (m CEMIPriority) LengthInBytes() uint16 {
 }
 
 func CEMIPriorityParse(io *utils.ReadBuffer) (CEMIPriority, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(2)
+    if err != nil {
+        return 0, nil
+    }
+    return CEMIPriorityValueOf(val), nil
 }
 
 func (e CEMIPriority) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(2, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go
index e9d6ba0..537aa57 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawCon.go
@@ -57,13 +57,13 @@ func NewCEMIRawCon() *CEMI {
     return child.Parent
 }
 
-func CastCEMIRawCon(structType interface{}) CEMIRawCon {
-    castFunc := func(typ interface{}) CEMIRawCon {
+func CastCEMIRawCon(structType interface{}) *CEMIRawCon {
+    castFunc := func(typ interface{}) *CEMIRawCon {
         if casted, ok := typ.(CEMIRawCon); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIRawCon); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMI); ok {
             return CastCEMIRawCon(casted.Child)
@@ -71,7 +71,7 @@ func CastCEMIRawCon(structType interface{}) CEMIRawCon {
         if casted, ok := typ.(*CEMI); ok {
             return CastCEMIRawCon(casted.Child)
         }
-        return CEMIRawCon{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go
index 830aebe..399ee8d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawInd.go
@@ -57,13 +57,13 @@ func NewCEMIRawInd() *CEMI {
     return child.Parent
 }
 
-func CastCEMIRawInd(structType interface{}) CEMIRawInd {
-    castFunc := func(typ interface{}) CEMIRawInd {
+func CastCEMIRawInd(structType interface{}) *CEMIRawInd {
+    castFunc := func(typ interface{}) *CEMIRawInd {
         if casted, ok := typ.(CEMIRawInd); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIRawInd); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMI); ok {
             return CastCEMIRawInd(casted.Child)
@@ -71,7 +71,7 @@ func CastCEMIRawInd(structType interface{}) CEMIRawInd {
         if casted, ok := typ.(*CEMI); ok {
             return CastCEMIRawInd(casted.Child)
         }
-        return CEMIRawInd{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go
index 5a6d1c4..6857db0 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIRawReq.go
@@ -57,13 +57,13 @@ func NewCEMIRawReq() *CEMI {
     return child.Parent
 }
 
-func CastCEMIRawReq(structType interface{}) CEMIRawReq {
-    castFunc := func(typ interface{}) CEMIRawReq {
+func CastCEMIRawReq(structType interface{}) *CEMIRawReq {
+    castFunc := func(typ interface{}) *CEMIRawReq {
         if casted, ok := typ.(CEMIRawReq); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*CEMIRawReq); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(CEMI); ok {
             return CastCEMIRawReq(casted.Child)
@@ -71,7 +71,7 @@ func CastCEMIRawReq(structType interface{}) CEMIRawReq {
         if casted, ok := typ.(*CEMI); ok {
             return CastCEMIRawReq(casted.Child)
         }
-        return CEMIRawReq{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
index 1edc720..02b66f4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
@@ -64,13 +64,13 @@ func NewConnectionRequest(hpaiDiscoveryEndpoint *HPAIDiscoveryEndpoint, hpaiData
     return child.Parent
 }
 
-func CastConnectionRequest(structType interface{}) ConnectionRequest {
-    castFunc := func(typ interface{}) ConnectionRequest {
+func CastConnectionRequest(structType interface{}) *ConnectionRequest {
+    castFunc := func(typ interface{}) *ConnectionRequest {
         if casted, ok := typ.(ConnectionRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ConnectionRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastConnectionRequest(casted.Child)
@@ -78,7 +78,7 @@ func CastConnectionRequest(structType interface{}) ConnectionRequest {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastConnectionRequest(casted.Child)
         }
-        return ConnectionRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
index 596507c..77f9527 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
@@ -57,15 +57,15 @@ func NewConnectionRequestInformation() *ConnectionRequestInformation {
     return &ConnectionRequestInformation{}
 }
 
-func CastConnectionRequestInformation(structType interface{}) ConnectionRequestInformation {
-    castFunc := func(typ interface{}) ConnectionRequestInformation {
+func CastConnectionRequestInformation(structType interface{}) *ConnectionRequestInformation {
+    castFunc := func(typ interface{}) *ConnectionRequestInformation {
         if casted, ok := typ.(ConnectionRequestInformation); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ConnectionRequestInformation); ok {
-            return *casted
+            return casted
         }
-        return ConnectionRequestInformation{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
index 443cf4b..ef41cb4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
@@ -57,13 +57,13 @@ func NewConnectionRequestInformationDeviceManagement() *ConnectionRequestInforma
     return child.Parent
 }
 
-func CastConnectionRequestInformationDeviceManagement(structType interface{}) ConnectionRequestInformationDeviceManagement {
-    castFunc := func(typ interface{}) ConnectionRequestInformationDeviceManagement {
+func CastConnectionRequestInformationDeviceManagement(structType interface{}) *ConnectionRequestInformationDeviceManagement {
+    castFunc := func(typ interface{}) *ConnectionRequestInformationDeviceManagement {
         if casted, ok := typ.(ConnectionRequestInformationDeviceManagement); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ConnectionRequestInformationDeviceManagement); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ConnectionRequestInformation); ok {
             return CastConnectionRequestInformationDeviceManagement(casted.Child)
@@ -71,7 +71,7 @@ func CastConnectionRequestInformationDeviceManagement(structType interface{}) Co
         if casted, ok := typ.(*ConnectionRequestInformation); ok {
             return CastConnectionRequestInformationDeviceManagement(casted.Child)
         }
-        return ConnectionRequestInformationDeviceManagement{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go
index 6ef9565..b98e42a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go
@@ -61,13 +61,13 @@ func NewConnectionRequestInformationTunnelConnection(knxLayer KnxLayer, ) *Conne
     return child.Parent
 }
 
-func CastConnectionRequestInformationTunnelConnection(structType interface{}) ConnectionRequestInformationTunnelConnection {
-    castFunc := func(typ interface{}) ConnectionRequestInformationTunnelConnection {
+func CastConnectionRequestInformationTunnelConnection(structType interface{}) *ConnectionRequestInformationTunnelConnection {
+    castFunc := func(typ interface{}) *ConnectionRequestInformationTunnelConnection {
         if casted, ok := typ.(ConnectionRequestInformationTunnelConnection); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ConnectionRequestInformationTunnelConnection); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ConnectionRequestInformation); ok {
             return CastConnectionRequestInformationTunnelConnection(casted.Child)
@@ -75,7 +75,7 @@ func CastConnectionRequestInformationTunnelConnection(structType interface{}) Co
         if casted, ok := typ.(*ConnectionRequestInformation); ok {
             return CastConnectionRequestInformationTunnelConnection(casted.Child)
         }
-        return ConnectionRequestInformationTunnelConnection{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
index 9de2236..95c980a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
@@ -66,13 +66,13 @@ func NewConnectionResponse(communicationChannelId uint8, status Status, hpaiData
     return child.Parent
 }
 
-func CastConnectionResponse(structType interface{}) ConnectionResponse {
-    castFunc := func(typ interface{}) ConnectionResponse {
+func CastConnectionResponse(structType interface{}) *ConnectionResponse {
+    castFunc := func(typ interface{}) *ConnectionResponse {
         if casted, ok := typ.(ConnectionResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ConnectionResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastConnectionResponse(casted.Child)
@@ -80,7 +80,7 @@ func CastConnectionResponse(structType interface{}) ConnectionResponse {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastConnectionResponse(casted.Child)
         }
-        return ConnectionResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
index 53e951e..f31e198 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
@@ -57,15 +57,15 @@ func NewConnectionResponseDataBlock() *ConnectionResponseDataBlock {
     return &ConnectionResponseDataBlock{}
 }
 
-func CastConnectionResponseDataBlock(structType interface{}) ConnectionResponseDataBlock {
-    castFunc := func(typ interface{}) ConnectionResponseDataBlock {
+func CastConnectionResponseDataBlock(structType interface{}) *ConnectionResponseDataBlock {
+    castFunc := func(typ interface{}) *ConnectionResponseDataBlock {
         if casted, ok := typ.(ConnectionResponseDataBlock); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ConnectionResponseDataBlock); ok {
-            return *casted
+            return casted
         }
-        return ConnectionResponseDataBlock{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go
index e455d92..2bdce1b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go
@@ -57,13 +57,13 @@ func NewConnectionResponseDataBlockDeviceManagement() *ConnectionResponseDataBlo
     return child.Parent
 }
 
-func CastConnectionResponseDataBlockDeviceManagement(structType interface{}) ConnectionResponseDataBlockDeviceManagement {
-    castFunc := func(typ interface{}) ConnectionResponseDataBlockDeviceManagement {
+func CastConnectionResponseDataBlockDeviceManagement(structType interface{}) *ConnectionResponseDataBlockDeviceManagement {
+    castFunc := func(typ interface{}) *ConnectionResponseDataBlockDeviceManagement {
         if casted, ok := typ.(ConnectionResponseDataBlockDeviceManagement); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ConnectionResponseDataBlockDeviceManagement); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ConnectionResponseDataBlock); ok {
             return CastConnectionResponseDataBlockDeviceManagement(casted.Child)
@@ -71,7 +71,7 @@ func CastConnectionResponseDataBlockDeviceManagement(structType interface{}) Con
         if casted, ok := typ.(*ConnectionResponseDataBlock); ok {
             return CastConnectionResponseDataBlockDeviceManagement(casted.Child)
         }
-        return ConnectionResponseDataBlockDeviceManagement{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go
index 22554d8..a9c1574 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go
@@ -60,13 +60,13 @@ func NewConnectionResponseDataBlockTunnelConnection(knxAddress *KnxAddress, ) *C
     return child.Parent
 }
 
-func CastConnectionResponseDataBlockTunnelConnection(structType interface{}) ConnectionResponseDataBlockTunnelConnection {
-    castFunc := func(typ interface{}) ConnectionResponseDataBlockTunnelConnection {
+func CastConnectionResponseDataBlockTunnelConnection(structType interface{}) *ConnectionResponseDataBlockTunnelConnection {
+    castFunc := func(typ interface{}) *ConnectionResponseDataBlockTunnelConnection {
         if casted, ok := typ.(ConnectionResponseDataBlockTunnelConnection); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ConnectionResponseDataBlockTunnelConnection); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ConnectionResponseDataBlock); ok {
             return CastConnectionResponseDataBlockTunnelConnection(casted.Child)
@@ -74,7 +74,7 @@ func CastConnectionResponseDataBlockTunnelConnection(structType interface{}) Con
         if casted, ok := typ.(*ConnectionResponseDataBlock); ok {
             return CastConnectionResponseDataBlockTunnelConnection(casted.Child)
         }
-        return ConnectionResponseDataBlockTunnelConnection{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go
index 48e24b2..15063d3 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go
@@ -63,13 +63,13 @@ func NewConnectionStateRequest(communicationChannelId uint8, hpaiControlEndpoint
     return child.Parent
 }
 
-func CastConnectionStateRequest(structType interface{}) ConnectionStateRequest {
-    castFunc := func(typ interface{}) ConnectionStateRequest {
+func CastConnectionStateRequest(structType interface{}) *ConnectionStateRequest {
+    castFunc := func(typ interface{}) *ConnectionStateRequest {
         if casted, ok := typ.(ConnectionStateRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ConnectionStateRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastConnectionStateRequest(casted.Child)
@@ -77,7 +77,7 @@ func CastConnectionStateRequest(structType interface{}) ConnectionStateRequest {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastConnectionStateRequest(casted.Child)
         }
-        return ConnectionStateRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go
index 011e775..0d3a304 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go
@@ -62,13 +62,13 @@ func NewConnectionStateResponse(communicationChannelId uint8, status Status, ) *
     return child.Parent
 }
 
-func CastConnectionStateResponse(structType interface{}) ConnectionStateResponse {
-    castFunc := func(typ interface{}) ConnectionStateResponse {
+func CastConnectionStateResponse(structType interface{}) *ConnectionStateResponse {
+    castFunc := func(typ interface{}) *ConnectionStateResponse {
         if casted, ok := typ.(ConnectionStateResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ConnectionStateResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastConnectionStateResponse(casted.Child)
@@ -76,7 +76,7 @@ func CastConnectionStateResponse(structType interface{}) ConnectionStateResponse
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastConnectionStateResponse(casted.Child)
         }
-        return ConnectionStateResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
index 8a4c7a6..5fd4f1e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
@@ -52,15 +52,15 @@ func NewDIBDeviceInfo(descriptionType uint8, knxMedium uint8, deviceStatus *Devi
     return &DIBDeviceInfo{DescriptionType: descriptionType, KnxMedium: knxMedium, DeviceStatus: deviceStatus, KnxAddress: knxAddress, ProjectInstallationIdentifier: projectInstallationIdentifier, KnxNetIpDeviceSerialNumber: knxNetIpDeviceSerialNumber, KnxNetIpDeviceMulticastAddress: knxNetIpDeviceMulticastAddress, KnxNetIpDeviceMacAddress: knxNetIpDeviceMacAddress, DeviceFriendlyName: deviceFriendlyName}
 }
 
-func CastDIBDeviceInfo(structType interface{}) DIBDeviceInfo {
-    castFunc := func(typ interface{}) DIBDeviceInfo {
+func CastDIBDeviceInfo(structType interface{}) *DIBDeviceInfo {
+    castFunc := func(typ interface{}) *DIBDeviceInfo {
         if casted, ok := typ.(DIBDeviceInfo); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*DIBDeviceInfo); ok {
-            return *casted
+            return casted
         }
-        return DIBDeviceInfo{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
index 7e21668..6112c56 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
@@ -44,15 +44,15 @@ func NewDIBSuppSvcFamilies(descriptionType uint8, serviceIds []*ServiceId) *DIBS
     return &DIBSuppSvcFamilies{DescriptionType: descriptionType, ServiceIds: serviceIds}
 }
 
-func CastDIBSuppSvcFamilies(structType interface{}) DIBSuppSvcFamilies {
-    castFunc := func(typ interface{}) DIBSuppSvcFamilies {
+func CastDIBSuppSvcFamilies(structType interface{}) *DIBSuppSvcFamilies {
+    castFunc := func(typ interface{}) *DIBSuppSvcFamilies {
         if casted, ok := typ.(DIBSuppSvcFamilies); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*DIBSuppSvcFamilies); ok {
-            return *casted
+            return casted
         }
-        return DIBSuppSvcFamilies{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go
index 16e68f9..2448cc3 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go
@@ -60,13 +60,13 @@ func NewDescriptionRequest(hpaiControlEndpoint *HPAIControlEndpoint, ) *KnxNetIp
     return child.Parent
 }
 
-func CastDescriptionRequest(structType interface{}) DescriptionRequest {
-    castFunc := func(typ interface{}) DescriptionRequest {
+func CastDescriptionRequest(structType interface{}) *DescriptionRequest {
+    castFunc := func(typ interface{}) *DescriptionRequest {
         if casted, ok := typ.(DescriptionRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*DescriptionRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastDescriptionRequest(casted.Child)
@@ -74,7 +74,7 @@ func CastDescriptionRequest(structType interface{}) DescriptionRequest {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastDescriptionRequest(casted.Child)
         }
-        return DescriptionRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go
index 9ce4719..43645f2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go
@@ -62,13 +62,13 @@ func NewDescriptionResponse(dibDeviceInfo *DIBDeviceInfo, dibSuppSvcFamilies *DI
     return child.Parent
 }
 
-func CastDescriptionResponse(structType interface{}) DescriptionResponse {
-    castFunc := func(typ interface{}) DescriptionResponse {
+func CastDescriptionResponse(structType interface{}) *DescriptionResponse {
+    castFunc := func(typ interface{}) *DescriptionResponse {
         if casted, ok := typ.(DescriptionResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*DescriptionResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastDescriptionResponse(casted.Child)
@@ -76,7 +76,7 @@ func CastDescriptionResponse(structType interface{}) DescriptionResponse {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastDescriptionResponse(casted.Child)
         }
-        return DescriptionResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go
index e460b99..af9190d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go
@@ -60,13 +60,13 @@ func NewDeviceConfigurationAck(deviceConfigurationAckDataBlock *DeviceConfigurat
     return child.Parent
 }
 
-func CastDeviceConfigurationAck(structType interface{}) DeviceConfigurationAck {
-    castFunc := func(typ interface{}) DeviceConfigurationAck {
+func CastDeviceConfigurationAck(structType interface{}) *DeviceConfigurationAck {
+    castFunc := func(typ interface{}) *DeviceConfigurationAck {
         if casted, ok := typ.(DeviceConfigurationAck); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*DeviceConfigurationAck); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastDeviceConfigurationAck(casted.Child)
@@ -74,7 +74,7 @@ func CastDeviceConfigurationAck(structType interface{}) DeviceConfigurationAck {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastDeviceConfigurationAck(casted.Child)
         }
-        return DeviceConfigurationAck{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.go
index f3652c3..2fba846 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAckDataBlock.go
@@ -45,15 +45,15 @@ func NewDeviceConfigurationAckDataBlock(communicationChannelId uint8, sequenceCo
     return &DeviceConfigurationAckDataBlock{CommunicationChannelId: communicationChannelId, SequenceCounter: sequenceCounter, Status: status}
 }
 
-func CastDeviceConfigurationAckDataBlock(structType interface{}) DeviceConfigurationAckDataBlock {
-    castFunc := func(typ interface{}) DeviceConfigurationAckDataBlock {
+func CastDeviceConfigurationAckDataBlock(structType interface{}) *DeviceConfigurationAckDataBlock {
+    castFunc := func(typ interface{}) *DeviceConfigurationAckDataBlock {
         if casted, ok := typ.(DeviceConfigurationAckDataBlock); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*DeviceConfigurationAckDataBlock); ok {
-            return *casted
+            return casted
         }
-        return DeviceConfigurationAckDataBlock{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go
index f138bae..76da211 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go
@@ -62,13 +62,13 @@ func NewDeviceConfigurationRequest(deviceConfigurationRequestDataBlock *DeviceCo
     return child.Parent
 }
 
-func CastDeviceConfigurationRequest(structType interface{}) DeviceConfigurationRequest {
-    castFunc := func(typ interface{}) DeviceConfigurationRequest {
+func CastDeviceConfigurationRequest(structType interface{}) *DeviceConfigurationRequest {
+    castFunc := func(typ interface{}) *DeviceConfigurationRequest {
         if casted, ok := typ.(DeviceConfigurationRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*DeviceConfigurationRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastDeviceConfigurationRequest(casted.Child)
@@ -76,7 +76,7 @@ func CastDeviceConfigurationRequest(structType interface{}) DeviceConfigurationR
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastDeviceConfigurationRequest(casted.Child)
         }
-        return DeviceConfigurationRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.go
index 61d48d5..0743060 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequestDataBlock.go
@@ -45,15 +45,15 @@ func NewDeviceConfigurationRequestDataBlock(communicationChannelId uint8, sequen
     return &DeviceConfigurationRequestDataBlock{CommunicationChannelId: communicationChannelId, SequenceCounter: sequenceCounter}
 }
 
-func CastDeviceConfigurationRequestDataBlock(structType interface{}) DeviceConfigurationRequestDataBlock {
-    castFunc := func(typ interface{}) DeviceConfigurationRequestDataBlock {
+func CastDeviceConfigurationRequestDataBlock(structType interface{}) *DeviceConfigurationRequestDataBlock {
+    castFunc := func(typ interface{}) *DeviceConfigurationRequestDataBlock {
         if casted, ok := typ.(DeviceConfigurationRequestDataBlock); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*DeviceConfigurationRequestDataBlock); ok {
-            return *casted
+            return casted
         }
-        return DeviceConfigurationRequestDataBlock{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceStatus.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceStatus.go
index 0e9b5fe..76a3b3c 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceStatus.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceStatus.go
@@ -44,15 +44,15 @@ func NewDeviceStatus(programMode bool) *DeviceStatus {
     return &DeviceStatus{ProgramMode: programMode}
 }
 
-func CastDeviceStatus(structType interface{}) DeviceStatus {
-    castFunc := func(typ interface{}) DeviceStatus {
+func CastDeviceStatus(structType interface{}) *DeviceStatus {
+    castFunc := func(typ interface{}) *DeviceStatus {
         if casted, ok := typ.(DeviceStatus); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*DeviceStatus); ok {
-            return *casted
+            return casted
         }
-        return DeviceStatus{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go
index 2fceabd..5004f0d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go
@@ -63,13 +63,13 @@ func NewDisconnectRequest(communicationChannelId uint8, hpaiControlEndpoint *HPA
     return child.Parent
 }
 
-func CastDisconnectRequest(structType interface{}) DisconnectRequest {
-    castFunc := func(typ interface{}) DisconnectRequest {
+func CastDisconnectRequest(structType interface{}) *DisconnectRequest {
+    castFunc := func(typ interface{}) *DisconnectRequest {
         if casted, ok := typ.(DisconnectRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*DisconnectRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastDisconnectRequest(casted.Child)
@@ -77,7 +77,7 @@ func CastDisconnectRequest(structType interface{}) DisconnectRequest {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastDisconnectRequest(casted.Child)
         }
-        return DisconnectRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectResponse.go
index 51fedcf..8720676 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectResponse.go
@@ -62,13 +62,13 @@ func NewDisconnectResponse(communicationChannelId uint8, status Status, ) *KnxNe
     return child.Parent
 }
 
-func CastDisconnectResponse(structType interface{}) DisconnectResponse {
-    castFunc := func(typ interface{}) DisconnectResponse {
+func CastDisconnectResponse(structType interface{}) *DisconnectResponse {
+    castFunc := func(typ interface{}) *DisconnectResponse {
         if casted, ok := typ.(DisconnectResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*DisconnectResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastDisconnectResponse(casted.Child)
@@ -76,7 +76,7 @@ func CastDisconnectResponse(structType interface{}) DisconnectResponse {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastDisconnectResponse(casted.Child)
         }
-        return DisconnectResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIControlEndpoint.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIControlEndpoint.go
index ed9f55b..5e97b81 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIControlEndpoint.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIControlEndpoint.go
@@ -45,15 +45,15 @@ func NewHPAIControlEndpoint(hostProtocolCode HostProtocolCode, ipAddress *IPAddr
     return &HPAIControlEndpoint{HostProtocolCode: hostProtocolCode, IpAddress: ipAddress, IpPort: ipPort}
 }
 
-func CastHPAIControlEndpoint(structType interface{}) HPAIControlEndpoint {
-    castFunc := func(typ interface{}) HPAIControlEndpoint {
+func CastHPAIControlEndpoint(structType interface{}) *HPAIControlEndpoint {
+    castFunc := func(typ interface{}) *HPAIControlEndpoint {
         if casted, ok := typ.(HPAIControlEndpoint); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*HPAIControlEndpoint); ok {
-            return *casted
+            return casted
         }
-        return HPAIControlEndpoint{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDataEndpoint.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDataEndpoint.go
index 8bd1242..f85aa17 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDataEndpoint.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDataEndpoint.go
@@ -45,15 +45,15 @@ func NewHPAIDataEndpoint(hostProtocolCode HostProtocolCode, ipAddress *IPAddress
     return &HPAIDataEndpoint{HostProtocolCode: hostProtocolCode, IpAddress: ipAddress, IpPort: ipPort}
 }
 
-func CastHPAIDataEndpoint(structType interface{}) HPAIDataEndpoint {
-    castFunc := func(typ interface{}) HPAIDataEndpoint {
+func CastHPAIDataEndpoint(structType interface{}) *HPAIDataEndpoint {
+    castFunc := func(typ interface{}) *HPAIDataEndpoint {
         if casted, ok := typ.(HPAIDataEndpoint); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*HPAIDataEndpoint); ok {
-            return *casted
+            return casted
         }
-        return HPAIDataEndpoint{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDiscoveryEndpoint.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDiscoveryEndpoint.go
index c9e29d5..e196516 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDiscoveryEndpoint.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/HPAIDiscoveryEndpoint.go
@@ -45,15 +45,15 @@ func NewHPAIDiscoveryEndpoint(hostProtocolCode HostProtocolCode, ipAddress *IPAd
     return &HPAIDiscoveryEndpoint{HostProtocolCode: hostProtocolCode, IpAddress: ipAddress, IpPort: ipPort}
 }
 
-func CastHPAIDiscoveryEndpoint(structType interface{}) HPAIDiscoveryEndpoint {
-    castFunc := func(typ interface{}) HPAIDiscoveryEndpoint {
+func CastHPAIDiscoveryEndpoint(structType interface{}) *HPAIDiscoveryEndpoint {
+    castFunc := func(typ interface{}) *HPAIDiscoveryEndpoint {
         if casted, ok := typ.(HPAIDiscoveryEndpoint); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*HPAIDiscoveryEndpoint); ok {
-            return *casted
+            return casted
         }
-        return HPAIDiscoveryEndpoint{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/HostProtocolCode.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/HostProtocolCode.go
index f2fb79a..68ad696 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/HostProtocolCode.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/HostProtocolCode.go
@@ -62,11 +62,14 @@ func (m HostProtocolCode) LengthInBytes() uint16 {
 }
 
 func HostProtocolCodeParse(io *utils.ReadBuffer) (HostProtocolCode, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(8)
+    if err != nil {
+        return 0, nil
+    }
+    return HostProtocolCodeValueOf(val), nil
 }
 
 func (e HostProtocolCode) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(8, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go
index aa6f665..263b669 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go
@@ -44,15 +44,15 @@ func NewIPAddress(addr []int8) *IPAddress {
     return &IPAddress{Addr: addr}
 }
 
-func CastIPAddress(structType interface{}) IPAddress {
-    castFunc := func(typ interface{}) IPAddress {
+func CastIPAddress(structType interface{}) *IPAddress {
+    castFunc := func(typ interface{}) *IPAddress {
         if casted, ok := typ.(IPAddress); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*IPAddress); ok {
-            return *casted
+            return casted
         }
-        return IPAddress{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxAddress.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxAddress.go
index 2fb13ab..58c7c5d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxAddress.go
@@ -45,15 +45,15 @@ func NewKnxAddress(mainGroup uint8, middleGroup uint8, subGroup uint8) *KnxAddre
     return &KnxAddress{MainGroup: mainGroup, MiddleGroup: middleGroup, SubGroup: subGroup}
 }
 
-func CastKnxAddress(structType interface{}) KnxAddress {
-    castFunc := func(typ interface{}) KnxAddress {
+func CastKnxAddress(structType interface{}) *KnxAddress {
+    castFunc := func(typ interface{}) *KnxAddress {
         if casted, ok := typ.(KnxAddress); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*KnxAddress); ok {
-            return *casted
+            return casted
         }
-        return KnxAddress{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapointType.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapointType.go
index ae95cd0..5037a7f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapointType.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxDatapointType.go
@@ -4366,12 +4366,3 @@ func (m KnxDatapointType) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func KnxDatapointTypeParse(io *utils.ReadBuffer) (KnxDatapointType, error) {
-    // TODO: Implement ...
-    return "", nil
-}
-
-func (e KnxDatapointType) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
-}
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go
index 80c9931..0eb07d2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go
@@ -57,15 +57,15 @@ func NewKnxGroupAddress() *KnxGroupAddress {
     return &KnxGroupAddress{}
 }
 
-func CastKnxGroupAddress(structType interface{}) KnxGroupAddress {
-    castFunc := func(typ interface{}) KnxGroupAddress {
+func CastKnxGroupAddress(structType interface{}) *KnxGroupAddress {
+    castFunc := func(typ interface{}) *KnxGroupAddress {
         if casted, ok := typ.(KnxGroupAddress); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*KnxGroupAddress); ok {
-            return *casted
+            return casted
         }
-        return KnxGroupAddress{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go
index de24971..11c6ee7 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go
@@ -62,13 +62,13 @@ func NewKnxGroupAddress2Level(mainGroup uint8, subGroup uint16, ) *KnxGroupAddre
     return child.Parent
 }
 
-func CastKnxGroupAddress2Level(structType interface{}) KnxGroupAddress2Level {
-    castFunc := func(typ interface{}) KnxGroupAddress2Level {
+func CastKnxGroupAddress2Level(structType interface{}) *KnxGroupAddress2Level {
+    castFunc := func(typ interface{}) *KnxGroupAddress2Level {
         if casted, ok := typ.(KnxGroupAddress2Level); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*KnxGroupAddress2Level); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxGroupAddress); ok {
             return CastKnxGroupAddress2Level(casted.Child)
@@ -76,7 +76,7 @@ func CastKnxGroupAddress2Level(structType interface{}) KnxGroupAddress2Level {
         if casted, ok := typ.(*KnxGroupAddress); ok {
             return CastKnxGroupAddress2Level(casted.Child)
         }
-        return KnxGroupAddress2Level{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go
index 11fff1f..57e75c3 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go
@@ -64,13 +64,13 @@ func NewKnxGroupAddress3Level(mainGroup uint8, middleGroup uint8, subGroup uint8
     return child.Parent
 }
 
-func CastKnxGroupAddress3Level(structType interface{}) KnxGroupAddress3Level {
-    castFunc := func(typ interface{}) KnxGroupAddress3Level {
+func CastKnxGroupAddress3Level(structType interface{}) *KnxGroupAddress3Level {
+    castFunc := func(typ interface{}) *KnxGroupAddress3Level {
         if casted, ok := typ.(KnxGroupAddress3Level); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*KnxGroupAddress3Level); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxGroupAddress); ok {
             return CastKnxGroupAddress3Level(casted.Child)
@@ -78,7 +78,7 @@ func CastKnxGroupAddress3Level(structType interface{}) KnxGroupAddress3Level {
         if casted, ok := typ.(*KnxGroupAddress); ok {
             return CastKnxGroupAddress3Level(casted.Child)
         }
-        return KnxGroupAddress3Level{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go
index 4a39b8a..d5b041d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go
@@ -60,13 +60,13 @@ func NewKnxGroupAddressFreeLevel(subGroup uint16, ) *KnxGroupAddress {
     return child.Parent
 }
 
-func CastKnxGroupAddressFreeLevel(structType interface{}) KnxGroupAddressFreeLevel {
-    castFunc := func(typ interface{}) KnxGroupAddressFreeLevel {
+func CastKnxGroupAddressFreeLevel(structType interface{}) *KnxGroupAddressFreeLevel {
+    castFunc := func(typ interface{}) *KnxGroupAddressFreeLevel {
         if casted, ok := typ.(KnxGroupAddressFreeLevel); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*KnxGroupAddressFreeLevel); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxGroupAddress); ok {
             return CastKnxGroupAddressFreeLevel(casted.Child)
@@ -74,7 +74,7 @@ func CastKnxGroupAddressFreeLevel(structType interface{}) KnxGroupAddressFreeLev
         if casted, ok := typ.(*KnxGroupAddress); ok {
             return CastKnxGroupAddressFreeLevel(casted.Child)
         }
-        return KnxGroupAddressFreeLevel{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxLayer.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxLayer.go
index 7207513..7413a9f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxLayer.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxLayer.go
@@ -65,11 +65,14 @@ func (m KnxLayer) LengthInBytes() uint16 {
 }
 
 func KnxLayerParse(io *utils.ReadBuffer) (KnxLayer, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(8)
+    if err != nil {
+        return 0, nil
+    }
+    return KnxLayerValueOf(val), nil
 }
 
 func (e KnxLayer) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(8, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpCore.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpCore.go
index c84372f..0855e1b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpCore.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpCore.go
@@ -60,13 +60,13 @@ func NewKnxNetIpCore(version uint8, ) *ServiceId {
     return child.Parent
 }
 
-func CastKnxNetIpCore(structType interface{}) KnxNetIpCore {
-    castFunc := func(typ interface{}) KnxNetIpCore {
+func CastKnxNetIpCore(structType interface{}) *KnxNetIpCore {
+    castFunc := func(typ interface{}) *KnxNetIpCore {
         if casted, ok := typ.(KnxNetIpCore); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*KnxNetIpCore); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ServiceId); ok {
             return CastKnxNetIpCore(casted.Child)
@@ -74,7 +74,7 @@ func CastKnxNetIpCore(structType interface{}) KnxNetIpCore {
         if casted, ok := typ.(*ServiceId); ok {
             return CastKnxNetIpCore(casted.Child)
         }
-        return KnxNetIpCore{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpDeviceManagement.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpDeviceManagement.go
index 4b9ea80..ae44791 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpDeviceManagement.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpDeviceManagement.go
@@ -60,13 +60,13 @@ func NewKnxNetIpDeviceManagement(version uint8, ) *ServiceId {
     return child.Parent
 }
 
-func CastKnxNetIpDeviceManagement(structType interface{}) KnxNetIpDeviceManagement {
-    castFunc := func(typ interface{}) KnxNetIpDeviceManagement {
+func CastKnxNetIpDeviceManagement(structType interface{}) *KnxNetIpDeviceManagement {
+    castFunc := func(typ interface{}) *KnxNetIpDeviceManagement {
         if casted, ok := typ.(KnxNetIpDeviceManagement); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*KnxNetIpDeviceManagement); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ServiceId); ok {
             return CastKnxNetIpDeviceManagement(casted.Child)
@@ -74,7 +74,7 @@ func CastKnxNetIpDeviceManagement(structType interface{}) KnxNetIpDeviceManageme
         if casted, ok := typ.(*ServiceId); ok {
             return CastKnxNetIpDeviceManagement(casted.Child)
         }
-        return KnxNetIpDeviceManagement{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpMessage.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpMessage.go
index dcc4dd9..62801a5 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpMessage.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpMessage.go
@@ -61,15 +61,15 @@ func NewKnxNetIpMessage() *KnxNetIpMessage {
     return &KnxNetIpMessage{}
 }
 
-func CastKnxNetIpMessage(structType interface{}) KnxNetIpMessage {
-    castFunc := func(typ interface{}) KnxNetIpMessage {
+func CastKnxNetIpMessage(structType interface{}) *KnxNetIpMessage {
+    castFunc := func(typ interface{}) *KnxNetIpMessage {
         if casted, ok := typ.(KnxNetIpMessage); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*KnxNetIpMessage); ok {
-            return *casted
+            return casted
         }
-        return KnxNetIpMessage{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpTunneling.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpTunneling.go
index fcd0209..d0bb610 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpTunneling.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpTunneling.go
@@ -60,13 +60,13 @@ func NewKnxNetIpTunneling(version uint8, ) *ServiceId {
     return child.Parent
 }
 
-func CastKnxNetIpTunneling(structType interface{}) KnxNetIpTunneling {
-    castFunc := func(typ interface{}) KnxNetIpTunneling {
+func CastKnxNetIpTunneling(structType interface{}) *KnxNetIpTunneling {
+    castFunc := func(typ interface{}) *KnxNetIpTunneling {
         if casted, ok := typ.(KnxNetIpTunneling); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*KnxNetIpTunneling); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ServiceId); ok {
             return CastKnxNetIpTunneling(casted.Child)
@@ -74,7 +74,7 @@ func CastKnxNetIpTunneling(structType interface{}) KnxNetIpTunneling {
         if casted, ok := typ.(*ServiceId); ok {
             return CastKnxNetIpTunneling(casted.Child)
         }
-        return KnxNetIpTunneling{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetObjectServer.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetObjectServer.go
index c6ab3b6..c8111f5 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetObjectServer.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetObjectServer.go
@@ -60,13 +60,13 @@ func NewKnxNetObjectServer(version uint8, ) *ServiceId {
     return child.Parent
 }
 
-func CastKnxNetObjectServer(structType interface{}) KnxNetObjectServer {
-    castFunc := func(typ interface{}) KnxNetObjectServer {
+func CastKnxNetObjectServer(structType interface{}) *KnxNetObjectServer {
+    castFunc := func(typ interface{}) *KnxNetObjectServer {
         if casted, ok := typ.(KnxNetObjectServer); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*KnxNetObjectServer); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ServiceId); ok {
             return CastKnxNetObjectServer(casted.Child)
@@ -74,7 +74,7 @@ func CastKnxNetObjectServer(structType interface{}) KnxNetObjectServer {
         if casted, ok := typ.(*ServiceId); ok {
             return CastKnxNetObjectServer(casted.Child)
         }
-        return KnxNetObjectServer{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.go
index 642c666..d608d6c 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.go
@@ -60,13 +60,13 @@ func NewKnxNetRemoteConfigurationAndDiagnosis(version uint8, ) *ServiceId {
     return child.Parent
 }
 
-func CastKnxNetRemoteConfigurationAndDiagnosis(structType interface{}) KnxNetRemoteConfigurationAndDiagnosis {
-    castFunc := func(typ interface{}) KnxNetRemoteConfigurationAndDiagnosis {
+func CastKnxNetRemoteConfigurationAndDiagnosis(structType interface{}) *KnxNetRemoteConfigurationAndDiagnosis {
+    castFunc := func(typ interface{}) *KnxNetRemoteConfigurationAndDiagnosis {
         if casted, ok := typ.(KnxNetRemoteConfigurationAndDiagnosis); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*KnxNetRemoteConfigurationAndDiagnosis); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ServiceId); ok {
             return CastKnxNetRemoteConfigurationAndDiagnosis(casted.Child)
@@ -74,7 +74,7 @@ func CastKnxNetRemoteConfigurationAndDiagnosis(structType interface{}) KnxNetRem
         if casted, ok := typ.(*ServiceId); ok {
             return CastKnxNetRemoteConfigurationAndDiagnosis(casted.Child)
         }
-        return KnxNetRemoteConfigurationAndDiagnosis{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteLogging.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteLogging.go
index 46f7c6d..6c552d7 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteLogging.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteLogging.go
@@ -60,13 +60,13 @@ func NewKnxNetRemoteLogging(version uint8, ) *ServiceId {
     return child.Parent
 }
 
-func CastKnxNetRemoteLogging(structType interface{}) KnxNetRemoteLogging {
-    castFunc := func(typ interface{}) KnxNetRemoteLogging {
+func CastKnxNetRemoteLogging(structType interface{}) *KnxNetRemoteLogging {
+    castFunc := func(typ interface{}) *KnxNetRemoteLogging {
         if casted, ok := typ.(KnxNetRemoteLogging); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*KnxNetRemoteLogging); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ServiceId); ok {
             return CastKnxNetRemoteLogging(casted.Child)
@@ -74,7 +74,7 @@ func CastKnxNetRemoteLogging(structType interface{}) KnxNetRemoteLogging {
         if casted, ok := typ.(*ServiceId); ok {
             return CastKnxNetRemoteLogging(casted.Child)
         }
-        return KnxNetRemoteLogging{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go
index 575d205..7404aa4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go
@@ -44,15 +44,15 @@ func NewMACAddress(addr []int8) *MACAddress {
     return &MACAddress{Addr: addr}
 }
 
-func CastMACAddress(structType interface{}) MACAddress {
-    castFunc := func(typ interface{}) MACAddress {
+func CastMACAddress(structType interface{}) *MACAddress {
+    castFunc := func(typ interface{}) *MACAddress {
         if casted, ok := typ.(MACAddress); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*MACAddress); ok {
-            return *casted
+            return casted
         }
-        return MACAddress{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ProjectInstallationIdentifier.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ProjectInstallationIdentifier.go
index 8259fbd..3b9cdec 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ProjectInstallationIdentifier.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ProjectInstallationIdentifier.go
@@ -44,15 +44,15 @@ func NewProjectInstallationIdentifier(projectNumber uint8, installationNumber ui
     return &ProjectInstallationIdentifier{ProjectNumber: projectNumber, InstallationNumber: installationNumber}
 }
 
-func CastProjectInstallationIdentifier(structType interface{}) ProjectInstallationIdentifier {
-    castFunc := func(typ interface{}) ProjectInstallationIdentifier {
+func CastProjectInstallationIdentifier(structType interface{}) *ProjectInstallationIdentifier {
+    castFunc := func(typ interface{}) *ProjectInstallationIdentifier {
         if casted, ok := typ.(ProjectInstallationIdentifier); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ProjectInstallationIdentifier); ok {
-            return *casted
+            return casted
         }
-        return ProjectInstallationIdentifier{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/RelativeTimestamp.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/RelativeTimestamp.go
index 7c446e5..60a6e5d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/RelativeTimestamp.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/RelativeTimestamp.go
@@ -43,15 +43,15 @@ func NewRelativeTimestamp(timestamp uint16) *RelativeTimestamp {
     return &RelativeTimestamp{Timestamp: timestamp}
 }
 
-func CastRelativeTimestamp(structType interface{}) RelativeTimestamp {
-    castFunc := func(typ interface{}) RelativeTimestamp {
+func CastRelativeTimestamp(structType interface{}) *RelativeTimestamp {
+    castFunc := func(typ interface{}) *RelativeTimestamp {
         if casted, ok := typ.(RelativeTimestamp); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*RelativeTimestamp); ok {
-            return *casted
+            return casted
         }
-        return RelativeTimestamp{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/RoutingIndication.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/RoutingIndication.go
index bae62e2..e400294 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/RoutingIndication.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/RoutingIndication.go
@@ -57,13 +57,13 @@ func NewRoutingIndication() *KnxNetIpMessage {
     return child.Parent
 }
 
-func CastRoutingIndication(structType interface{}) RoutingIndication {
-    castFunc := func(typ interface{}) RoutingIndication {
+func CastRoutingIndication(structType interface{}) *RoutingIndication {
+    castFunc := func(typ interface{}) *RoutingIndication {
         if casted, ok := typ.(RoutingIndication); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*RoutingIndication); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastRoutingIndication(casted.Child)
@@ -71,7 +71,7 @@ func CastRoutingIndication(structType interface{}) RoutingIndication {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastRoutingIndication(casted.Child)
         }
-        return RoutingIndication{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchRequest.go
index bc079e7..f3c1d22 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchRequest.go
@@ -60,13 +60,13 @@ func NewSearchRequest(hpaiIDiscoveryEndpoint *HPAIDiscoveryEndpoint, ) *KnxNetIp
     return child.Parent
 }
 
-func CastSearchRequest(structType interface{}) SearchRequest {
-    castFunc := func(typ interface{}) SearchRequest {
+func CastSearchRequest(structType interface{}) *SearchRequest {
+    castFunc := func(typ interface{}) *SearchRequest {
         if casted, ok := typ.(SearchRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*SearchRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastSearchRequest(casted.Child)
@@ -74,7 +74,7 @@ func CastSearchRequest(structType interface{}) SearchRequest {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastSearchRequest(casted.Child)
         }
-        return SearchRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchResponse.go
index 3584294..58bc04f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchResponse.go
@@ -64,13 +64,13 @@ func NewSearchResponse(hpaiControlEndpoint *HPAIControlEndpoint, dibDeviceInfo *
     return child.Parent
 }
 
-func CastSearchResponse(structType interface{}) SearchResponse {
-    castFunc := func(typ interface{}) SearchResponse {
+func CastSearchResponse(structType interface{}) *SearchResponse {
+    castFunc := func(typ interface{}) *SearchResponse {
         if casted, ok := typ.(SearchResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*SearchResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastSearchResponse(casted.Child)
@@ -78,7 +78,7 @@ func CastSearchResponse(structType interface{}) SearchResponse {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastSearchResponse(casted.Child)
         }
-        return SearchResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ServiceId.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ServiceId.go
index fcbce41..8486e45 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ServiceId.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ServiceId.go
@@ -57,15 +57,15 @@ func NewServiceId() *ServiceId {
     return &ServiceId{}
 }
 
-func CastServiceId(structType interface{}) ServiceId {
-    castFunc := func(typ interface{}) ServiceId {
+func CastServiceId(structType interface{}) *ServiceId {
+    castFunc := func(typ interface{}) *ServiceId {
         if casted, ok := typ.(ServiceId); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ServiceId); ok {
-            return *casted
+            return casted
         }
-        return ServiceId{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/Status.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/Status.go
index dad07b7..754a8c6 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/Status.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/Status.go
@@ -92,11 +92,14 @@ func (m Status) LengthInBytes() uint16 {
 }
 
 func StatusParse(io *utils.ReadBuffer) (Status, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(8)
+    if err != nil {
+        return 0, nil
+    }
+    return StatusValueOf(val), nil
 }
 
 func (e Status) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(8, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TPCI.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TPCI.go
index fc04476..e4690ea 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TPCI.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TPCI.go
@@ -68,11 +68,14 @@ func (m TPCI) LengthInBytes() uint16 {
 }
 
 func TPCIParse(io *utils.ReadBuffer) (TPCI, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(2)
+    if err != nil {
+        return 0, nil
+    }
+    return TPCIValueOf(val), nil
 }
 
 func (e TPCI) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(2, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequest.go
index b29764e..f368ca2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequest.go
@@ -62,13 +62,13 @@ func NewTunnelingRequest(tunnelingRequestDataBlock *TunnelingRequestDataBlock, c
     return child.Parent
 }
 
-func CastTunnelingRequest(structType interface{}) TunnelingRequest {
-    castFunc := func(typ interface{}) TunnelingRequest {
+func CastTunnelingRequest(structType interface{}) *TunnelingRequest {
+    castFunc := func(typ interface{}) *TunnelingRequest {
         if casted, ok := typ.(TunnelingRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*TunnelingRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastTunnelingRequest(casted.Child)
@@ -76,7 +76,7 @@ func CastTunnelingRequest(structType interface{}) TunnelingRequest {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastTunnelingRequest(casted.Child)
         }
-        return TunnelingRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequestDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequestDataBlock.go
index a6cca8b..0b2d39e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequestDataBlock.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequestDataBlock.go
@@ -45,15 +45,15 @@ func NewTunnelingRequestDataBlock(communicationChannelId uint8, sequenceCounter
     return &TunnelingRequestDataBlock{CommunicationChannelId: communicationChannelId, SequenceCounter: sequenceCounter}
 }
 
-func CastTunnelingRequestDataBlock(structType interface{}) TunnelingRequestDataBlock {
-    castFunc := func(typ interface{}) TunnelingRequestDataBlock {
+func CastTunnelingRequestDataBlock(structType interface{}) *TunnelingRequestDataBlock {
+    castFunc := func(typ interface{}) *TunnelingRequestDataBlock {
         if casted, ok := typ.(TunnelingRequestDataBlock); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*TunnelingRequestDataBlock); ok {
-            return *casted
+            return casted
         }
-        return TunnelingRequestDataBlock{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponse.go
index 9cc097a..f603776 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponse.go
@@ -60,13 +60,13 @@ func NewTunnelingResponse(tunnelingResponseDataBlock *TunnelingResponseDataBlock
     return child.Parent
 }
 
-func CastTunnelingResponse(structType interface{}) TunnelingResponse {
-    castFunc := func(typ interface{}) TunnelingResponse {
+func CastTunnelingResponse(structType interface{}) *TunnelingResponse {
+    castFunc := func(typ interface{}) *TunnelingResponse {
         if casted, ok := typ.(TunnelingResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*TunnelingResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastTunnelingResponse(casted.Child)
@@ -74,7 +74,7 @@ func CastTunnelingResponse(structType interface{}) TunnelingResponse {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastTunnelingResponse(casted.Child)
         }
-        return TunnelingResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponseDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponseDataBlock.go
index 50d2ec2..198cafc 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponseDataBlock.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponseDataBlock.go
@@ -45,15 +45,15 @@ func NewTunnelingResponseDataBlock(communicationChannelId uint8, sequenceCounter
     return &TunnelingResponseDataBlock{CommunicationChannelId: communicationChannelId, SequenceCounter: sequenceCounter, Status: status}
 }
 
-func CastTunnelingResponseDataBlock(structType interface{}) TunnelingResponseDataBlock {
-    castFunc := func(typ interface{}) TunnelingResponseDataBlock {
+func CastTunnelingResponseDataBlock(structType interface{}) *TunnelingResponseDataBlock {
+    castFunc := func(typ interface{}) *TunnelingResponseDataBlock {
         if casted, ok := typ.(TunnelingResponseDataBlock); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*TunnelingResponseDataBlock); ok {
-            return *casted
+            return casted
         }
-        return TunnelingResponseDataBlock{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
index d16b2b5..5039db9 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
@@ -61,13 +61,13 @@ func NewUnknownMessage(unknownData []int8, ) *KnxNetIpMessage {
     return child.Parent
 }
 
-func CastUnknownMessage(structType interface{}) UnknownMessage {
-    castFunc := func(typ interface{}) UnknownMessage {
+func CastUnknownMessage(structType interface{}) *UnknownMessage {
+    castFunc := func(typ interface{}) *UnknownMessage {
         if casted, ok := typ.(UnknownMessage); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*UnknownMessage); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(KnxNetIpMessage); ok {
             return CastUnknownMessage(casted.Child)
@@ -75,7 +75,7 @@ func CastUnknownMessage(structType interface{}) UnknownMessage {
         if casted, ok := typ.(*KnxNetIpMessage); ok {
             return CastUnknownMessage(casted.Child)
         }
-        return UnknownMessage{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/ModbusReader.go b/plc4go/internal/plc4go/modbus/ModbusReader.go
index b1d5ed6..2b1596b 100644
--- a/plc4go/internal/plc4go/modbus/ModbusReader.go
+++ b/plc4go/internal/plc4go/modbus/ModbusReader.go
@@ -124,7 +124,7 @@ func (m *ModbusReader) Read(readRequest model.PlcReadRequest) <-chan model.PlcRe
 			// Convert the response into an ADU
 			responseAdu := modbusModel.CastModbusTcpADU(response)
 			// Convert the modbus response into a PLC4X response
-			readResponse, err := m.ToPlc4xReadResponse(responseAdu, readRequest)
+			readResponse, err := m.ToPlc4xReadResponse(*responseAdu, readRequest)
 
 			if err != nil {
 				result <- model.PlcReadRequestResult{
diff --git a/plc4go/internal/plc4go/modbus/ModbusWriter.go b/plc4go/internal/plc4go/modbus/ModbusWriter.go
index 072391c..9801d64 100644
--- a/plc4go/internal/plc4go/modbus/ModbusWriter.go
+++ b/plc4go/internal/plc4go/modbus/ModbusWriter.go
@@ -144,7 +144,7 @@ func (m ModbusWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.Plc
 			// Convert the response into an ADU
 			responseAdu := modbusModel.CastModbusTcpADU(response)
 			// Convert the modbus response into a PLC4X response
-			readResponse, err := m.ToPlc4xWriteResponse(requestAdu, responseAdu, writeRequest)
+			readResponse, err := m.ToPlc4xWriteResponse(requestAdu, *responseAdu, writeRequest)
 
 			if err != nil {
 				result <- model.PlcWriteRequestResult{
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusConstants.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusConstants.go
index ca8d1ab..4a75222 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusConstants.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusConstants.go
@@ -46,15 +46,15 @@ func NewModbusConstants() *ModbusConstants {
     return &ModbusConstants{}
 }
 
-func CastModbusConstants(structType interface{}) ModbusConstants {
-    castFunc := func(typ interface{}) ModbusConstants {
+func CastModbusConstants(structType interface{}) *ModbusConstants {
+    castFunc := func(typ interface{}) *ModbusConstants {
         if casted, ok := typ.(ModbusConstants); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusConstants); ok {
-            return *casted
+            return casted
         }
-        return ModbusConstants{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusDataTypeSizes.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusDataTypeSizes.go
index 694d9d4..aea1ee2 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusDataTypeSizes.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusDataTypeSizes.go
@@ -226,12 +226,3 @@ func (m ModbusDataTypeSizes) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func ModbusDataTypeSizesParse(io *utils.ReadBuffer) (ModbusDataTypeSizes, error) {
-    // TODO: Implement ...
-    return "", nil
-}
-
-func (e ModbusDataTypeSizes) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
-}
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusErrorCode.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusErrorCode.go
index 05ddce9..e9e0d50 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusErrorCode.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusErrorCode.go
@@ -86,11 +86,14 @@ func (m ModbusErrorCode) LengthInBytes() uint16 {
 }
 
 func ModbusErrorCodeParse(io *utils.ReadBuffer) (ModbusErrorCode, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(8)
+    if err != nil {
+        return 0, nil
+    }
+    return ModbusErrorCodeValueOf(val), nil
 }
 
 func (e ModbusErrorCode) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(8, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go
index 59dcfd4..598ed8d 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go
@@ -59,15 +59,15 @@ func NewModbusPDU() *ModbusPDU {
     return &ModbusPDU{}
 }
 
-func CastModbusPDU(structType interface{}) ModbusPDU {
-    castFunc := func(typ interface{}) ModbusPDU {
+func CastModbusPDU(structType interface{}) *ModbusPDU {
+    castFunc := func(typ interface{}) *ModbusPDU {
         if casted, ok := typ.(ModbusPDU); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDU); ok {
-            return *casted
+            return casted
         }
-        return ModbusPDU{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go
index ab17b11..3e0fd65 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go
@@ -70,13 +70,13 @@ func NewModbusPDUDiagnosticRequest(subFunction uint16, data uint16, ) *ModbusPDU
     return child.Parent
 }
 
-func CastModbusPDUDiagnosticRequest(structType interface{}) ModbusPDUDiagnosticRequest {
-    castFunc := func(typ interface{}) ModbusPDUDiagnosticRequest {
+func CastModbusPDUDiagnosticRequest(structType interface{}) *ModbusPDUDiagnosticRequest {
+    castFunc := func(typ interface{}) *ModbusPDUDiagnosticRequest {
         if casted, ok := typ.(ModbusPDUDiagnosticRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUDiagnosticRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUDiagnosticRequest(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUDiagnosticRequest(structType interface{}) ModbusPDUDiagnosticR
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUDiagnosticRequest(casted.Child)
         }
-        return ModbusPDUDiagnosticRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go
index 485b4a4..942be5b 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go
@@ -70,13 +70,13 @@ func NewModbusPDUDiagnosticResponse(subFunction uint16, data uint16, ) *ModbusPD
     return child.Parent
 }
 
-func CastModbusPDUDiagnosticResponse(structType interface{}) ModbusPDUDiagnosticResponse {
-    castFunc := func(typ interface{}) ModbusPDUDiagnosticResponse {
+func CastModbusPDUDiagnosticResponse(structType interface{}) *ModbusPDUDiagnosticResponse {
+    castFunc := func(typ interface{}) *ModbusPDUDiagnosticResponse {
         if casted, ok := typ.(ModbusPDUDiagnosticResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUDiagnosticResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUDiagnosticResponse(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUDiagnosticResponse(structType interface{}) ModbusPDUDiagnostic
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUDiagnosticResponse(casted.Child)
         }
-        return ModbusPDUDiagnosticResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go
index ab934d4..5794c51 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go
@@ -68,13 +68,13 @@ func NewModbusPDUError(exceptionCode ModbusErrorCode, ) *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUError(structType interface{}) ModbusPDUError {
-    castFunc := func(typ interface{}) ModbusPDUError {
+func CastModbusPDUError(structType interface{}) *ModbusPDUError {
+    castFunc := func(typ interface{}) *ModbusPDUError {
         if casted, ok := typ.(ModbusPDUError); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUError); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUError(casted.Child)
@@ -82,7 +82,7 @@ func CastModbusPDUError(structType interface{}) ModbusPDUError {
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUError(casted.Child)
         }
-        return ModbusPDUError{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go
index c40ed49..6fe0c14 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go
@@ -65,13 +65,13 @@ func NewModbusPDUGetComEventCounterRequest() *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUGetComEventCounterRequest(structType interface{}) ModbusPDUGetComEventCounterRequest {
-    castFunc := func(typ interface{}) ModbusPDUGetComEventCounterRequest {
+func CastModbusPDUGetComEventCounterRequest(structType interface{}) *ModbusPDUGetComEventCounterRequest {
+    castFunc := func(typ interface{}) *ModbusPDUGetComEventCounterRequest {
         if casted, ok := typ.(ModbusPDUGetComEventCounterRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUGetComEventCounterRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUGetComEventCounterRequest(casted.Child)
@@ -79,7 +79,7 @@ func CastModbusPDUGetComEventCounterRequest(structType interface{}) ModbusPDUGet
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUGetComEventCounterRequest(casted.Child)
         }
-        return ModbusPDUGetComEventCounterRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go
index 899d26c..de805f7 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go
@@ -70,13 +70,13 @@ func NewModbusPDUGetComEventCounterResponse(status uint16, eventCount uint16, )
     return child.Parent
 }
 
-func CastModbusPDUGetComEventCounterResponse(structType interface{}) ModbusPDUGetComEventCounterResponse {
-    castFunc := func(typ interface{}) ModbusPDUGetComEventCounterResponse {
+func CastModbusPDUGetComEventCounterResponse(structType interface{}) *ModbusPDUGetComEventCounterResponse {
+    castFunc := func(typ interface{}) *ModbusPDUGetComEventCounterResponse {
         if casted, ok := typ.(ModbusPDUGetComEventCounterResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUGetComEventCounterResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUGetComEventCounterResponse(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUGetComEventCounterResponse(structType interface{}) ModbusPDUGe
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUGetComEventCounterResponse(casted.Child)
         }
-        return ModbusPDUGetComEventCounterResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go
index 5a725bb..76f1e86 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go
@@ -65,13 +65,13 @@ func NewModbusPDUGetComEventLogRequest() *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUGetComEventLogRequest(structType interface{}) ModbusPDUGetComEventLogRequest {
-    castFunc := func(typ interface{}) ModbusPDUGetComEventLogRequest {
+func CastModbusPDUGetComEventLogRequest(structType interface{}) *ModbusPDUGetComEventLogRequest {
+    castFunc := func(typ interface{}) *ModbusPDUGetComEventLogRequest {
         if casted, ok := typ.(ModbusPDUGetComEventLogRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUGetComEventLogRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUGetComEventLogRequest(casted.Child)
@@ -79,7 +79,7 @@ func CastModbusPDUGetComEventLogRequest(structType interface{}) ModbusPDUGetComE
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUGetComEventLogRequest(casted.Child)
         }
-        return ModbusPDUGetComEventLogRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
index babba52..742b90e 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
@@ -75,13 +75,13 @@ func NewModbusPDUGetComEventLogResponse(status uint16, eventCount uint16, messag
     return child.Parent
 }
 
-func CastModbusPDUGetComEventLogResponse(structType interface{}) ModbusPDUGetComEventLogResponse {
-    castFunc := func(typ interface{}) ModbusPDUGetComEventLogResponse {
+func CastModbusPDUGetComEventLogResponse(structType interface{}) *ModbusPDUGetComEventLogResponse {
+    castFunc := func(typ interface{}) *ModbusPDUGetComEventLogResponse {
         if casted, ok := typ.(ModbusPDUGetComEventLogResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUGetComEventLogResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUGetComEventLogResponse(casted.Child)
@@ -89,7 +89,7 @@ func CastModbusPDUGetComEventLogResponse(structType interface{}) ModbusPDUGetCom
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUGetComEventLogResponse(casted.Child)
         }
-        return ModbusPDUGetComEventLogResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go
index 8f4db67..2cf5eaf 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go
@@ -72,13 +72,13 @@ func NewModbusPDUMaskWriteHoldingRegisterRequest(referenceAddress uint16, andMas
     return child.Parent
 }
 
-func CastModbusPDUMaskWriteHoldingRegisterRequest(structType interface{}) ModbusPDUMaskWriteHoldingRegisterRequest {
-    castFunc := func(typ interface{}) ModbusPDUMaskWriteHoldingRegisterRequest {
+func CastModbusPDUMaskWriteHoldingRegisterRequest(structType interface{}) *ModbusPDUMaskWriteHoldingRegisterRequest {
+    castFunc := func(typ interface{}) *ModbusPDUMaskWriteHoldingRegisterRequest {
         if casted, ok := typ.(ModbusPDUMaskWriteHoldingRegisterRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUMaskWriteHoldingRegisterRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUMaskWriteHoldingRegisterRequest(casted.Child)
@@ -86,7 +86,7 @@ func CastModbusPDUMaskWriteHoldingRegisterRequest(structType interface{}) Modbus
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUMaskWriteHoldingRegisterRequest(casted.Child)
         }
-        return ModbusPDUMaskWriteHoldingRegisterRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go
index 31405d6..871a18c 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go
@@ -72,13 +72,13 @@ func NewModbusPDUMaskWriteHoldingRegisterResponse(referenceAddress uint16, andMa
     return child.Parent
 }
 
-func CastModbusPDUMaskWriteHoldingRegisterResponse(structType interface{}) ModbusPDUMaskWriteHoldingRegisterResponse {
-    castFunc := func(typ interface{}) ModbusPDUMaskWriteHoldingRegisterResponse {
+func CastModbusPDUMaskWriteHoldingRegisterResponse(structType interface{}) *ModbusPDUMaskWriteHoldingRegisterResponse {
+    castFunc := func(typ interface{}) *ModbusPDUMaskWriteHoldingRegisterResponse {
         if casted, ok := typ.(ModbusPDUMaskWriteHoldingRegisterResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUMaskWriteHoldingRegisterResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUMaskWriteHoldingRegisterResponse(casted.Child)
@@ -86,7 +86,7 @@ func CastModbusPDUMaskWriteHoldingRegisterResponse(structType interface{}) Modbu
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUMaskWriteHoldingRegisterResponse(casted.Child)
         }
-        return ModbusPDUMaskWriteHoldingRegisterResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go
index 352389a..fc5828f 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go
@@ -70,13 +70,13 @@ func NewModbusPDUReadCoilsRequest(startingAddress uint16, quantity uint16, ) *Mo
     return child.Parent
 }
 
-func CastModbusPDUReadCoilsRequest(structType interface{}) ModbusPDUReadCoilsRequest {
-    castFunc := func(typ interface{}) ModbusPDUReadCoilsRequest {
+func CastModbusPDUReadCoilsRequest(structType interface{}) *ModbusPDUReadCoilsRequest {
+    castFunc := func(typ interface{}) *ModbusPDUReadCoilsRequest {
         if casted, ok := typ.(ModbusPDUReadCoilsRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadCoilsRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadCoilsRequest(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUReadCoilsRequest(structType interface{}) ModbusPDUReadCoilsReq
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadCoilsRequest(casted.Child)
         }
-        return ModbusPDUReadCoilsRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
index eb581ab..85bd402 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
@@ -69,13 +69,13 @@ func NewModbusPDUReadCoilsResponse(value []int8, ) *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUReadCoilsResponse(structType interface{}) ModbusPDUReadCoilsResponse {
-    castFunc := func(typ interface{}) ModbusPDUReadCoilsResponse {
+func CastModbusPDUReadCoilsResponse(structType interface{}) *ModbusPDUReadCoilsResponse {
+    castFunc := func(typ interface{}) *ModbusPDUReadCoilsResponse {
         if casted, ok := typ.(ModbusPDUReadCoilsResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadCoilsResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadCoilsResponse(casted.Child)
@@ -83,7 +83,7 @@ func CastModbusPDUReadCoilsResponse(structType interface{}) ModbusPDUReadCoilsRe
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadCoilsResponse(casted.Child)
         }
-        return ModbusPDUReadCoilsResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go
index ccb88fc..1ce87e4 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go
@@ -65,13 +65,13 @@ func NewModbusPDUReadDeviceIdentificationRequest() *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUReadDeviceIdentificationRequest(structType interface{}) ModbusPDUReadDeviceIdentificationRequest {
-    castFunc := func(typ interface{}) ModbusPDUReadDeviceIdentificationRequest {
+func CastModbusPDUReadDeviceIdentificationRequest(structType interface{}) *ModbusPDUReadDeviceIdentificationRequest {
+    castFunc := func(typ interface{}) *ModbusPDUReadDeviceIdentificationRequest {
         if casted, ok := typ.(ModbusPDUReadDeviceIdentificationRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadDeviceIdentificationRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadDeviceIdentificationRequest(casted.Child)
@@ -79,7 +79,7 @@ func CastModbusPDUReadDeviceIdentificationRequest(structType interface{}) Modbus
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadDeviceIdentificationRequest(casted.Child)
         }
-        return ModbusPDUReadDeviceIdentificationRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go
index 3002d47..363b964 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go
@@ -65,13 +65,13 @@ func NewModbusPDUReadDeviceIdentificationResponse() *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUReadDeviceIdentificationResponse(structType interface{}) ModbusPDUReadDeviceIdentificationResponse {
-    castFunc := func(typ interface{}) ModbusPDUReadDeviceIdentificationResponse {
+func CastModbusPDUReadDeviceIdentificationResponse(structType interface{}) *ModbusPDUReadDeviceIdentificationResponse {
+    castFunc := func(typ interface{}) *ModbusPDUReadDeviceIdentificationResponse {
         if casted, ok := typ.(ModbusPDUReadDeviceIdentificationResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadDeviceIdentificationResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadDeviceIdentificationResponse(casted.Child)
@@ -79,7 +79,7 @@ func CastModbusPDUReadDeviceIdentificationResponse(structType interface{}) Modbu
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadDeviceIdentificationResponse(casted.Child)
         }
-        return ModbusPDUReadDeviceIdentificationResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go
index d3c5d02..8a3b635 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go
@@ -70,13 +70,13 @@ func NewModbusPDUReadDiscreteInputsRequest(startingAddress uint16, quantity uint
     return child.Parent
 }
 
-func CastModbusPDUReadDiscreteInputsRequest(structType interface{}) ModbusPDUReadDiscreteInputsRequest {
-    castFunc := func(typ interface{}) ModbusPDUReadDiscreteInputsRequest {
+func CastModbusPDUReadDiscreteInputsRequest(structType interface{}) *ModbusPDUReadDiscreteInputsRequest {
+    castFunc := func(typ interface{}) *ModbusPDUReadDiscreteInputsRequest {
         if casted, ok := typ.(ModbusPDUReadDiscreteInputsRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadDiscreteInputsRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadDiscreteInputsRequest(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUReadDiscreteInputsRequest(structType interface{}) ModbusPDURea
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadDiscreteInputsRequest(casted.Child)
         }
-        return ModbusPDUReadDiscreteInputsRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
index 07d2d90..cbf1754 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
@@ -69,13 +69,13 @@ func NewModbusPDUReadDiscreteInputsResponse(value []int8, ) *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUReadDiscreteInputsResponse(structType interface{}) ModbusPDUReadDiscreteInputsResponse {
-    castFunc := func(typ interface{}) ModbusPDUReadDiscreteInputsResponse {
+func CastModbusPDUReadDiscreteInputsResponse(structType interface{}) *ModbusPDUReadDiscreteInputsResponse {
+    castFunc := func(typ interface{}) *ModbusPDUReadDiscreteInputsResponse {
         if casted, ok := typ.(ModbusPDUReadDiscreteInputsResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadDiscreteInputsResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadDiscreteInputsResponse(casted.Child)
@@ -83,7 +83,7 @@ func CastModbusPDUReadDiscreteInputsResponse(structType interface{}) ModbusPDURe
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadDiscreteInputsResponse(casted.Child)
         }
-        return ModbusPDUReadDiscreteInputsResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go
index 1ec0324..905d85f 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go
@@ -65,13 +65,13 @@ func NewModbusPDUReadExceptionStatusRequest() *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUReadExceptionStatusRequest(structType interface{}) ModbusPDUReadExceptionStatusRequest {
-    castFunc := func(typ interface{}) ModbusPDUReadExceptionStatusRequest {
+func CastModbusPDUReadExceptionStatusRequest(structType interface{}) *ModbusPDUReadExceptionStatusRequest {
+    castFunc := func(typ interface{}) *ModbusPDUReadExceptionStatusRequest {
         if casted, ok := typ.(ModbusPDUReadExceptionStatusRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadExceptionStatusRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadExceptionStatusRequest(casted.Child)
@@ -79,7 +79,7 @@ func CastModbusPDUReadExceptionStatusRequest(structType interface{}) ModbusPDURe
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadExceptionStatusRequest(casted.Child)
         }
-        return ModbusPDUReadExceptionStatusRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go
index 43cb5a4..b9f3ce2 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go
@@ -68,13 +68,13 @@ func NewModbusPDUReadExceptionStatusResponse(value uint8, ) *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUReadExceptionStatusResponse(structType interface{}) ModbusPDUReadExceptionStatusResponse {
-    castFunc := func(typ interface{}) ModbusPDUReadExceptionStatusResponse {
+func CastModbusPDUReadExceptionStatusResponse(structType interface{}) *ModbusPDUReadExceptionStatusResponse {
+    castFunc := func(typ interface{}) *ModbusPDUReadExceptionStatusResponse {
         if casted, ok := typ.(ModbusPDUReadExceptionStatusResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadExceptionStatusResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadExceptionStatusResponse(casted.Child)
@@ -82,7 +82,7 @@ func CastModbusPDUReadExceptionStatusResponse(structType interface{}) ModbusPDUR
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadExceptionStatusResponse(casted.Child)
         }
-        return ModbusPDUReadExceptionStatusResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go
index 082c40e..7ab32b6 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go
@@ -68,13 +68,13 @@ func NewModbusPDUReadFifoQueueRequest(fifoPointerAddress uint16, ) *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUReadFifoQueueRequest(structType interface{}) ModbusPDUReadFifoQueueRequest {
-    castFunc := func(typ interface{}) ModbusPDUReadFifoQueueRequest {
+func CastModbusPDUReadFifoQueueRequest(structType interface{}) *ModbusPDUReadFifoQueueRequest {
+    castFunc := func(typ interface{}) *ModbusPDUReadFifoQueueRequest {
         if casted, ok := typ.(ModbusPDUReadFifoQueueRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadFifoQueueRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadFifoQueueRequest(casted.Child)
@@ -82,7 +82,7 @@ func CastModbusPDUReadFifoQueueRequest(structType interface{}) ModbusPDUReadFifo
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadFifoQueueRequest(casted.Child)
         }
-        return ModbusPDUReadFifoQueueRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
index 71fe139..d9a36a2 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
@@ -68,13 +68,13 @@ func NewModbusPDUReadFifoQueueResponse(fifoValue []uint16, ) *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUReadFifoQueueResponse(structType interface{}) ModbusPDUReadFifoQueueResponse {
-    castFunc := func(typ interface{}) ModbusPDUReadFifoQueueResponse {
+func CastModbusPDUReadFifoQueueResponse(structType interface{}) *ModbusPDUReadFifoQueueResponse {
+    castFunc := func(typ interface{}) *ModbusPDUReadFifoQueueResponse {
         if casted, ok := typ.(ModbusPDUReadFifoQueueResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadFifoQueueResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadFifoQueueResponse(casted.Child)
@@ -82,7 +82,7 @@ func CastModbusPDUReadFifoQueueResponse(structType interface{}) ModbusPDUReadFif
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadFifoQueueResponse(casted.Child)
         }
-        return ModbusPDUReadFifoQueueResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
index b9a47b9..2ce0dbc 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
@@ -68,13 +68,13 @@ func NewModbusPDUReadFileRecordRequest(items []*ModbusPDUReadFileRecordRequestIt
     return child.Parent
 }
 
-func CastModbusPDUReadFileRecordRequest(structType interface{}) ModbusPDUReadFileRecordRequest {
-    castFunc := func(typ interface{}) ModbusPDUReadFileRecordRequest {
+func CastModbusPDUReadFileRecordRequest(structType interface{}) *ModbusPDUReadFileRecordRequest {
+    castFunc := func(typ interface{}) *ModbusPDUReadFileRecordRequest {
         if casted, ok := typ.(ModbusPDUReadFileRecordRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadFileRecordRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadFileRecordRequest(casted.Child)
@@ -82,7 +82,7 @@ func CastModbusPDUReadFileRecordRequest(structType interface{}) ModbusPDUReadFil
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadFileRecordRequest(casted.Child)
         }
-        return ModbusPDUReadFileRecordRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequestItem.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequestItem.go
index 7338a7f..fe1c72c 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequestItem.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequestItem.go
@@ -46,15 +46,15 @@ func NewModbusPDUReadFileRecordRequestItem(referenceType uint8, fileNumber uint1
     return &ModbusPDUReadFileRecordRequestItem{ReferenceType: referenceType, FileNumber: fileNumber, RecordNumber: recordNumber, RecordLength: recordLength}
 }
 
-func CastModbusPDUReadFileRecordRequestItem(structType interface{}) ModbusPDUReadFileRecordRequestItem {
-    castFunc := func(typ interface{}) ModbusPDUReadFileRecordRequestItem {
+func CastModbusPDUReadFileRecordRequestItem(structType interface{}) *ModbusPDUReadFileRecordRequestItem {
+    castFunc := func(typ interface{}) *ModbusPDUReadFileRecordRequestItem {
         if casted, ok := typ.(ModbusPDUReadFileRecordRequestItem); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadFileRecordRequestItem); ok {
-            return *casted
+            return casted
         }
-        return ModbusPDUReadFileRecordRequestItem{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
index 3d5da5b..5c5e2be 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
@@ -68,13 +68,13 @@ func NewModbusPDUReadFileRecordResponse(items []*ModbusPDUReadFileRecordResponse
     return child.Parent
 }
 
-func CastModbusPDUReadFileRecordResponse(structType interface{}) ModbusPDUReadFileRecordResponse {
-    castFunc := func(typ interface{}) ModbusPDUReadFileRecordResponse {
+func CastModbusPDUReadFileRecordResponse(structType interface{}) *ModbusPDUReadFileRecordResponse {
+    castFunc := func(typ interface{}) *ModbusPDUReadFileRecordResponse {
         if casted, ok := typ.(ModbusPDUReadFileRecordResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadFileRecordResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadFileRecordResponse(casted.Child)
@@ -82,7 +82,7 @@ func CastModbusPDUReadFileRecordResponse(structType interface{}) ModbusPDUReadFi
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadFileRecordResponse(casted.Child)
         }
-        return ModbusPDUReadFileRecordResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
index 60aa51e..c7e9298 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
@@ -45,15 +45,15 @@ func NewModbusPDUReadFileRecordResponseItem(referenceType uint8, data []int8) *M
     return &ModbusPDUReadFileRecordResponseItem{ReferenceType: referenceType, Data: data}
 }
 
-func CastModbusPDUReadFileRecordResponseItem(structType interface{}) ModbusPDUReadFileRecordResponseItem {
-    castFunc := func(typ interface{}) ModbusPDUReadFileRecordResponseItem {
+func CastModbusPDUReadFileRecordResponseItem(structType interface{}) *ModbusPDUReadFileRecordResponseItem {
+    castFunc := func(typ interface{}) *ModbusPDUReadFileRecordResponseItem {
         if casted, ok := typ.(ModbusPDUReadFileRecordResponseItem); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadFileRecordResponseItem); ok {
-            return *casted
+            return casted
         }
-        return ModbusPDUReadFileRecordResponseItem{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go
index 272d9f3..8dab5be 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go
@@ -70,13 +70,13 @@ func NewModbusPDUReadHoldingRegistersRequest(startingAddress uint16, quantity ui
     return child.Parent
 }
 
-func CastModbusPDUReadHoldingRegistersRequest(structType interface{}) ModbusPDUReadHoldingRegistersRequest {
-    castFunc := func(typ interface{}) ModbusPDUReadHoldingRegistersRequest {
+func CastModbusPDUReadHoldingRegistersRequest(structType interface{}) *ModbusPDUReadHoldingRegistersRequest {
+    castFunc := func(typ interface{}) *ModbusPDUReadHoldingRegistersRequest {
         if casted, ok := typ.(ModbusPDUReadHoldingRegistersRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadHoldingRegistersRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadHoldingRegistersRequest(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUReadHoldingRegistersRequest(structType interface{}) ModbusPDUR
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadHoldingRegistersRequest(casted.Child)
         }
-        return ModbusPDUReadHoldingRegistersRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
index 467719b..010f409 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
@@ -69,13 +69,13 @@ func NewModbusPDUReadHoldingRegistersResponse(value []int8, ) *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUReadHoldingRegistersResponse(structType interface{}) ModbusPDUReadHoldingRegistersResponse {
-    castFunc := func(typ interface{}) ModbusPDUReadHoldingRegistersResponse {
+func CastModbusPDUReadHoldingRegistersResponse(structType interface{}) *ModbusPDUReadHoldingRegistersResponse {
+    castFunc := func(typ interface{}) *ModbusPDUReadHoldingRegistersResponse {
         if casted, ok := typ.(ModbusPDUReadHoldingRegistersResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadHoldingRegistersResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadHoldingRegistersResponse(casted.Child)
@@ -83,7 +83,7 @@ func CastModbusPDUReadHoldingRegistersResponse(structType interface{}) ModbusPDU
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadHoldingRegistersResponse(casted.Child)
         }
-        return ModbusPDUReadHoldingRegistersResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go
index 1d7fe78..9fa6228 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go
@@ -70,13 +70,13 @@ func NewModbusPDUReadInputRegistersRequest(startingAddress uint16, quantity uint
     return child.Parent
 }
 
-func CastModbusPDUReadInputRegistersRequest(structType interface{}) ModbusPDUReadInputRegistersRequest {
-    castFunc := func(typ interface{}) ModbusPDUReadInputRegistersRequest {
+func CastModbusPDUReadInputRegistersRequest(structType interface{}) *ModbusPDUReadInputRegistersRequest {
+    castFunc := func(typ interface{}) *ModbusPDUReadInputRegistersRequest {
         if casted, ok := typ.(ModbusPDUReadInputRegistersRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadInputRegistersRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadInputRegistersRequest(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUReadInputRegistersRequest(structType interface{}) ModbusPDURea
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadInputRegistersRequest(casted.Child)
         }
-        return ModbusPDUReadInputRegistersRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
index ac13f5b..f204ece 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
@@ -69,13 +69,13 @@ func NewModbusPDUReadInputRegistersResponse(value []int8, ) *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUReadInputRegistersResponse(structType interface{}) ModbusPDUReadInputRegistersResponse {
-    castFunc := func(typ interface{}) ModbusPDUReadInputRegistersResponse {
+func CastModbusPDUReadInputRegistersResponse(structType interface{}) *ModbusPDUReadInputRegistersResponse {
+    castFunc := func(typ interface{}) *ModbusPDUReadInputRegistersResponse {
         if casted, ok := typ.(ModbusPDUReadInputRegistersResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadInputRegistersResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadInputRegistersResponse(casted.Child)
@@ -83,7 +83,7 @@ func CastModbusPDUReadInputRegistersResponse(structType interface{}) ModbusPDURe
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadInputRegistersResponse(casted.Child)
         }
-        return ModbusPDUReadInputRegistersResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
index c99c247..8a7d9ed 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
@@ -77,13 +77,13 @@ func NewModbusPDUReadWriteMultipleHoldingRegistersRequest(readStartingAddress ui
     return child.Parent
 }
 
-func CastModbusPDUReadWriteMultipleHoldingRegistersRequest(structType interface{}) ModbusPDUReadWriteMultipleHoldingRegistersRequest {
-    castFunc := func(typ interface{}) ModbusPDUReadWriteMultipleHoldingRegistersRequest {
+func CastModbusPDUReadWriteMultipleHoldingRegistersRequest(structType interface{}) *ModbusPDUReadWriteMultipleHoldingRegistersRequest {
+    castFunc := func(typ interface{}) *ModbusPDUReadWriteMultipleHoldingRegistersRequest {
         if casted, ok := typ.(ModbusPDUReadWriteMultipleHoldingRegistersRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadWriteMultipleHoldingRegistersRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadWriteMultipleHoldingRegistersRequest(casted.Child)
@@ -91,7 +91,7 @@ func CastModbusPDUReadWriteMultipleHoldingRegistersRequest(structType interface{
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadWriteMultipleHoldingRegistersRequest(casted.Child)
         }
-        return ModbusPDUReadWriteMultipleHoldingRegistersRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
index 5fd8166..967c20e 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
@@ -69,13 +69,13 @@ func NewModbusPDUReadWriteMultipleHoldingRegistersResponse(value []int8, ) *Modb
     return child.Parent
 }
 
-func CastModbusPDUReadWriteMultipleHoldingRegistersResponse(structType interface{}) ModbusPDUReadWriteMultipleHoldingRegistersResponse {
-    castFunc := func(typ interface{}) ModbusPDUReadWriteMultipleHoldingRegistersResponse {
+func CastModbusPDUReadWriteMultipleHoldingRegistersResponse(structType interface{}) *ModbusPDUReadWriteMultipleHoldingRegistersResponse {
+    castFunc := func(typ interface{}) *ModbusPDUReadWriteMultipleHoldingRegistersResponse {
         if casted, ok := typ.(ModbusPDUReadWriteMultipleHoldingRegistersResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReadWriteMultipleHoldingRegistersResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReadWriteMultipleHoldingRegistersResponse(casted.Child)
@@ -83,7 +83,7 @@ func CastModbusPDUReadWriteMultipleHoldingRegistersResponse(structType interface
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReadWriteMultipleHoldingRegistersResponse(casted.Child)
         }
-        return ModbusPDUReadWriteMultipleHoldingRegistersResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go
index 44a2556..b148e18 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go
@@ -65,13 +65,13 @@ func NewModbusPDUReportServerIdRequest() *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUReportServerIdRequest(structType interface{}) ModbusPDUReportServerIdRequest {
-    castFunc := func(typ interface{}) ModbusPDUReportServerIdRequest {
+func CastModbusPDUReportServerIdRequest(structType interface{}) *ModbusPDUReportServerIdRequest {
+    castFunc := func(typ interface{}) *ModbusPDUReportServerIdRequest {
         if casted, ok := typ.(ModbusPDUReportServerIdRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReportServerIdRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReportServerIdRequest(casted.Child)
@@ -79,7 +79,7 @@ func CastModbusPDUReportServerIdRequest(structType interface{}) ModbusPDUReportS
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReportServerIdRequest(casted.Child)
         }
-        return ModbusPDUReportServerIdRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
index d43f02c..ad041d4 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
@@ -69,13 +69,13 @@ func NewModbusPDUReportServerIdResponse(value []int8, ) *ModbusPDU {
     return child.Parent
 }
 
-func CastModbusPDUReportServerIdResponse(structType interface{}) ModbusPDUReportServerIdResponse {
-    castFunc := func(typ interface{}) ModbusPDUReportServerIdResponse {
+func CastModbusPDUReportServerIdResponse(structType interface{}) *ModbusPDUReportServerIdResponse {
+    castFunc := func(typ interface{}) *ModbusPDUReportServerIdResponse {
         if casted, ok := typ.(ModbusPDUReportServerIdResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUReportServerIdResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUReportServerIdResponse(casted.Child)
@@ -83,7 +83,7 @@ func CastModbusPDUReportServerIdResponse(structType interface{}) ModbusPDUReport
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUReportServerIdResponse(casted.Child)
         }
-        return ModbusPDUReportServerIdResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
index 5370d82..6b1c597 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
@@ -68,13 +68,13 @@ func NewModbusPDUWriteFileRecordRequest(items []*ModbusPDUWriteFileRecordRequest
     return child.Parent
 }
 
-func CastModbusPDUWriteFileRecordRequest(structType interface{}) ModbusPDUWriteFileRecordRequest {
-    castFunc := func(typ interface{}) ModbusPDUWriteFileRecordRequest {
+func CastModbusPDUWriteFileRecordRequest(structType interface{}) *ModbusPDUWriteFileRecordRequest {
+    castFunc := func(typ interface{}) *ModbusPDUWriteFileRecordRequest {
         if casted, ok := typ.(ModbusPDUWriteFileRecordRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUWriteFileRecordRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUWriteFileRecordRequest(casted.Child)
@@ -82,7 +82,7 @@ func CastModbusPDUWriteFileRecordRequest(structType interface{}) ModbusPDUWriteF
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUWriteFileRecordRequest(casted.Child)
         }
-        return ModbusPDUWriteFileRecordRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
index 6000a47..824627a 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
@@ -47,15 +47,15 @@ func NewModbusPDUWriteFileRecordRequestItem(referenceType uint8, fileNumber uint
     return &ModbusPDUWriteFileRecordRequestItem{ReferenceType: referenceType, FileNumber: fileNumber, RecordNumber: recordNumber, RecordData: recordData}
 }
 
-func CastModbusPDUWriteFileRecordRequestItem(structType interface{}) ModbusPDUWriteFileRecordRequestItem {
-    castFunc := func(typ interface{}) ModbusPDUWriteFileRecordRequestItem {
+func CastModbusPDUWriteFileRecordRequestItem(structType interface{}) *ModbusPDUWriteFileRecordRequestItem {
+    castFunc := func(typ interface{}) *ModbusPDUWriteFileRecordRequestItem {
         if casted, ok := typ.(ModbusPDUWriteFileRecordRequestItem); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUWriteFileRecordRequestItem); ok {
-            return *casted
+            return casted
         }
-        return ModbusPDUWriteFileRecordRequestItem{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
index 28808a1..ea2ff8d 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
@@ -68,13 +68,13 @@ func NewModbusPDUWriteFileRecordResponse(items []*ModbusPDUWriteFileRecordRespon
     return child.Parent
 }
 
-func CastModbusPDUWriteFileRecordResponse(structType interface{}) ModbusPDUWriteFileRecordResponse {
-    castFunc := func(typ interface{}) ModbusPDUWriteFileRecordResponse {
+func CastModbusPDUWriteFileRecordResponse(structType interface{}) *ModbusPDUWriteFileRecordResponse {
+    castFunc := func(typ interface{}) *ModbusPDUWriteFileRecordResponse {
         if casted, ok := typ.(ModbusPDUWriteFileRecordResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUWriteFileRecordResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUWriteFileRecordResponse(casted.Child)
@@ -82,7 +82,7 @@ func CastModbusPDUWriteFileRecordResponse(structType interface{}) ModbusPDUWrite
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUWriteFileRecordResponse(casted.Child)
         }
-        return ModbusPDUWriteFileRecordResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
index 76cbdab..9e1a6a1 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
@@ -47,15 +47,15 @@ func NewModbusPDUWriteFileRecordResponseItem(referenceType uint8, fileNumber uin
     return &ModbusPDUWriteFileRecordResponseItem{ReferenceType: referenceType, FileNumber: fileNumber, RecordNumber: recordNumber, RecordData: recordData}
 }
 
-func CastModbusPDUWriteFileRecordResponseItem(structType interface{}) ModbusPDUWriteFileRecordResponseItem {
-    castFunc := func(typ interface{}) ModbusPDUWriteFileRecordResponseItem {
+func CastModbusPDUWriteFileRecordResponseItem(structType interface{}) *ModbusPDUWriteFileRecordResponseItem {
+    castFunc := func(typ interface{}) *ModbusPDUWriteFileRecordResponseItem {
         if casted, ok := typ.(ModbusPDUWriteFileRecordResponseItem); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUWriteFileRecordResponseItem); ok {
-            return *casted
+            return casted
         }
-        return ModbusPDUWriteFileRecordResponseItem{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
index d5efc8f..b686ec3 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
@@ -73,13 +73,13 @@ func NewModbusPDUWriteMultipleCoilsRequest(startingAddress uint16, quantity uint
     return child.Parent
 }
 
-func CastModbusPDUWriteMultipleCoilsRequest(structType interface{}) ModbusPDUWriteMultipleCoilsRequest {
-    castFunc := func(typ interface{}) ModbusPDUWriteMultipleCoilsRequest {
+func CastModbusPDUWriteMultipleCoilsRequest(structType interface{}) *ModbusPDUWriteMultipleCoilsRequest {
+    castFunc := func(typ interface{}) *ModbusPDUWriteMultipleCoilsRequest {
         if casted, ok := typ.(ModbusPDUWriteMultipleCoilsRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUWriteMultipleCoilsRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUWriteMultipleCoilsRequest(casted.Child)
@@ -87,7 +87,7 @@ func CastModbusPDUWriteMultipleCoilsRequest(structType interface{}) ModbusPDUWri
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUWriteMultipleCoilsRequest(casted.Child)
         }
-        return ModbusPDUWriteMultipleCoilsRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go
index ca02cdd..bd4e33d 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go
@@ -70,13 +70,13 @@ func NewModbusPDUWriteMultipleCoilsResponse(startingAddress uint16, quantity uin
     return child.Parent
 }
 
-func CastModbusPDUWriteMultipleCoilsResponse(structType interface{}) ModbusPDUWriteMultipleCoilsResponse {
-    castFunc := func(typ interface{}) ModbusPDUWriteMultipleCoilsResponse {
+func CastModbusPDUWriteMultipleCoilsResponse(structType interface{}) *ModbusPDUWriteMultipleCoilsResponse {
+    castFunc := func(typ interface{}) *ModbusPDUWriteMultipleCoilsResponse {
         if casted, ok := typ.(ModbusPDUWriteMultipleCoilsResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUWriteMultipleCoilsResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUWriteMultipleCoilsResponse(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUWriteMultipleCoilsResponse(structType interface{}) ModbusPDUWr
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUWriteMultipleCoilsResponse(casted.Child)
         }
-        return ModbusPDUWriteMultipleCoilsResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
index 6cfcebd..726cc1e 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
@@ -73,13 +73,13 @@ func NewModbusPDUWriteMultipleHoldingRegistersRequest(startingAddress uint16, qu
     return child.Parent
 }
 
-func CastModbusPDUWriteMultipleHoldingRegistersRequest(structType interface{}) ModbusPDUWriteMultipleHoldingRegistersRequest {
-    castFunc := func(typ interface{}) ModbusPDUWriteMultipleHoldingRegistersRequest {
+func CastModbusPDUWriteMultipleHoldingRegistersRequest(structType interface{}) *ModbusPDUWriteMultipleHoldingRegistersRequest {
+    castFunc := func(typ interface{}) *ModbusPDUWriteMultipleHoldingRegistersRequest {
         if casted, ok := typ.(ModbusPDUWriteMultipleHoldingRegistersRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUWriteMultipleHoldingRegistersRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUWriteMultipleHoldingRegistersRequest(casted.Child)
@@ -87,7 +87,7 @@ func CastModbusPDUWriteMultipleHoldingRegistersRequest(structType interface{}) M
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUWriteMultipleHoldingRegistersRequest(casted.Child)
         }
-        return ModbusPDUWriteMultipleHoldingRegistersRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go
index 15f8588..2e5ffe4 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go
@@ -70,13 +70,13 @@ func NewModbusPDUWriteMultipleHoldingRegistersResponse(startingAddress uint16, q
     return child.Parent
 }
 
-func CastModbusPDUWriteMultipleHoldingRegistersResponse(structType interface{}) ModbusPDUWriteMultipleHoldingRegistersResponse {
-    castFunc := func(typ interface{}) ModbusPDUWriteMultipleHoldingRegistersResponse {
+func CastModbusPDUWriteMultipleHoldingRegistersResponse(structType interface{}) *ModbusPDUWriteMultipleHoldingRegistersResponse {
+    castFunc := func(typ interface{}) *ModbusPDUWriteMultipleHoldingRegistersResponse {
         if casted, ok := typ.(ModbusPDUWriteMultipleHoldingRegistersResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUWriteMultipleHoldingRegistersResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUWriteMultipleHoldingRegistersResponse(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUWriteMultipleHoldingRegistersResponse(structType interface{})
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUWriteMultipleHoldingRegistersResponse(casted.Child)
         }
-        return ModbusPDUWriteMultipleHoldingRegistersResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go
index 510a442..cf43530 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go
@@ -70,13 +70,13 @@ func NewModbusPDUWriteSingleCoilRequest(address uint16, value uint16, ) *ModbusP
     return child.Parent
 }
 
-func CastModbusPDUWriteSingleCoilRequest(structType interface{}) ModbusPDUWriteSingleCoilRequest {
-    castFunc := func(typ interface{}) ModbusPDUWriteSingleCoilRequest {
+func CastModbusPDUWriteSingleCoilRequest(structType interface{}) *ModbusPDUWriteSingleCoilRequest {
+    castFunc := func(typ interface{}) *ModbusPDUWriteSingleCoilRequest {
         if casted, ok := typ.(ModbusPDUWriteSingleCoilRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUWriteSingleCoilRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUWriteSingleCoilRequest(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUWriteSingleCoilRequest(structType interface{}) ModbusPDUWriteS
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUWriteSingleCoilRequest(casted.Child)
         }
-        return ModbusPDUWriteSingleCoilRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go
index 92c1ad3..124b0a7 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go
@@ -70,13 +70,13 @@ func NewModbusPDUWriteSingleCoilResponse(address uint16, value uint16, ) *Modbus
     return child.Parent
 }
 
-func CastModbusPDUWriteSingleCoilResponse(structType interface{}) ModbusPDUWriteSingleCoilResponse {
-    castFunc := func(typ interface{}) ModbusPDUWriteSingleCoilResponse {
+func CastModbusPDUWriteSingleCoilResponse(structType interface{}) *ModbusPDUWriteSingleCoilResponse {
+    castFunc := func(typ interface{}) *ModbusPDUWriteSingleCoilResponse {
         if casted, ok := typ.(ModbusPDUWriteSingleCoilResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUWriteSingleCoilResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUWriteSingleCoilResponse(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUWriteSingleCoilResponse(structType interface{}) ModbusPDUWrite
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUWriteSingleCoilResponse(casted.Child)
         }
-        return ModbusPDUWriteSingleCoilResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go
index 3f3ec31..17982a2 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go
@@ -70,13 +70,13 @@ func NewModbusPDUWriteSingleRegisterRequest(address uint16, value uint16, ) *Mod
     return child.Parent
 }
 
-func CastModbusPDUWriteSingleRegisterRequest(structType interface{}) ModbusPDUWriteSingleRegisterRequest {
-    castFunc := func(typ interface{}) ModbusPDUWriteSingleRegisterRequest {
+func CastModbusPDUWriteSingleRegisterRequest(structType interface{}) *ModbusPDUWriteSingleRegisterRequest {
+    castFunc := func(typ interface{}) *ModbusPDUWriteSingleRegisterRequest {
         if casted, ok := typ.(ModbusPDUWriteSingleRegisterRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUWriteSingleRegisterRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUWriteSingleRegisterRequest(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUWriteSingleRegisterRequest(structType interface{}) ModbusPDUWr
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUWriteSingleRegisterRequest(casted.Child)
         }
-        return ModbusPDUWriteSingleRegisterRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go
index a091b1b..10eb848 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go
@@ -70,13 +70,13 @@ func NewModbusPDUWriteSingleRegisterResponse(address uint16, value uint16, ) *Mo
     return child.Parent
 }
 
-func CastModbusPDUWriteSingleRegisterResponse(structType interface{}) ModbusPDUWriteSingleRegisterResponse {
-    castFunc := func(typ interface{}) ModbusPDUWriteSingleRegisterResponse {
+func CastModbusPDUWriteSingleRegisterResponse(structType interface{}) *ModbusPDUWriteSingleRegisterResponse {
+    castFunc := func(typ interface{}) *ModbusPDUWriteSingleRegisterResponse {
         if casted, ok := typ.(ModbusPDUWriteSingleRegisterResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusPDUWriteSingleRegisterResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(ModbusPDU); ok {
             return CastModbusPDUWriteSingleRegisterResponse(casted.Child)
@@ -84,7 +84,7 @@ func CastModbusPDUWriteSingleRegisterResponse(structType interface{}) ModbusPDUW
         if casted, ok := typ.(*ModbusPDU); ok {
             return CastModbusPDUWriteSingleRegisterResponse(casted.Child)
         }
-        return ModbusPDUWriteSingleRegisterResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusSerialADU.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusSerialADU.go
index f7565cc..d80a1fb 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusSerialADU.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusSerialADU.go
@@ -47,15 +47,15 @@ func NewModbusSerialADU(transactionId uint16, length uint16, address uint8, pdu
     return &ModbusSerialADU{TransactionId: transactionId, Length: length, Address: address, Pdu: pdu}
 }
 
-func CastModbusSerialADU(structType interface{}) ModbusSerialADU {
-    castFunc := func(typ interface{}) ModbusSerialADU {
+func CastModbusSerialADU(structType interface{}) *ModbusSerialADU {
+    castFunc := func(typ interface{}) *ModbusSerialADU {
         if casted, ok := typ.(ModbusSerialADU); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusSerialADU); ok {
-            return *casted
+            return casted
         }
-        return ModbusSerialADU{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusTcpADU.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusTcpADU.go
index 608eeb1..4046836 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusTcpADU.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusTcpADU.go
@@ -49,15 +49,15 @@ func NewModbusTcpADU(transactionIdentifier uint16, unitIdentifier uint8, pdu *Mo
     return &ModbusTcpADU{TransactionIdentifier: transactionIdentifier, UnitIdentifier: unitIdentifier, Pdu: pdu}
 }
 
-func CastModbusTcpADU(structType interface{}) ModbusTcpADU {
-    castFunc := func(typ interface{}) ModbusTcpADU {
+func CastModbusTcpADU(structType interface{}) *ModbusTcpADU {
+    castFunc := func(typ interface{}) *ModbusTcpADU {
         if casted, ok := typ.(ModbusTcpADU); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*ModbusTcpADU); ok {
-            return *casted
+            return casted
         }
-        return ModbusTcpADU{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
index 3473eeb..03ba226 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
@@ -59,15 +59,15 @@ func NewCOTPPacket(parameters []*COTPParameter, payload *S7Message) *COTPPacket
     return &COTPPacket{Parameters: parameters, Payload: payload}
 }
 
-func CastCOTPPacket(structType interface{}) COTPPacket {
-    castFunc := func(typ interface{}) COTPPacket {
+func CastCOTPPacket(structType interface{}) *COTPPacket {
+    castFunc := func(typ interface{}) *COTPPacket {
         if casted, ok := typ.(COTPPacket); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPPacket); ok {
-            return *casted
+            return casted
         }
-        return COTPPacket{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go
index 122983a..244a175 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go
@@ -66,13 +66,13 @@ func NewCOTPPacketConnectionRequest(destinationReference uint16, sourceReference
     return child.Parent
 }
 
-func CastCOTPPacketConnectionRequest(structType interface{}) COTPPacketConnectionRequest {
-    castFunc := func(typ interface{}) COTPPacketConnectionRequest {
+func CastCOTPPacketConnectionRequest(structType interface{}) *COTPPacketConnectionRequest {
+    castFunc := func(typ interface{}) *COTPPacketConnectionRequest {
         if casted, ok := typ.(COTPPacketConnectionRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPPacketConnectionRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(COTPPacket); ok {
             return CastCOTPPacketConnectionRequest(casted.Child)
@@ -80,7 +80,7 @@ func CastCOTPPacketConnectionRequest(structType interface{}) COTPPacketConnectio
         if casted, ok := typ.(*COTPPacket); ok {
             return CastCOTPPacketConnectionRequest(casted.Child)
         }
-        return COTPPacketConnectionRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go
index 8717d4f..1adaf31 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go
@@ -66,13 +66,13 @@ func NewCOTPPacketConnectionResponse(destinationReference uint16, sourceReferenc
     return child.Parent
 }
 
-func CastCOTPPacketConnectionResponse(structType interface{}) COTPPacketConnectionResponse {
-    castFunc := func(typ interface{}) COTPPacketConnectionResponse {
+func CastCOTPPacketConnectionResponse(structType interface{}) *COTPPacketConnectionResponse {
+    castFunc := func(typ interface{}) *COTPPacketConnectionResponse {
         if casted, ok := typ.(COTPPacketConnectionResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPPacketConnectionResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(COTPPacket); ok {
             return CastCOTPPacketConnectionResponse(casted.Child)
@@ -80,7 +80,7 @@ func CastCOTPPacketConnectionResponse(structType interface{}) COTPPacketConnecti
         if casted, ok := typ.(*COTPPacket); ok {
             return CastCOTPPacketConnectionResponse(casted.Child)
         }
-        return COTPPacketConnectionResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go
index 1d27622..4bf4ecc 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go
@@ -64,13 +64,13 @@ func NewCOTPPacketData(eot bool, tpduRef uint8, parameters []*COTPParameter, pay
     return child.Parent
 }
 
-func CastCOTPPacketData(structType interface{}) COTPPacketData {
-    castFunc := func(typ interface{}) COTPPacketData {
+func CastCOTPPacketData(structType interface{}) *COTPPacketData {
+    castFunc := func(typ interface{}) *COTPPacketData {
         if casted, ok := typ.(COTPPacketData); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPPacketData); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(COTPPacket); ok {
             return CastCOTPPacketData(casted.Child)
@@ -78,7 +78,7 @@ func CastCOTPPacketData(structType interface{}) COTPPacketData {
         if casted, ok := typ.(*COTPPacket); ok {
             return CastCOTPPacketData(casted.Child)
         }
-        return COTPPacketData{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go
index fb07ba4..c124da0 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go
@@ -66,13 +66,13 @@ func NewCOTPPacketDisconnectRequest(destinationReference uint16, sourceReference
     return child.Parent
 }
 
-func CastCOTPPacketDisconnectRequest(structType interface{}) COTPPacketDisconnectRequest {
-    castFunc := func(typ interface{}) COTPPacketDisconnectRequest {
+func CastCOTPPacketDisconnectRequest(structType interface{}) *COTPPacketDisconnectRequest {
+    castFunc := func(typ interface{}) *COTPPacketDisconnectRequest {
         if casted, ok := typ.(COTPPacketDisconnectRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPPacketDisconnectRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(COTPPacket); ok {
             return CastCOTPPacketDisconnectRequest(casted.Child)
@@ -80,7 +80,7 @@ func CastCOTPPacketDisconnectRequest(structType interface{}) COTPPacketDisconnec
         if casted, ok := typ.(*COTPPacket); ok {
             return CastCOTPPacketDisconnectRequest(casted.Child)
         }
-        return COTPPacketDisconnectRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go
index 3e25cf3..9a7a648 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go
@@ -64,13 +64,13 @@ func NewCOTPPacketDisconnectResponse(destinationReference uint16, sourceReferenc
     return child.Parent
 }
 
-func CastCOTPPacketDisconnectResponse(structType interface{}) COTPPacketDisconnectResponse {
-    castFunc := func(typ interface{}) COTPPacketDisconnectResponse {
+func CastCOTPPacketDisconnectResponse(structType interface{}) *COTPPacketDisconnectResponse {
+    castFunc := func(typ interface{}) *COTPPacketDisconnectResponse {
         if casted, ok := typ.(COTPPacketDisconnectResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPPacketDisconnectResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(COTPPacket); ok {
             return CastCOTPPacketDisconnectResponse(casted.Child)
@@ -78,7 +78,7 @@ func CastCOTPPacketDisconnectResponse(structType interface{}) COTPPacketDisconne
         if casted, ok := typ.(*COTPPacket); ok {
             return CastCOTPPacketDisconnectResponse(casted.Child)
         }
-        return COTPPacketDisconnectResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go
index 215709e..700c655 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go
@@ -64,13 +64,13 @@ func NewCOTPPacketTpduError(destinationReference uint16, rejectCause uint8, para
     return child.Parent
 }
 
-func CastCOTPPacketTpduError(structType interface{}) COTPPacketTpduError {
-    castFunc := func(typ interface{}) COTPPacketTpduError {
+func CastCOTPPacketTpduError(structType interface{}) *COTPPacketTpduError {
+    castFunc := func(typ interface{}) *COTPPacketTpduError {
         if casted, ok := typ.(COTPPacketTpduError); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPPacketTpduError); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(COTPPacket); ok {
             return CastCOTPPacketTpduError(casted.Child)
@@ -78,7 +78,7 @@ func CastCOTPPacketTpduError(structType interface{}) COTPPacketTpduError {
         if casted, ok := typ.(*COTPPacket); ok {
             return CastCOTPPacketTpduError(casted.Child)
         }
-        return COTPPacketTpduError{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go
index 424a6c3..b6575e5 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go
@@ -57,15 +57,15 @@ func NewCOTPParameter() *COTPParameter {
     return &COTPParameter{}
 }
 
-func CastCOTPParameter(structType interface{}) COTPParameter {
-    castFunc := func(typ interface{}) COTPParameter {
+func CastCOTPParameter(structType interface{}) *COTPParameter {
+    castFunc := func(typ interface{}) *COTPParameter {
         if casted, ok := typ.(COTPParameter); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPParameter); ok {
-            return *casted
+            return casted
         }
-        return COTPParameter{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go
index 0b081c8..f94221c 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go
@@ -60,13 +60,13 @@ func NewCOTPParameterCalledTsap(tsapId uint16, ) *COTPParameter {
     return child.Parent
 }
 
-func CastCOTPParameterCalledTsap(structType interface{}) COTPParameterCalledTsap {
-    castFunc := func(typ interface{}) COTPParameterCalledTsap {
+func CastCOTPParameterCalledTsap(structType interface{}) *COTPParameterCalledTsap {
+    castFunc := func(typ interface{}) *COTPParameterCalledTsap {
         if casted, ok := typ.(COTPParameterCalledTsap); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPParameterCalledTsap); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(COTPParameter); ok {
             return CastCOTPParameterCalledTsap(casted.Child)
@@ -74,7 +74,7 @@ func CastCOTPParameterCalledTsap(structType interface{}) COTPParameterCalledTsap
         if casted, ok := typ.(*COTPParameter); ok {
             return CastCOTPParameterCalledTsap(casted.Child)
         }
-        return COTPParameterCalledTsap{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go
index 6a1c572..61cbb39 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go
@@ -60,13 +60,13 @@ func NewCOTPParameterCallingTsap(tsapId uint16, ) *COTPParameter {
     return child.Parent
 }
 
-func CastCOTPParameterCallingTsap(structType interface{}) COTPParameterCallingTsap {
-    castFunc := func(typ interface{}) COTPParameterCallingTsap {
+func CastCOTPParameterCallingTsap(structType interface{}) *COTPParameterCallingTsap {
+    castFunc := func(typ interface{}) *COTPParameterCallingTsap {
         if casted, ok := typ.(COTPParameterCallingTsap); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPParameterCallingTsap); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(COTPParameter); ok {
             return CastCOTPParameterCallingTsap(casted.Child)
@@ -74,7 +74,7 @@ func CastCOTPParameterCallingTsap(structType interface{}) COTPParameterCallingTs
         if casted, ok := typ.(*COTPParameter); ok {
             return CastCOTPParameterCallingTsap(casted.Child)
         }
-        return COTPParameterCallingTsap{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go
index f47e95b..7c702b4 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go
@@ -60,13 +60,13 @@ func NewCOTPParameterChecksum(crc uint8, ) *COTPParameter {
     return child.Parent
 }
 
-func CastCOTPParameterChecksum(structType interface{}) COTPParameterChecksum {
-    castFunc := func(typ interface{}) COTPParameterChecksum {
+func CastCOTPParameterChecksum(structType interface{}) *COTPParameterChecksum {
+    castFunc := func(typ interface{}) *COTPParameterChecksum {
         if casted, ok := typ.(COTPParameterChecksum); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPParameterChecksum); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(COTPParameter); ok {
             return CastCOTPParameterChecksum(casted.Child)
@@ -74,7 +74,7 @@ func CastCOTPParameterChecksum(structType interface{}) COTPParameterChecksum {
         if casted, ok := typ.(*COTPParameter); ok {
             return CastCOTPParameterChecksum(casted.Child)
         }
-        return COTPParameterChecksum{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
index 0588b34..89fcc66 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
@@ -60,13 +60,13 @@ func NewCOTPParameterDisconnectAdditionalInformation(data []uint8, ) *COTPParame
     return child.Parent
 }
 
-func CastCOTPParameterDisconnectAdditionalInformation(structType interface{}) COTPParameterDisconnectAdditionalInformation {
-    castFunc := func(typ interface{}) COTPParameterDisconnectAdditionalInformation {
+func CastCOTPParameterDisconnectAdditionalInformation(structType interface{}) *COTPParameterDisconnectAdditionalInformation {
+    castFunc := func(typ interface{}) *COTPParameterDisconnectAdditionalInformation {
         if casted, ok := typ.(COTPParameterDisconnectAdditionalInformation); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPParameterDisconnectAdditionalInformation); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(COTPParameter); ok {
             return CastCOTPParameterDisconnectAdditionalInformation(casted.Child)
@@ -74,7 +74,7 @@ func CastCOTPParameterDisconnectAdditionalInformation(structType interface{}) CO
         if casted, ok := typ.(*COTPParameter); ok {
             return CastCOTPParameterDisconnectAdditionalInformation(casted.Child)
         }
-        return COTPParameterDisconnectAdditionalInformation{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go
index 37fd5df..95a8584 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go
@@ -60,13 +60,13 @@ func NewCOTPParameterTpduSize(tpduSize COTPTpduSize, ) *COTPParameter {
     return child.Parent
 }
 
-func CastCOTPParameterTpduSize(structType interface{}) COTPParameterTpduSize {
-    castFunc := func(typ interface{}) COTPParameterTpduSize {
+func CastCOTPParameterTpduSize(structType interface{}) *COTPParameterTpduSize {
+    castFunc := func(typ interface{}) *COTPParameterTpduSize {
         if casted, ok := typ.(COTPParameterTpduSize); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*COTPParameterTpduSize); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(COTPParameter); ok {
             return CastCOTPParameterTpduSize(casted.Child)
@@ -74,7 +74,7 @@ func CastCOTPParameterTpduSize(structType interface{}) COTPParameterTpduSize {
         if casted, ok := typ.(*COTPParameter); ok {
             return CastCOTPParameterTpduSize(casted.Child)
         }
-        return COTPParameterTpduSize{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPProtocolClass.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPProtocolClass.go
index fb3184c..e546ffa 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPProtocolClass.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPProtocolClass.go
@@ -71,11 +71,14 @@ func (m COTPProtocolClass) LengthInBytes() uint16 {
 }
 
 func COTPProtocolClassParse(io *utils.ReadBuffer) (COTPProtocolClass, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadInt8(8)
+    if err != nil {
+        return 0, nil
+    }
+    return COTPProtocolClassValueOf(val), nil
 }
 
 func (e COTPProtocolClass) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteInt8(8, int8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPTpduSize.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPTpduSize.go
index 34ec394..68a5909 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPTpduSize.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPTpduSize.go
@@ -107,11 +107,14 @@ func (m COTPTpduSize) LengthInBytes() uint16 {
 }
 
 func COTPTpduSizeParse(io *utils.ReadBuffer) (COTPTpduSize, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadInt8(8)
+    if err != nil {
+        return 0, nil
+    }
+    return COTPTpduSizeValueOf(val), nil
 }
 
 func (e COTPTpduSize) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteInt8(8, int8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/DataTransportErrorCode.go b/plc4go/internal/plc4go/s7/readwrite/model/DataTransportErrorCode.go
index bda71b5..a8f1a5f 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/DataTransportErrorCode.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/DataTransportErrorCode.go
@@ -74,11 +74,14 @@ func (m DataTransportErrorCode) LengthInBytes() uint16 {
 }
 
 func DataTransportErrorCodeParse(io *utils.ReadBuffer) (DataTransportErrorCode, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(8)
+    if err != nil {
+        return 0, nil
+    }
+    return DataTransportErrorCodeValueOf(val), nil
 }
 
 func (e DataTransportErrorCode) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(8, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/DataTransportSize.go b/plc4go/internal/plc4go/s7/readwrite/model/DataTransportSize.go
index d7183ec..280dc83 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/DataTransportSize.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/DataTransportSize.go
@@ -107,11 +107,14 @@ func (m DataTransportSize) LengthInBytes() uint16 {
 }
 
 func DataTransportSizeParse(io *utils.ReadBuffer) (DataTransportSize, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(8)
+    if err != nil {
+        return 0, nil
+    }
+    return DataTransportSizeValueOf(val), nil
 }
 
 func (e DataTransportSize) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(8, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/DeviceGroup.go b/plc4go/internal/plc4go/s7/readwrite/model/DeviceGroup.go
index 1396d5f..111180c 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/DeviceGroup.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/DeviceGroup.go
@@ -65,11 +65,14 @@ func (m DeviceGroup) LengthInBytes() uint16 {
 }
 
 func DeviceGroupParse(io *utils.ReadBuffer) (DeviceGroup, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadInt8(8)
+    if err != nil {
+        return 0, nil
+    }
+    return DeviceGroupValueOf(val), nil
 }
 
 func (e DeviceGroup) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteInt8(8, int8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/MemoryArea.go b/plc4go/internal/plc4go/s7/readwrite/model/MemoryArea.go
index e040096..e42964e 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/MemoryArea.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/MemoryArea.go
@@ -119,11 +119,14 @@ func (m MemoryArea) LengthInBytes() uint16 {
 }
 
 func MemoryAreaParse(io *utils.ReadBuffer) (MemoryArea, error) {
-    // TODO: Implement ...
-    return 0, nil
+    val, err := io.ReadUint8(8)
+    if err != nil {
+        return 0, nil
+    }
+    return MemoryAreaValueOf(val), nil
 }
 
 func (e MemoryArea) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+    err := io.WriteUint8(8, uint8(e))
+    return err
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Address.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Address.go
index cdf1876..16063b0 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Address.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Address.go
@@ -57,15 +57,15 @@ func NewS7Address() *S7Address {
     return &S7Address{}
 }
 
-func CastS7Address(structType interface{}) S7Address {
-    castFunc := func(typ interface{}) S7Address {
+func CastS7Address(structType interface{}) *S7Address {
+    castFunc := func(typ interface{}) *S7Address {
         if casted, ok := typ.(S7Address); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7Address); ok {
-            return *casted
+            return casted
         }
-        return S7Address{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7AddressAny.go b/plc4go/internal/plc4go/s7/readwrite/model/S7AddressAny.go
index da0f75b..47ddae4 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7AddressAny.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7AddressAny.go
@@ -71,13 +71,13 @@ func NewS7AddressAny(transportSize TransportSize, numberOfElements uint16, dbNum
     return child.Parent
 }
 
-func CastS7AddressAny(structType interface{}) S7AddressAny {
-    castFunc := func(typ interface{}) S7AddressAny {
+func CastS7AddressAny(structType interface{}) *S7AddressAny {
+    castFunc := func(typ interface{}) *S7AddressAny {
         if casted, ok := typ.(S7AddressAny); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7AddressAny); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7Address); ok {
             return CastS7AddressAny(casted.Child)
@@ -85,7 +85,7 @@ func CastS7AddressAny(structType interface{}) S7AddressAny {
         if casted, ok := typ.(*S7Address); ok {
             return CastS7AddressAny(casted.Child)
         }
-        return S7AddressAny{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go
index b309018..5d793d1 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go
@@ -65,15 +65,15 @@ func NewS7Message(tpduReference uint16, parameter *S7Parameter, payload *S7Paylo
     return &S7Message{TpduReference: tpduReference, Parameter: parameter, Payload: payload}
 }
 
-func CastS7Message(structType interface{}) S7Message {
-    castFunc := func(typ interface{}) S7Message {
+func CastS7Message(structType interface{}) *S7Message {
+    castFunc := func(typ interface{}) *S7Message {
         if casted, ok := typ.(S7Message); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7Message); ok {
-            return *casted
+            return casted
         }
-        return S7Message{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageRequest.go
index 1d92c51..39330b9 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageRequest.go
@@ -60,13 +60,13 @@ func NewS7MessageRequest(tpduReference uint16, parameter *S7Parameter, payload *
     return child.Parent
 }
 
-func CastS7MessageRequest(structType interface{}) S7MessageRequest {
-    castFunc := func(typ interface{}) S7MessageRequest {
+func CastS7MessageRequest(structType interface{}) *S7MessageRequest {
+    castFunc := func(typ interface{}) *S7MessageRequest {
         if casted, ok := typ.(S7MessageRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7MessageRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7Message); ok {
             return CastS7MessageRequest(casted.Child)
@@ -74,7 +74,7 @@ func CastS7MessageRequest(structType interface{}) S7MessageRequest {
         if casted, ok := typ.(*S7Message); ok {
             return CastS7MessageRequest(casted.Child)
         }
-        return S7MessageRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponse.go
index b6ddd2d..b551cd0 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponse.go
@@ -65,13 +65,13 @@ func NewS7MessageResponse(errorClass uint8, errorCode uint8, tpduReference uint1
     return child.Parent
 }
 
-func CastS7MessageResponse(structType interface{}) S7MessageResponse {
-    castFunc := func(typ interface{}) S7MessageResponse {
+func CastS7MessageResponse(structType interface{}) *S7MessageResponse {
+    castFunc := func(typ interface{}) *S7MessageResponse {
         if casted, ok := typ.(S7MessageResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7MessageResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7Message); ok {
             return CastS7MessageResponse(casted.Child)
@@ -79,7 +79,7 @@ func CastS7MessageResponse(structType interface{}) S7MessageResponse {
         if casted, ok := typ.(*S7Message); ok {
             return CastS7MessageResponse(casted.Child)
         }
-        return S7MessageResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponseData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponseData.go
index 91bf191..9351ac6 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponseData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponseData.go
@@ -65,13 +65,13 @@ func NewS7MessageResponseData(errorClass uint8, errorCode uint8, tpduReference u
     return child.Parent
 }
 
-func CastS7MessageResponseData(structType interface{}) S7MessageResponseData {
-    castFunc := func(typ interface{}) S7MessageResponseData {
+func CastS7MessageResponseData(structType interface{}) *S7MessageResponseData {
+    castFunc := func(typ interface{}) *S7MessageResponseData {
         if casted, ok := typ.(S7MessageResponseData); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7MessageResponseData); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7Message); ok {
             return CastS7MessageResponseData(casted.Child)
@@ -79,7 +79,7 @@ func CastS7MessageResponseData(structType interface{}) S7MessageResponseData {
         if casted, ok := typ.(*S7Message); ok {
             return CastS7MessageResponseData(casted.Child)
         }
-        return S7MessageResponseData{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageUserData.go
index 7778c0a..334b0ea 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageUserData.go
@@ -60,13 +60,13 @@ func NewS7MessageUserData(tpduReference uint16, parameter *S7Parameter, payload
     return child.Parent
 }
 
-func CastS7MessageUserData(structType interface{}) S7MessageUserData {
-    castFunc := func(typ interface{}) S7MessageUserData {
+func CastS7MessageUserData(structType interface{}) *S7MessageUserData {
+    castFunc := func(typ interface{}) *S7MessageUserData {
         if casted, ok := typ.(S7MessageUserData); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7MessageUserData); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7Message); ok {
             return CastS7MessageUserData(casted.Child)
@@ -74,7 +74,7 @@ func CastS7MessageUserData(structType interface{}) S7MessageUserData {
         if casted, ok := typ.(*S7Message); ok {
             return CastS7MessageUserData(casted.Child)
         }
-        return S7MessageUserData{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go
index 5b4e511..356fa19 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go
@@ -58,15 +58,15 @@ func NewS7Parameter() *S7Parameter {
     return &S7Parameter{}
 }
 
-func CastS7Parameter(structType interface{}) S7Parameter {
-    castFunc := func(typ interface{}) S7Parameter {
+func CastS7Parameter(structType interface{}) *S7Parameter {
+    castFunc := func(typ interface{}) *S7Parameter {
         if casted, ok := typ.(S7Parameter); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7Parameter); ok {
-            return *casted
+            return casted
         }
-        return S7Parameter{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
index 81ef211..c328eec 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
@@ -64,13 +64,13 @@ func NewS7ParameterReadVarRequest(items []*S7VarRequestParameterItem, ) *S7Param
     return child.Parent
 }
 
-func CastS7ParameterReadVarRequest(structType interface{}) S7ParameterReadVarRequest {
-    castFunc := func(typ interface{}) S7ParameterReadVarRequest {
+func CastS7ParameterReadVarRequest(structType interface{}) *S7ParameterReadVarRequest {
+    castFunc := func(typ interface{}) *S7ParameterReadVarRequest {
         if casted, ok := typ.(S7ParameterReadVarRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7ParameterReadVarRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7Parameter); ok {
             return CastS7ParameterReadVarRequest(casted.Child)
@@ -78,7 +78,7 @@ func CastS7ParameterReadVarRequest(structType interface{}) S7ParameterReadVarReq
         if casted, ok := typ.(*S7Parameter); ok {
             return CastS7ParameterReadVarRequest(casted.Child)
         }
-        return S7ParameterReadVarRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go
index 2cdf683..e3b84f5 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go
@@ -64,13 +64,13 @@ func NewS7ParameterReadVarResponse(numItems uint8, ) *S7Parameter {
     return child.Parent
 }
 
-func CastS7ParameterReadVarResponse(structType interface{}) S7ParameterReadVarResponse {
-    castFunc := func(typ interface{}) S7ParameterReadVarResponse {
+func CastS7ParameterReadVarResponse(structType interface{}) *S7ParameterReadVarResponse {
+    castFunc := func(typ interface{}) *S7ParameterReadVarResponse {
         if casted, ok := typ.(S7ParameterReadVarResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7ParameterReadVarResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7Parameter); ok {
             return CastS7ParameterReadVarResponse(casted.Child)
@@ -78,7 +78,7 @@ func CastS7ParameterReadVarResponse(structType interface{}) S7ParameterReadVarRe
         if casted, ok := typ.(*S7Parameter); ok {
             return CastS7ParameterReadVarResponse(casted.Child)
         }
-        return S7ParameterReadVarResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go
index c078ab1..3762bae 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go
@@ -69,13 +69,13 @@ func NewS7ParameterSetupCommunication(maxAmqCaller uint16, maxAmqCallee uint16,
     return child.Parent
 }
 
-func CastS7ParameterSetupCommunication(structType interface{}) S7ParameterSetupCommunication {
-    castFunc := func(typ interface{}) S7ParameterSetupCommunication {
+func CastS7ParameterSetupCommunication(structType interface{}) *S7ParameterSetupCommunication {
+    castFunc := func(typ interface{}) *S7ParameterSetupCommunication {
         if casted, ok := typ.(S7ParameterSetupCommunication); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7ParameterSetupCommunication); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7Parameter); ok {
             return CastS7ParameterSetupCommunication(casted.Child)
@@ -83,7 +83,7 @@ func CastS7ParameterSetupCommunication(structType interface{}) S7ParameterSetupC
         if casted, ok := typ.(*S7Parameter); ok {
             return CastS7ParameterSetupCommunication(casted.Child)
         }
-        return S7ParameterSetupCommunication{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
index 4e8937c..da0bd31 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
@@ -64,13 +64,13 @@ func NewS7ParameterUserData(items []*S7ParameterUserDataItem, ) *S7Parameter {
     return child.Parent
 }
 
-func CastS7ParameterUserData(structType interface{}) S7ParameterUserData {
-    castFunc := func(typ interface{}) S7ParameterUserData {
+func CastS7ParameterUserData(structType interface{}) *S7ParameterUserData {
+    castFunc := func(typ interface{}) *S7ParameterUserData {
         if casted, ok := typ.(S7ParameterUserData); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7ParameterUserData); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7Parameter); ok {
             return CastS7ParameterUserData(casted.Child)
@@ -78,7 +78,7 @@ func CastS7ParameterUserData(structType interface{}) S7ParameterUserData {
         if casted, ok := typ.(*S7Parameter); ok {
             return CastS7ParameterUserData(casted.Child)
         }
-        return S7ParameterUserData{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItem.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItem.go
index 2f8fa84..ddae6d3 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItem.go
@@ -57,15 +57,15 @@ func NewS7ParameterUserDataItem() *S7ParameterUserDataItem {
     return &S7ParameterUserDataItem{}
 }
 
-func CastS7ParameterUserDataItem(structType interface{}) S7ParameterUserDataItem {
-    castFunc := func(typ interface{}) S7ParameterUserDataItem {
+func CastS7ParameterUserDataItem(structType interface{}) *S7ParameterUserDataItem {
+    castFunc := func(typ interface{}) *S7ParameterUserDataItem {
         if casted, ok := typ.(S7ParameterUserDataItem); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7ParameterUserDataItem); ok {
-            return *casted
+            return casted
         }
-        return S7ParameterUserDataItem{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItemCPUFunctions.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItemCPUFunctions.go
index a39d8fb..d117373 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItemCPUFunctions.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItemCPUFunctions.go
@@ -74,13 +74,13 @@ func NewS7ParameterUserDataItemCPUFunctions(method uint8, cpuFunctionType uint8,
     return child.Parent
 }
 
-func CastS7ParameterUserDataItemCPUFunctions(structType interface{}) S7ParameterUserDataItemCPUFunctions {
-    castFunc := func(typ interface{}) S7ParameterUserDataItemCPUFunctions {
+func CastS7ParameterUserDataItemCPUFunctions(structType interface{}) *S7ParameterUserDataItemCPUFunctions {
+    castFunc := func(typ interface{}) *S7ParameterUserDataItemCPUFunctions {
         if casted, ok := typ.(S7ParameterUserDataItemCPUFunctions); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7ParameterUserDataItemCPUFunctions); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7ParameterUserDataItem); ok {
             return CastS7ParameterUserDataItemCPUFunctions(casted.Child)
@@ -88,7 +88,7 @@ func CastS7ParameterUserDataItemCPUFunctions(structType interface{}) S7Parameter
         if casted, ok := typ.(*S7ParameterUserDataItem); ok {
             return CastS7ParameterUserDataItemCPUFunctions(casted.Child)
         }
-        return S7ParameterUserDataItemCPUFunctions{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
index d621cd2..ffa7a03 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
@@ -64,13 +64,13 @@ func NewS7ParameterWriteVarRequest(items []*S7VarRequestParameterItem, ) *S7Para
     return child.Parent
 }
 
-func CastS7ParameterWriteVarRequest(structType interface{}) S7ParameterWriteVarRequest {
-    castFunc := func(typ interface{}) S7ParameterWriteVarRequest {
+func CastS7ParameterWriteVarRequest(structType interface{}) *S7ParameterWriteVarRequest {
+    castFunc := func(typ interface{}) *S7ParameterWriteVarRequest {
         if casted, ok := typ.(S7ParameterWriteVarRequest); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7ParameterWriteVarRequest); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7Parameter); ok {
             return CastS7ParameterWriteVarRequest(casted.Child)
@@ -78,7 +78,7 @@ func CastS7ParameterWriteVarRequest(structType interface{}) S7ParameterWriteVarR
         if casted, ok := typ.(*S7Parameter); ok {
             return CastS7ParameterWriteVarRequest(casted.Child)
         }
-        return S7ParameterWriteVarRequest{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go
index 0becfc8..065c78e 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go
@@ -64,13 +64,13 @@ func NewS7ParameterWriteVarResponse(numItems uint8, ) *S7Parameter {
     return child.Parent
 }
 
-func CastS7ParameterWriteVarResponse(structType interface{}) S7ParameterWriteVarResponse {
-    castFunc := func(typ interface{}) S7ParameterWriteVarResponse {
+func CastS7ParameterWriteVarResponse(structType interface{}) *S7ParameterWriteVarResponse {
+    castFunc := func(typ interface{}) *S7ParameterWriteVarResponse {
         if casted, ok := typ.(S7ParameterWriteVarResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7ParameterWriteVarResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7Parameter); ok {
             return CastS7ParameterWriteVarResponse(casted.Child)
@@ -78,7 +78,7 @@ func CastS7ParameterWriteVarResponse(structType interface{}) S7ParameterWriteVar
         if casted, ok := typ.(*S7Parameter); ok {
             return CastS7ParameterWriteVarResponse(casted.Child)
         }
-        return S7ParameterWriteVarResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go
index ec811bb..b057bc8 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go
@@ -58,15 +58,15 @@ func NewS7Payload() *S7Payload {
     return &S7Payload{}
 }
 
-func CastS7Payload(structType interface{}) S7Payload {
-    castFunc := func(typ interface{}) S7Payload {
+func CastS7Payload(structType interface{}) *S7Payload {
+    castFunc := func(typ interface{}) *S7Payload {
         if casted, ok := typ.(S7Payload); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7Payload); ok {
-            return *casted
+            return casted
         }
-        return S7Payload{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
index 1eb20ee..ebd0705 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
@@ -64,13 +64,13 @@ func NewS7PayloadReadVarResponse(items []*S7VarPayloadDataItem, ) *S7Payload {
     return child.Parent
 }
 
-func CastS7PayloadReadVarResponse(structType interface{}) S7PayloadReadVarResponse {
-    castFunc := func(typ interface{}) S7PayloadReadVarResponse {
+func CastS7PayloadReadVarResponse(structType interface{}) *S7PayloadReadVarResponse {
+    castFunc := func(typ interface{}) *S7PayloadReadVarResponse {
         if casted, ok := typ.(S7PayloadReadVarResponse); ok {
-            return casted
+            return &casted
         }
         if casted, ok := typ.(*S7PayloadReadVarResponse); ok {
-            return *casted
+            return casted
         }
         if casted, ok := typ.(S7Payload); ok {
             return CastS7PayloadReadVarResponse(casted.Child)
@@ -78,7 +78,7 @@ func CastS7PayloadReadVarResponse(structType interface{}) S7PayloadReadVarRespon
         if casted, ok := typ.(*S7Payload); ok {
             return CastS7PayloadReadVarResponse(casted.Child)
         }
-        return S7PayloadReadVarResponse{}
+        return nil
     }
     return castFunc(structType)
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
index e830135..4719c73 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
@@ -64,13 +64,13 @@ func NewS7PayloadUserData(items []*S7PayloadUserDataItem, ) *S7Payload {
     return child.Parent
 }
 
-func CastS7PayloadUserData(structType interface{}) S7PayloadUserData {
-    castFunc := func(typ interface{}) S7PayloadUserData {
+func CastS7PayloadUserData(structType interface{}) *S7PayloadUserData {
... 610 lines suppressed ...