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

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

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

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

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

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

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