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:51 UTC

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

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 ...