You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/03/08 09:40:42 UTC

[plc4x] branch develop updated: refactor(plc4go/codegen): flipped new functions of child to return the actual child

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

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


The following commit(s) were added to refs/heads/develop by this push:
     new 2b61308  refactor(plc4go/codegen): flipped new functions of child to return the actual child
2b61308 is described below

commit 2b6130872f7914d56ad17d88c1e328efe9e4328d
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue Mar 8 10:40:30 2022 +0100

    refactor(plc4go/codegen): flipped new functions of child to return the actual child
---
 .../resources/templates/go/model-template.go.ftlh  | 13 ++--
 .../model/CIPEncapsulationConnectionRequest.go     |  8 +--
 .../model/CIPEncapsulationConnectionResponse.go    |  8 +--
 .../readwrite/model/CIPEncapsulationPacket.go      |  3 +
 .../readwrite/model/CIPEncapsulationReadRequest.go |  8 +--
 .../model/CIPEncapsulationReadResponse.go          |  8 +--
 .../readwrite/model/DF1CommandRequestMessage.go    |  8 +--
 ...mandResponseMessageProtectedTypedLogicalRead.go |  8 +--
 .../abeth/readwrite/model/DF1RequestCommand.go     |  3 +
 .../abeth/readwrite/model/DF1RequestMessage.go     |  3 +
 .../model/DF1RequestProtectedTypedLogicalRead.go   |  8 +--
 .../abeth/readwrite/model/DF1ResponseMessage.go    |  3 +
 plc4go/internal/plc4go/ads/Reader.go               |  8 +--
 plc4go/internal/plc4go/ads/Writer.go               |  2 +-
 .../model/AdsAddDeviceNotificationRequest.go       |  8 +--
 .../model/AdsAddDeviceNotificationResponse.go      |  8 +--
 .../internal/plc4go/ads/readwrite/model/AdsData.go |  3 +
 .../model/AdsDeleteDeviceNotificationRequest.go    |  8 +--
 .../model/AdsDeleteDeviceNotificationResponse.go   |  8 +--
 .../model/AdsDeviceNotificationRequest.go          |  8 +--
 .../model/AdsDeviceNotificationResponse.go         |  8 +--
 .../ads/readwrite/model/AdsInvalidRequest.go       |  8 +--
 .../ads/readwrite/model/AdsInvalidResponse.go      |  8 +--
 .../ads/readwrite/model/AdsMultiRequestItem.go     |  3 +
 .../ads/readwrite/model/AdsMultiRequestItemRead.go |  8 +--
 .../model/AdsMultiRequestItemReadWrite.go          |  8 +--
 .../readwrite/model/AdsMultiRequestItemWrite.go    |  8 +--
 .../readwrite/model/AdsReadDeviceInfoRequest.go    |  8 +--
 .../readwrite/model/AdsReadDeviceInfoResponse.go   |  8 +--
 .../plc4go/ads/readwrite/model/AdsReadRequest.go   |  8 +--
 .../plc4go/ads/readwrite/model/AdsReadResponse.go  |  8 +--
 .../ads/readwrite/model/AdsReadStateRequest.go     |  8 +--
 .../ads/readwrite/model/AdsReadStateResponse.go    |  8 +--
 .../ads/readwrite/model/AdsReadWriteRequest.go     |  8 +--
 .../ads/readwrite/model/AdsReadWriteResponse.go    |  8 +--
 .../ads/readwrite/model/AdsWriteControlRequest.go  |  8 +--
 .../ads/readwrite/model/AdsWriteControlResponse.go |  8 +--
 .../plc4go/ads/readwrite/model/AdsWriteRequest.go  |  8 +--
 .../plc4go/ads/readwrite/model/AdsWriteResponse.go |  8 +--
 .../plc4go/bacnetip/readwrite/model/APDU.go        |  3 +
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   |  8 +--
 .../bacnetip/readwrite/model/APDUComplexAck.go     |  8 +--
 .../readwrite/model/APDUConfirmedRequest.go        |  8 +--
 .../plc4go/bacnetip/readwrite/model/APDUError.go   |  8 +--
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  |  8 +--
 .../bacnetip/readwrite/model/APDUSegmentAck.go     |  8 +--
 .../bacnetip/readwrite/model/APDUSimpleAck.go      |  8 +--
 .../readwrite/model/APDUUnconfirmedRequest.go      |  8 +--
 .../plc4go/bacnetip/readwrite/model/APDUUnknown.go |  8 +--
 .../readwrite/model/BACnetApplicationTag.go        |  3 +
 .../model/BACnetApplicationTagBitString.go         |  8 +--
 .../readwrite/model/BACnetApplicationTagBoolean.go |  8 +--
 .../model/BACnetApplicationTagCharacterString.go   |  8 +--
 .../readwrite/model/BACnetApplicationTagDate.go    |  8 +--
 .../readwrite/model/BACnetApplicationTagDouble.go  |  8 +--
 .../model/BACnetApplicationTagEnumerated.go        |  8 +--
 .../readwrite/model/BACnetApplicationTagNull.go    |  8 +--
 .../model/BACnetApplicationTagObjectIdentifier.go  |  8 +--
 .../model/BACnetApplicationTagOctetString.go       |  8 +--
 .../readwrite/model/BACnetApplicationTagReal.go    |  8 +--
 .../model/BACnetApplicationTagSignedInteger.go     |  8 +--
 .../readwrite/model/BACnetApplicationTagTime.go    |  8 +--
 .../model/BACnetApplicationTagUnsignedInteger.go   |  8 +--
 .../bacnetip/readwrite/model/BACnetClosingTag.go   |  8 +--
 .../readwrite/model/BACnetConfirmedServiceACK.go   |  3 +
 .../BACnetConfirmedServiceACKAtomicReadFile.go     |  8 +--
 .../BACnetConfirmedServiceACKAtomicWriteFile.go    |  8 +--
 ...tConfirmedServiceACKConfirmedPrivateTransfer.go |  8 +--
 .../model/BACnetConfirmedServiceACKCreateObject.go |  8 +--
 .../BACnetConfirmedServiceACKGetAlarmSummary.go    |  8 +--
 ...ACnetConfirmedServiceACKGetEnrollmentSummary.go |  8 +--
 ...BACnetConfirmedServiceACKGetEventInformation.go |  8 +--
 .../model/BACnetConfirmedServiceACKReadProperty.go |  8 +--
 ...ACnetConfirmedServiceACKReadPropertyMultiple.go |  8 +--
 .../model/BACnetConfirmedServiceACKReadRange.go    |  8 +--
 ...BACnetConfirmedServiceACKRemovedAuthenticate.go |  8 +--
 ...rmedServiceACKRemovedReadPropertyConditional.go |  8 +--
 .../model/BACnetConfirmedServiceACKVTData.go       |  8 +--
 .../model/BACnetConfirmedServiceACKVTOpen.go       |  8 +--
 .../model/BACnetConfirmedServiceAddListElement.go  |  8 +--
 .../model/BACnetConfirmedServiceRequest.go         |  3 +
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |  8 +--
 .../BACnetConfirmedServiceRequestAddListElement.go |  8 +--
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |  8 +--
 ...tConfirmedServiceRequestAtomicReadFileRecord.go |  8 +--
 ...tConfirmedServiceRequestAtomicReadFileStream.go |  8 +--
 ...edServiceRequestAtomicReadFileStreamOrRecord.go |  3 +
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |  8 +--
 ...firmedServiceRequestConfirmedCOVNotification.go |  8 +--
 ...rviceRequestConfirmedCOVNotificationMultiple.go |  8 +--
 ...rmedServiceRequestConfirmedEventNotification.go |  8 +--
 ...firmedServiceRequestConfirmedPrivateTransfer.go |  8 +--
 ...tConfirmedServiceRequestConfirmedTextMessage.go |  8 +--
 ...ACnetConfirmedServiceRequestConfirmedUnknown.go |  8 +--
 .../BACnetConfirmedServiceRequestCreateObject.go   |  8 +--
 .../BACnetConfirmedServiceRequestDeleteObject.go   |  8 +--
 ...rmedServiceRequestDeviceCommunicationControl.go |  8 +--
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |  8 +--
 ...etConfirmedServiceRequestGetEventInformation.go |  8 +--
 ...etConfirmedServiceRequestLifeSafetyOperation.go |  8 +--
 .../BACnetConfirmedServiceRequestReadProperty.go   |  8 +--
 ...tConfirmedServiceRequestReadPropertyMultiple.go |  8 +--
 .../BACnetConfirmedServiceRequestReadRange.go      |  8 +--
 ...netConfirmedServiceRequestReinitializeDevice.go |  8 +--
 ...CnetConfirmedServiceRequestRemoveListElement.go |  8 +--
 ...etConfirmedServiceRequestRemovedAuthenticate.go |  8 +--
 ...ServiceRequestRemovedReadPropertyConditional.go |  8 +--
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |  8 +--
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |  8 +--
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |  8 +--
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |  8 +--
 .../model/BACnetConfirmedServiceRequestVTClose.go  |  8 +--
 .../model/BACnetConfirmedServiceRequestVTData.go   |  8 +--
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |  8 +--
 .../BACnetConfirmedServiceRequestWriteProperty.go  |  8 +--
 ...ConfirmedServiceRequestWritePropertyMultiple.go |  8 +--
 .../readwrite/model/BACnetConstructedData.go       |  3 +
 .../model/BACnetConstructedDataCommand.go          |  8 +--
 .../model/BACnetConstructedDataEventTimestamps.go  |  8 +--
 .../model/BACnetConstructedDataLifeSafetyZone.go   |  8 +--
 .../model/BACnetConstructedDataUnspecified.go      |  8 +--
 .../bacnetip/readwrite/model/BACnetContextTag.go   |  3 +
 .../readwrite/model/BACnetContextTagBitString.go   |  8 +--
 .../readwrite/model/BACnetContextTagBoolean.go     |  8 +--
 .../model/BACnetContextTagCharacterString.go       |  8 +--
 .../readwrite/model/BACnetContextTagDate.go        |  8 +--
 .../readwrite/model/BACnetContextTagDeviceState.go |  8 +--
 .../readwrite/model/BACnetContextTagDouble.go      |  8 +--
 .../readwrite/model/BACnetContextTagEmpty.go       |  8 +--
 .../readwrite/model/BACnetContextTagEnumerated.go  |  8 +--
 .../readwrite/model/BACnetContextTagEventState.go  |  8 +--
 .../readwrite/model/BACnetContextTagEventType.go   |  8 +--
 .../readwrite/model/BACnetContextTagNotifyType.go  |  8 +--
 .../model/BACnetContextTagObjectIdentifier.go      |  8 +--
 .../readwrite/model/BACnetContextTagOctetString.go |  8 +--
 .../model/BACnetContextTagPropertyIdentifier.go    |  8 +--
 .../readwrite/model/BACnetContextTagReal.go        |  8 +--
 .../model/BACnetContextTagSignedInteger.go         |  8 +--
 .../readwrite/model/BACnetContextTagTime.go        |  8 +--
 .../model/BACnetContextTagUnsignedInteger.go       |  8 +--
 .../plc4go/bacnetip/readwrite/model/BACnetError.go |  3 +
 .../readwrite/model/BACnetErrorAcknowledgeAlarm.go |  8 +--
 .../readwrite/model/BACnetErrorAtomicReadFile.go   |  8 +--
 .../readwrite/model/BACnetErrorAtomicWriteFile.go  |  8 +--
 .../model/BACnetErrorConfirmedEventNotification.go |  8 +--
 .../model/BACnetErrorConfirmedPrivateTransfer.go   |  8 +--
 .../readwrite/model/BACnetErrorCreateObject.go     |  8 +--
 .../BACnetErrorDeviceCommunicationProtocol.go      |  8 +--
 .../readwrite/model/BACnetErrorGetAlarmSummary.go  |  8 +--
 .../model/BACnetErrorGetEnrollmentSummary.go       |  8 +--
 .../model/BACnetErrorGetEventInformation.go        |  8 +--
 .../readwrite/model/BACnetErrorPasswordFailure.go  |  8 +--
 .../readwrite/model/BACnetErrorReadProperty.go     |  8 +--
 .../model/BACnetErrorReadPropertyMultiple.go       |  8 +--
 .../readwrite/model/BACnetErrorReadRange.go        |  8 +--
 .../model/BACnetErrorRemovedAuthenticate.go        |  8 +--
 .../BACnetErrorRemovedReadPropertyConditional.go   |  8 +--
 .../bacnetip/readwrite/model/BACnetErrorUnknown.go |  8 +--
 .../bacnetip/readwrite/model/BACnetErrorVTData.go  |  8 +--
 .../bacnetip/readwrite/model/BACnetErrorVTOpen.go  |  8 +--
 .../readwrite/model/BACnetErrorWriteProperty.go    |  8 +--
 .../model/BACnetNotificationParameters.go          |  3 +
 .../BACnetNotificationParametersBufferReady.go     |  8 +--
 ...ACnetNotificationParametersChangeOfBitString.go |  8 +--
 .../BACnetNotificationParametersChangeOfState.go   |  8 +--
 .../BACnetNotificationParametersChangeOfValue.go   |  8 +--
 ...tNotificationParametersChangeOfValueNewValue.go |  3 +
 ...onParametersChangeOfValueNewValueChangedBits.go |  8 +--
 ...nParametersChangeOfValueNewValueChangedValue.go |  8 +--
 ...BACnetNotificationParametersComplexEventType.go |  8 +--
 .../model/BACnetNotificationParametersExtended.go  |  8 +--
 .../BACnetNotificationParametersFloatingLimit.go   |  8 +--
 .../BACnetNotificationParametersOutOfRange.go      |  8 +--
 .../BACnetNotificationParametersUnsignedRange.go   |  8 +--
 .../bacnetip/readwrite/model/BACnetOpeningTag.go   |  8 +--
 .../readwrite/model/BACnetPropertyStates.go        |  3 +
 .../readwrite/model/BACnetPropertyStatesAction.go  |  8 +--
 .../model/BACnetPropertyStatesBinaryValue.go       |  8 +--
 .../readwrite/model/BACnetPropertyStatesBoolean.go |  8 +--
 .../bacnetip/readwrite/model/BACnetServiceAck.go   |  3 +
 .../model/BACnetServiceAckAtomicReadFile.go        |  8 +--
 .../model/BACnetServiceAckAtomicReadFileRecord.go  |  8 +--
 .../model/BACnetServiceAckAtomicReadFileStream.go  |  8 +--
 ...BACnetServiceAckAtomicReadFileStreamOrRecord.go |  3 +
 .../model/BACnetServiceAckAtomicWriteFile.go       |  8 +--
 .../BACnetServiceAckConfirmedPrivateTransfer.go    |  8 +--
 .../model/BACnetServiceAckCreateObject.go          |  8 +--
 .../model/BACnetServiceAckGetAlarmSummary.go       |  8 +--
 .../model/BACnetServiceAckGetEnrollmentSummary.go  |  8 +--
 .../model/BACnetServiceAckGetEventInformation.go   |  8 +--
 .../model/BACnetServiceAckReadProperty.go          |  8 +--
 .../model/BACnetServiceAckReadPropertyMultiple.go  |  8 +--
 .../readwrite/model/BACnetServiceAckReadRange.go   |  8 +--
 .../model/BACnetServiceAckRemovedAuthenticate.go   |  8 +--
 ...CnetServiceAckRemovedReadPropertyConditional.go |  8 +--
 .../readwrite/model/BACnetServiceAckVTData.go      |  8 +--
 .../readwrite/model/BACnetServiceAckVTOpen.go      |  8 +--
 .../bacnetip/readwrite/model/BACnetTimeStamp.go    |  3 +
 .../readwrite/model/BACnetTimeStampDateTime.go     |  8 +--
 .../readwrite/model/BACnetTimeStampSequence.go     |  8 +--
 .../readwrite/model/BACnetTimeStampTime.go         |  8 +--
 .../model/BACnetUnconfirmedServiceRequest.go       |  3 +
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |  8 +--
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |  8 +--
 ...UnconfirmedServiceRequestTimeSynchronization.go |  8 +--
 ...onfirmedServiceRequestUTCTimeSynchronization.go |  8 +--
 ...rmedServiceRequestUnconfirmedCOVNotification.go |  8 +--
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |  8 +--
 ...edServiceRequestUnconfirmedEventNotification.go |  8 +--
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go |  8 +--
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |  8 +--
 ...tUnconfirmedServiceRequestUnconfirmedUnknown.go |  8 +--
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |  8 +--
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |  8 +--
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |  8 +--
 .../plc4go/bacnetip/readwrite/model/BVLC.go        |  3 +
 .../model/BVLCDeleteForeignDeviceTableEntry.go     |  8 +--
 .../model/BVLCDistributeBroadcastToNetwork.go      |  8 +--
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |  8 +--
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |  8 +--
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |  8 +--
 .../model/BVLCReadBroadcastDistributionTable.go    |  8 +--
 .../model/BVLCReadBroadcastDistributionTableAck.go |  8 +--
 .../readwrite/model/BVLCReadForeignDeviceTable.go  |  8 +--
 .../model/BVLCReadForeignDeviceTableAck.go         |  8 +--
 .../readwrite/model/BVLCRegisterForeignDevice.go   |  8 +--
 .../plc4go/bacnetip/readwrite/model/BVLCResult.go  |  8 +--
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |  8 +--
 .../model/BVLCWriteBroadcastDistributionTable.go   |  8 +--
 .../plc4go/bacnetip/readwrite/model/NLM.go         |  3 +
 .../model/NLMDisconnectConnectionToNetwork.go      |  8 +--
 .../model/NLMEstablishConnectionToNetwork.go       |  8 +--
 .../readwrite/model/NLMIAmRouterToNetwork.go       |  8 +--
 .../readwrite/model/NLMICouldBeRouterToNetwork.go  |  8 +--
 .../readwrite/model/NLMInitalizeRoutingTable.go    |  8 +--
 .../readwrite/model/NLMInitalizeRoutingTableAck.go |  8 +--
 .../readwrite/model/NLMRejectRouterToNetwork.go    |  8 +--
 .../readwrite/model/NLMRouterAvailableToNetwork.go |  8 +--
 .../readwrite/model/NLMRouterBusyToNetwork.go      |  8 +--
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |  8 +--
 .../plc4go/cbus/readwrite/model/CALData.go         |  3 +
 .../readwrite/model/CALDataReplyAcknowledge.go     |  8 +--
 .../cbus/readwrite/model/CALDataReplyReply.go      |  8 +--
 .../cbus/readwrite/model/CALDataReplyStatus.go     |  8 +--
 .../readwrite/model/CALDataReplyStatusExtended.go  |  8 +--
 .../readwrite/model/CALDataRequestGetStatus.go     |  8 +--
 .../cbus/readwrite/model/CALDataRequestIdentify.go |  8 +--
 .../cbus/readwrite/model/CALDataRequestRecall.go   |  8 +--
 .../cbus/readwrite/model/CALDataRequestReset.go    |  8 +--
 .../plc4go/cbus/readwrite/model/CALReply.go        |  3 +
 .../plc4go/cbus/readwrite/model/CALReplyLong.go    |  8 +--
 .../plc4go/cbus/readwrite/model/CALReplyReply.go   |  8 +--
 .../plc4go/cbus/readwrite/model/CALReplyShort.go   |  8 +--
 .../plc4go/cbus/readwrite/model/CBusCommand.go     |  3 +
 .../model/CBusCommandPointToMultiPoint.go          |  8 +--
 .../readwrite/model/CBusCommandPointToPoint.go     |  8 +--
 .../model/CBusCommandPointToPointToMultiPoint.go   |  8 +--
 .../CBusCommandPointToPointToMultiPointNormal.go   |  8 +--
 .../CBusCommandPointToPointToMultiPointStatus.go   |  8 +--
 .../model/CBusPointToMultiPointCommand.go          |  3 +
 .../model/CBusPointToMultiPointCommandNormal.go    |  8 +--
 .../model/CBusPointToMultiPointCommandStatus.go    |  8 +--
 .../readwrite/model/CBusPointToPointCommand.go     |  3 +
 .../model/CBusPointToPointCommandDirect.go         |  8 +--
 .../model/CBusPointToPointCommandIndirect.go       |  8 +--
 .../model/CBusPointToPointToMultipointCommand.go   |  3 +
 .../plc4go/cbus/readwrite/model/Confirmation.go    |  3 +
 .../cbus/readwrite/model/ConfirmationReply.go      |  8 +--
 .../cbus/readwrite/model/ConfirmationSuccessful.go |  8 +--
 .../cbus/readwrite/model/ExclamationMarkReply.go   |  8 +--
 .../cbus/readwrite/model/IdentifyReplyCommand.go   |  3 +
 .../IdentifyReplyCommandCurrentSenseLevels.go      |  8 +--
 .../model/IdentifyReplyCommandDSIStatus.go         |  8 +--
 .../readwrite/model/IdentifyReplyCommandDelays.go  |  8 +--
 ...dentifyReplyCommandExtendedDiagnosticSummary.go |  8 +--
 .../model/IdentifyReplyCommandFirmwareSummary.go   |  8 +--
 .../model/IdentifyReplyCommandFirmwareVersion.go   |  8 +--
 .../IdentifyReplyCommandGAVPhysicalAddresses.go    |  8 +--
 .../model/IdentifyReplyCommandGAVValuesCurrent.go  |  8 +--
 .../model/IdentifyReplyCommandGAVValuesStored.go   |  8 +--
 .../model/IdentifyReplyCommandLogicalAssignment.go |  8 +--
 .../model/IdentifyReplyCommandManufacturer.go      |  8 +--
 .../model/IdentifyReplyCommandMaximumLevels.go     |  8 +--
 .../model/IdentifyReplyCommandMinimumLevels.go     |  8 +--
 .../IdentifyReplyCommandNetworkTerminalLevels.go   |  8 +--
 .../model/IdentifyReplyCommandNetworkVoltage.go    |  8 +--
 .../model/IdentifyReplyCommandOutputUnitSummary.go |  8 +--
 .../model/IdentifyReplyCommandTerminalLevels.go    |  8 +--
 .../readwrite/model/IdentifyReplyCommandType.go    |  8 +--
 .../plc4go/cbus/readwrite/model/MonitoredSAL.go    |  3 +
 .../model/MonitoredSALLongFormSmartMode.go         |  8 +--
 .../cbus/readwrite/model/MonitoredSALReply.go      |  8 +--
 .../model/MonitoredSALShortFormBasicMode.go        |  8 +--
 .../readwrite/model/NotTransmittedCorruption.go    |  8 +--
 .../cbus/readwrite/model/NotTransmittedSyncLoss.go |  8 +--
 .../model/NotTransmittedToManyReTransmissions.go   |  8 +--
 .../cbus/readwrite/model/NotTransmittedTooLong.go  |  8 +--
 .../cbus/readwrite/model/ParameterChangeReply.go   |  8 +--
 .../plc4go/cbus/readwrite/model/PowerUpReply.go    |  8 +--
 .../internal/plc4go/cbus/readwrite/model/Reply.go  |  3 +
 .../plc4go/cbus/readwrite/model/SALData.go         |  3 +
 .../plc4go/cbus/readwrite/model/SALDataOff.go      |  8 +--
 .../plc4go/cbus/readwrite/model/SALDataOn.go       |  8 +--
 .../cbus/readwrite/model/SALDataRampToLevel.go     |  8 +--
 .../cbus/readwrite/model/SALDataTerminateRamp.go   |  8 +--
 .../plc4go/cbus/readwrite/model/StatusRequest.go   |  3 +
 .../readwrite/model/StatusRequestBinaryState.go    |  8 +--
 .../cbus/readwrite/model/StatusRequestLevel.go     |  8 +--
 .../plc4go/df1/readwrite/model/DF1Command.go       |  3 +
 .../plc4go/df1/readwrite/model/DF1Symbol.go        |  3 +
 .../df1/readwrite/model/DF1SymbolMessageFrame.go   |  8 +--
 .../readwrite/model/DF1SymbolMessageFrameACK.go    |  8 +--
 .../readwrite/model/DF1SymbolMessageFrameNAK.go    |  8 +--
 .../readwrite/model/DF1UnprotectedReadRequest.go   |  8 +--
 .../readwrite/model/DF1UnprotectedReadResponse.go  |  8 +--
 plc4go/internal/plc4go/eip/Reader.go               |  8 +--
 plc4go/internal/plc4go/eip/Writer.go               |  8 +--
 .../plc4go/eip/readwrite/model/CipRRData.go        |  8 +--
 .../plc4go/eip/readwrite/model/CipReadRequest.go   |  8 +--
 .../plc4go/eip/readwrite/model/CipReadResponse.go  |  8 +--
 .../plc4go/eip/readwrite/model/CipService.go       |  3 +
 .../eip/readwrite/model/CipUnconnectedRequest.go   |  8 +--
 .../plc4go/eip/readwrite/model/CipWriteRequest.go  |  8 +--
 .../plc4go/eip/readwrite/model/CipWriteResponse.go |  8 +--
 .../eip/readwrite/model/EipConnectionRequest.go    |  8 +--
 .../eip/readwrite/model/EipDisconnectRequest.go    |  8 +--
 .../plc4go/eip/readwrite/model/EipPacket.go        |  3 +
 .../eip/readwrite/model/MultipleServiceRequest.go  |  8 +--
 .../eip/readwrite/model/MultipleServiceResponse.go |  8 +--
 .../firmata/readwrite/model/FirmataCommand.go      |  3 +
 .../model/FirmataCommandProtocolVersion.go         |  8 +--
 .../model/FirmataCommandSetDigitalPinValue.go      |  8 +--
 .../readwrite/model/FirmataCommandSetPinMode.go    |  8 +--
 .../firmata/readwrite/model/FirmataCommandSysex.go |  8 +--
 .../readwrite/model/FirmataCommandSystemReset.go   |  8 +--
 .../firmata/readwrite/model/FirmataMessage.go      |  3 +
 .../readwrite/model/FirmataMessageAnalogIO.go      |  8 +--
 .../readwrite/model/FirmataMessageCommand.go       |  8 +--
 .../readwrite/model/FirmataMessageDigitalIO.go     |  8 +--
 .../model/FirmataMessageSubscribeAnalogPinValue.go |  8 +--
 .../FirmataMessageSubscribeDigitalPinValue.go      |  8 +--
 .../plc4go/firmata/readwrite/model/SysexCommand.go |  3 +
 .../model/SysexCommandAnalogMappingQueryRequest.go |  8 +--
 .../SysexCommandAnalogMappingQueryResponse.go      |  8 +--
 .../model/SysexCommandAnalogMappingResponse.go     |  8 +--
 .../readwrite/model/SysexCommandCapabilityQuery.go |  8 +--
 .../model/SysexCommandCapabilityResponse.go        |  8 +--
 .../readwrite/model/SysexCommandExtendedAnalog.go  |  8 +--
 .../readwrite/model/SysexCommandExtendedId.go      |  8 +--
 .../readwrite/model/SysexCommandPinStateQuery.go   |  8 +--
 .../model/SysexCommandPinStateResponse.go          |  8 +--
 .../model/SysexCommandReportFirmwareRequest.go     |  8 +--
 .../model/SysexCommandReportFirmwareResponse.go    |  8 +--
 .../model/SysexCommandSamplingInterval.go          |  8 +--
 .../readwrite/model/SysexCommandStringData.go      |  8 +--
 .../model/SysexCommandSysexNonRealtime.go          |  8 +--
 .../readwrite/model/SysexCommandSysexRealtime.go   |  8 +--
 .../knxnetip/ConnectionInternalOperations.go       | 71 +++++++++++-----------
 .../plc4go/knxnetip/readwrite/model/Apdu.go        |  3 +
 .../plc4go/knxnetip/readwrite/model/ApduControl.go |  3 +
 .../knxnetip/readwrite/model/ApduControlAck.go     |  8 +--
 .../knxnetip/readwrite/model/ApduControlConnect.go |  8 +--
 .../readwrite/model/ApduControlContainer.go        |  8 +--
 .../readwrite/model/ApduControlDisconnect.go       |  8 +--
 .../knxnetip/readwrite/model/ApduControlNack.go    |  8 +--
 .../plc4go/knxnetip/readwrite/model/ApduData.go    |  3 +
 .../knxnetip/readwrite/model/ApduDataAdcRead.go    |  8 +--
 .../readwrite/model/ApduDataAdcResponse.go         |  8 +--
 .../knxnetip/readwrite/model/ApduDataContainer.go  |  8 +--
 .../model/ApduDataDeviceDescriptorRead.go          |  8 +--
 .../model/ApduDataDeviceDescriptorResponse.go      |  8 +--
 .../plc4go/knxnetip/readwrite/model/ApduDataExt.go |  3 +
 .../readwrite/model/ApduDataExtAuthorizeRequest.go |  8 +--
 .../model/ApduDataExtAuthorizeResponse.go          |  8 +--
 .../model/ApduDataExtDomainAddressRead.go          |  8 +--
 .../model/ApduDataExtDomainAddressResponse.go      |  8 +--
 .../model/ApduDataExtDomainAddressSelectiveRead.go |  8 +--
 .../ApduDataExtDomainAddressSerialNumberRead.go    |  8 +--
 ...ApduDataExtDomainAddressSerialNumberResponse.go |  8 +--
 .../ApduDataExtDomainAddressSerialNumberWrite.go   |  8 +--
 .../model/ApduDataExtDomainAddressWrite.go         |  8 +--
 .../model/ApduDataExtFileStreamInfoReport.go       |  8 +--
 .../ApduDataExtGroupPropertyValueInfoReport.go     |  8 +--
 .../model/ApduDataExtGroupPropertyValueRead.go     |  8 +--
 .../model/ApduDataExtGroupPropertyValueResponse.go |  8 +--
 .../model/ApduDataExtGroupPropertyValueWrite.go    |  8 +--
 ...ApduDataExtIndividualAddressSerialNumberRead.go |  8 +--
 ...DataExtIndividualAddressSerialNumberResponse.go |  8 +--
 ...pduDataExtIndividualAddressSerialNumberWrite.go |  8 +--
 .../readwrite/model/ApduDataExtKeyResponse.go      |  8 +--
 .../readwrite/model/ApduDataExtKeyWrite.go         |  8 +--
 .../readwrite/model/ApduDataExtLinkRead.go         |  8 +--
 .../readwrite/model/ApduDataExtLinkResponse.go     |  8 +--
 .../readwrite/model/ApduDataExtLinkWrite.go        |  8 +--
 .../readwrite/model/ApduDataExtMemoryBitWrite.go   |  8 +--
 .../model/ApduDataExtNetworkParameterRead.go       |  8 +--
 .../model/ApduDataExtNetworkParameterResponse.go   |  8 +--
 .../model/ApduDataExtNetworkParameterWrite.go      |  8 +--
 .../model/ApduDataExtOpenRoutingTableRequest.go    |  8 +--
 .../model/ApduDataExtPropertyDescriptionRead.go    |  8 +--
 .../ApduDataExtPropertyDescriptionResponse.go      |  8 +--
 .../model/ApduDataExtPropertyValueRead.go          |  8 +--
 .../model/ApduDataExtPropertyValueResponse.go      |  8 +--
 .../model/ApduDataExtPropertyValueWrite.go         |  8 +--
 .../model/ApduDataExtReadRouterMemoryRequest.go    |  8 +--
 .../model/ApduDataExtReadRouterMemoryResponse.go   |  8 +--
 .../model/ApduDataExtReadRouterStatusRequest.go    |  8 +--
 .../model/ApduDataExtReadRouterStatusResponse.go   |  8 +--
 .../model/ApduDataExtReadRoutingTableRequest.go    |  8 +--
 .../model/ApduDataExtReadRoutingTableResponse.go   |  8 +--
 .../model/ApduDataExtWriteRouterMemoryRequest.go   |  8 +--
 .../model/ApduDataExtWriteRouterStatusRequest.go   |  8 +--
 .../model/ApduDataExtWriteRoutingTableRequest.go   |  8 +--
 .../readwrite/model/ApduDataGroupValueRead.go      |  8 +--
 .../readwrite/model/ApduDataGroupValueResponse.go  |  8 +--
 .../readwrite/model/ApduDataGroupValueWrite.go     |  8 +--
 .../model/ApduDataIndividualAddressRead.go         |  8 +--
 .../model/ApduDataIndividualAddressResponse.go     |  8 +--
 .../model/ApduDataIndividualAddressWrite.go        |  8 +--
 .../knxnetip/readwrite/model/ApduDataMemoryRead.go |  8 +--
 .../readwrite/model/ApduDataMemoryResponse.go      |  8 +--
 .../readwrite/model/ApduDataMemoryWrite.go         |  8 +--
 .../knxnetip/readwrite/model/ApduDataOther.go      |  8 +--
 .../knxnetip/readwrite/model/ApduDataRestart.go    |  8 +--
 .../readwrite/model/ApduDataUserMessage.go         |  8 +--
 .../plc4go/knxnetip/readwrite/model/CEMI.go        |  3 +
 .../readwrite/model/CEMIAdditionalInformation.go   |  3 +
 .../CEMIAdditionalInformationBusmonitorInfo.go     |  8 +--
 .../CEMIAdditionalInformationRelativeTimestamp.go  |  8 +--
 .../knxnetip/readwrite/model/ComObjectTable.go     |  3 +
 .../model/ComObjectTableRealisationType1.go        |  8 +--
 .../model/ComObjectTableRealisationType2.go        |  8 +--
 .../model/ComObjectTableRealisationType6.go        |  8 +--
 .../knxnetip/readwrite/model/ConnectionRequest.go  |  8 +--
 .../model/ConnectionRequestInformation.go          |  3 +
 ...ConnectionRequestInformationDeviceManagement.go |  8 +--
 ...ConnectionRequestInformationTunnelConnection.go |  8 +--
 .../knxnetip/readwrite/model/ConnectionResponse.go |  8 +--
 .../readwrite/model/ConnectionResponseDataBlock.go |  3 +
 .../ConnectionResponseDataBlockDeviceManagement.go |  8 +--
 .../ConnectionResponseDataBlockTunnelConnection.go |  8 +--
 .../readwrite/model/ConnectionStateRequest.go      |  8 +--
 .../readwrite/model/ConnectionStateResponse.go     |  8 +--
 .../knxnetip/readwrite/model/DescriptionRequest.go |  8 +--
 .../readwrite/model/DescriptionResponse.go         |  8 +--
 .../readwrite/model/DeviceConfigurationAck.go      |  8 +--
 .../readwrite/model/DeviceConfigurationRequest.go  |  8 +--
 .../knxnetip/readwrite/model/DisconnectRequest.go  |  8 +--
 .../knxnetip/readwrite/model/DisconnectResponse.go |  8 +--
 .../knxnetip/readwrite/model/KnxGroupAddress.go    |  3 +
 .../readwrite/model/KnxGroupAddress2Level.go       |  8 +--
 .../readwrite/model/KnxGroupAddress3Level.go       |  8 +--
 .../readwrite/model/KnxGroupAddressFreeLevel.go    |  8 +--
 .../knxnetip/readwrite/model/KnxNetIpCore.go       |  8 +--
 .../readwrite/model/KnxNetIpDeviceManagement.go    |  8 +--
 .../knxnetip/readwrite/model/KnxNetIpMessage.go    |  3 +
 .../knxnetip/readwrite/model/KnxNetIpRouting.go    |  8 +--
 .../knxnetip/readwrite/model/KnxNetIpTunneling.go  |  8 +--
 .../knxnetip/readwrite/model/KnxNetObjectServer.go |  8 +--
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |  8 +--
 .../readwrite/model/KnxNetRemoteLogging.go         |  8 +--
 .../plc4go/knxnetip/readwrite/model/LBusmonInd.go  |  8 +--
 .../plc4go/knxnetip/readwrite/model/LDataCon.go    |  8 +--
 .../knxnetip/readwrite/model/LDataExtended.go      |  8 +--
 .../plc4go/knxnetip/readwrite/model/LDataFrame.go  |  3 +
 .../knxnetip/readwrite/model/LDataFrameACK.go      |  8 +--
 .../plc4go/knxnetip/readwrite/model/LDataInd.go    |  8 +--
 .../plc4go/knxnetip/readwrite/model/LDataReq.go    |  8 +--
 .../plc4go/knxnetip/readwrite/model/LPollData.go   |  8 +--
 .../knxnetip/readwrite/model/LPollDataCon.go       |  8 +--
 .../knxnetip/readwrite/model/LPollDataReq.go       |  8 +--
 .../plc4go/knxnetip/readwrite/model/LRawCon.go     |  8 +--
 .../plc4go/knxnetip/readwrite/model/LRawInd.go     |  8 +--
 .../plc4go/knxnetip/readwrite/model/LRawReq.go     |  8 +--
 .../readwrite/model/MFuncPropCommandReq.go         |  8 +--
 .../knxnetip/readwrite/model/MFuncPropCon.go       |  8 +--
 .../readwrite/model/MFuncPropStateReadReq.go       |  8 +--
 .../knxnetip/readwrite/model/MPropInfoInd.go       |  8 +--
 .../knxnetip/readwrite/model/MPropReadCon.go       |  8 +--
 .../knxnetip/readwrite/model/MPropReadReq.go       |  8 +--
 .../knxnetip/readwrite/model/MPropWriteCon.go      |  8 +--
 .../knxnetip/readwrite/model/MPropWriteReq.go      |  8 +--
 .../plc4go/knxnetip/readwrite/model/MResetInd.go   |  8 +--
 .../plc4go/knxnetip/readwrite/model/MResetReq.go   |  8 +--
 .../knxnetip/readwrite/model/RoutingIndication.go  |  8 +--
 .../knxnetip/readwrite/model/SearchRequest.go      |  8 +--
 .../knxnetip/readwrite/model/SearchResponse.go     |  8 +--
 .../plc4go/knxnetip/readwrite/model/ServiceId.go   |  3 +
 .../knxnetip/readwrite/model/TDataConnectedInd.go  |  8 +--
 .../knxnetip/readwrite/model/TDataConnectedReq.go  |  8 +--
 .../knxnetip/readwrite/model/TDataIndividualInd.go |  8 +--
 .../knxnetip/readwrite/model/TDataIndividualReq.go |  8 +--
 .../knxnetip/readwrite/model/TunnelingRequest.go   |  8 +--
 .../knxnetip/readwrite/model/TunnelingResponse.go  |  8 +--
 .../knxnetip/readwrite/model/UnknownMessage.go     |  8 +--
 plc4go/internal/plc4go/modbus/Connection.go        |  2 +-
 plc4go/internal/plc4go/modbus/Reader.go            |  8 +--
 plc4go/internal/plc4go/modbus/Writer.go            |  4 +-
 .../plc4go/modbus/readwrite/model/ModbusPDU.go     |  3 +
 .../readwrite/model/ModbusPDUDiagnosticRequest.go  |  8 +--
 .../readwrite/model/ModbusPDUDiagnosticResponse.go |  8 +--
 .../modbus/readwrite/model/ModbusPDUError.go       |  8 +--
 .../model/ModbusPDUGetComEventCounterRequest.go    |  8 +--
 .../model/ModbusPDUGetComEventCounterResponse.go   |  8 +--
 .../model/ModbusPDUGetComEventLogRequest.go        |  8 +--
 .../model/ModbusPDUGetComEventLogResponse.go       |  8 +--
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |  8 +--
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |  8 +--
 .../readwrite/model/ModbusPDUReadCoilsRequest.go   |  8 +--
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |  8 +--
 .../ModbusPDUReadDeviceIdentificationRequest.go    |  8 +--
 .../ModbusPDUReadDeviceIdentificationResponse.go   |  8 +--
 .../model/ModbusPDUReadDiscreteInputsRequest.go    |  8 +--
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |  8 +--
 .../model/ModbusPDUReadExceptionStatusRequest.go   |  8 +--
 .../model/ModbusPDUReadExceptionStatusResponse.go  |  8 +--
 .../model/ModbusPDUReadFifoQueueRequest.go         |  8 +--
 .../model/ModbusPDUReadFifoQueueResponse.go        |  8 +--
 .../model/ModbusPDUReadFileRecordRequest.go        |  8 +--
 .../model/ModbusPDUReadFileRecordResponse.go       |  8 +--
 .../model/ModbusPDUReadHoldingRegistersRequest.go  |  8 +--
 .../model/ModbusPDUReadHoldingRegistersResponse.go |  8 +--
 .../model/ModbusPDUReadInputRegistersRequest.go    |  8 +--
 .../model/ModbusPDUReadInputRegistersResponse.go   |  8 +--
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |  8 +--
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |  8 +--
 .../model/ModbusPDUReportServerIdRequest.go        |  8 +--
 .../model/ModbusPDUReportServerIdResponse.go       |  8 +--
 .../model/ModbusPDUWriteFileRecordRequest.go       |  8 +--
 .../model/ModbusPDUWriteFileRecordResponse.go      |  8 +--
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |  8 +--
 .../model/ModbusPDUWriteMultipleCoilsResponse.go   |  8 +--
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |  8 +--
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |  8 +--
 .../model/ModbusPDUWriteSingleCoilRequest.go       |  8 +--
 .../model/ModbusPDUWriteSingleCoilResponse.go      |  8 +--
 .../model/ModbusPDUWriteSingleRegisterRequest.go   |  8 +--
 .../model/ModbusPDUWriteSingleRegisterResponse.go  |  8 +--
 plc4go/internal/plc4go/s7/Connection.go            | 27 ++++----
 plc4go/internal/plc4go/s7/Reader.go                | 12 ++--
 plc4go/internal/plc4go/s7/Writer.go                | 10 +--
 .../plc4go/s7/readwrite/model/COTPPacket.go        |  3 +
 .../readwrite/model/COTPPacketConnectionRequest.go |  8 +--
 .../model/COTPPacketConnectionResponse.go          |  8 +--
 .../plc4go/s7/readwrite/model/COTPPacketData.go    |  8 +--
 .../readwrite/model/COTPPacketDisconnectRequest.go |  8 +--
 .../model/COTPPacketDisconnectResponse.go          |  8 +--
 .../s7/readwrite/model/COTPPacketTpduError.go      |  8 +--
 .../plc4go/s7/readwrite/model/COTPParameter.go     |  3 +
 .../s7/readwrite/model/COTPParameterCalledTsap.go  |  8 +--
 .../s7/readwrite/model/COTPParameterCallingTsap.go |  8 +--
 .../s7/readwrite/model/COTPParameterChecksum.go    |  8 +--
 ...COTPParameterDisconnectAdditionalInformation.go |  8 +--
 .../s7/readwrite/model/COTPParameterTpduSize.go    |  8 +--
 .../plc4go/s7/readwrite/model/S7Address.go         |  3 +
 .../plc4go/s7/readwrite/model/S7AddressAny.go      |  8 +--
 .../s7/readwrite/model/S7DataAlarmMessage.go       |  3 +
 .../plc4go/s7/readwrite/model/S7Message.go         |  3 +
 .../s7/readwrite/model/S7MessageObjectRequest.go   |  8 +--
 .../s7/readwrite/model/S7MessageObjectResponse.go  |  8 +--
 .../plc4go/s7/readwrite/model/S7MessageRequest.go  |  8 +--
 .../plc4go/s7/readwrite/model/S7MessageResponse.go |  8 +--
 .../s7/readwrite/model/S7MessageResponseData.go    |  8 +--
 .../plc4go/s7/readwrite/model/S7MessageUserData.go |  8 +--
 .../plc4go/s7/readwrite/model/S7Parameter.go       |  3 +
 .../readwrite/model/S7ParameterModeTransition.go   |  8 +--
 .../readwrite/model/S7ParameterReadVarRequest.go   |  8 +--
 .../readwrite/model/S7ParameterReadVarResponse.go  |  8 +--
 .../model/S7ParameterSetupCommunication.go         |  8 +--
 .../s7/readwrite/model/S7ParameterUserData.go      |  8 +--
 .../s7/readwrite/model/S7ParameterUserDataItem.go  |  3 +
 .../model/S7ParameterUserDataItemCPUFunctions.go   |  8 +--
 .../readwrite/model/S7ParameterWriteVarRequest.go  |  8 +--
 .../readwrite/model/S7ParameterWriteVarResponse.go |  8 +--
 .../plc4go/s7/readwrite/model/S7Payload.go         |  3 +
 .../plc4go/s7/readwrite/model/S7PayloadAlarm8.go   |  8 +--
 .../s7/readwrite/model/S7PayloadAlarmAckInd.go     |  8 +--
 .../plc4go/s7/readwrite/model/S7PayloadAlarmS.go   |  8 +--
 .../plc4go/s7/readwrite/model/S7PayloadAlarmSC.go  |  8 +--
 .../plc4go/s7/readwrite/model/S7PayloadAlarmSQ.go  |  8 +--
 .../readwrite/model/S7PayloadDiagnosticMessage.go  |  8 +--
 .../plc4go/s7/readwrite/model/S7PayloadNotify.go   |  8 +--
 .../plc4go/s7/readwrite/model/S7PayloadNotify8.go  |  8 +--
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |  8 +--
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |  8 +--
 .../s7/readwrite/model/S7PayloadUserDataItem.go    |  3 +
 .../S7PayloadUserDataItemCpuFunctionAlarmAck.go    |  8 +--
 ...yloadUserDataItemCpuFunctionAlarmAckResponse.go |  8 +--
 .../S7PayloadUserDataItemCpuFunctionAlarmQuery.go  |  8 +--
 ...oadUserDataItemCpuFunctionAlarmQueryResponse.go |  8 +--
 ...ayloadUserDataItemCpuFunctionMsgSubscription.go |  8 +--
 ...aItemCpuFunctionMsgSubscriptionAlarmResponse.go |  8 +--
 ...erDataItemCpuFunctionMsgSubscriptionResponse.go |  8 +--
 ...ataItemCpuFunctionMsgSubscriptionSysResponse.go |  8 +--
 ...PayloadUserDataItemCpuFunctionReadSzlRequest.go |  8 +--
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |  8 +--
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |  8 +--
 .../readwrite/model/S7PayloadWriteVarResponse.go   |  8 +--
 .../readwrite/model/S7VarRequestParameterItem.go   |  3 +
 .../model/S7VarRequestParameterItemAddress.go      |  8 +--
 plc4go/internal/plc4go/s7/s7Io_test.go             | 22 +++----
 601 files changed, 2387 insertions(+), 2182 deletions(-)

diff --git a/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh b/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
index f568049..65ae289 100644
--- a/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
+++ b/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
@@ -296,18 +296,18 @@ func New${type.name}(
             <#sep>, </#sep>
         </#list>
     </#if>
-	) *<#if type.parentType.isPresent()>${type.parentType.orElseThrow().name}<#else>${type.name}</#if> {
+	) *${type.name} {
 </...@compress>
 
 <#if type.parentType.isPresent()>
-	child := &${type.name}{
+	_result := &${type.name}{
 	<#list type.propertyFields as field>
 		${field.name?cap_first}: ${field.name},
 	</#list>
     	${type.parentType.orElseThrow().name}: New${type.parentType.orElseThrow().name}(<#list type.parentPropertyFields as parentField>${parentField.name}<#sep>, </#list><#if filteredParentParserArguments?has_content><#if type.parentPropertyFields?has_content>, </#if><#list filteredParentParserArguments as arg>${arg.name}<#sep>, </#sep></#list></#if>),
 	}
-	child.Child = child
-	return child.${type.parentType.orElseThrow().name}
+	_result.Child = _result
+	return _result
 <#else>
 	<@compress single_line=true>
 	return &${type.name}{
@@ -343,6 +343,11 @@ func Cast${type.name}(structType interface{}) *${type.name} {
 		return Cast${type.name}(casted.Child)
 	}
 	</#if>
+	<#if type.isDiscriminatedParentTypeDefinition()>
+		if casted, ok := structType.(I${type.name}Child); ok {
+			return casted.GetParent()
+		}
+	</#if>
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionRequest.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionRequest.go
index 198feaa..34438a6 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionRequest.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionRequest.go
@@ -66,12 +66,12 @@ func (m *CIPEncapsulationConnectionRequest) GetParent() *CIPEncapsulationPacket
 }
 
 // NewCIPEncapsulationConnectionRequest factory function for CIPEncapsulationConnectionRequest
-func NewCIPEncapsulationConnectionRequest(sessionHandle uint32, status uint32, senderContext []uint8, options uint32) *CIPEncapsulationPacket {
-	child := &CIPEncapsulationConnectionRequest{
+func NewCIPEncapsulationConnectionRequest(sessionHandle uint32, status uint32, senderContext []uint8, options uint32) *CIPEncapsulationConnectionRequest {
+	_result := &CIPEncapsulationConnectionRequest{
 		CIPEncapsulationPacket: NewCIPEncapsulationPacket(sessionHandle, status, senderContext, options),
 	}
-	child.Child = child
-	return child.CIPEncapsulationPacket
+	_result.Child = _result
+	return _result
 }
 
 func CastCIPEncapsulationConnectionRequest(structType interface{}) *CIPEncapsulationConnectionRequest {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionResponse.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionResponse.go
index b9c01af..9f8205e 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionResponse.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionResponse.go
@@ -66,12 +66,12 @@ func (m *CIPEncapsulationConnectionResponse) GetParent() *CIPEncapsulationPacket
 }
 
 // NewCIPEncapsulationConnectionResponse factory function for CIPEncapsulationConnectionResponse
-func NewCIPEncapsulationConnectionResponse(sessionHandle uint32, status uint32, senderContext []uint8, options uint32) *CIPEncapsulationPacket {
-	child := &CIPEncapsulationConnectionResponse{
+func NewCIPEncapsulationConnectionResponse(sessionHandle uint32, status uint32, senderContext []uint8, options uint32) *CIPEncapsulationConnectionResponse {
+	_result := &CIPEncapsulationConnectionResponse{
 		CIPEncapsulationPacket: NewCIPEncapsulationPacket(sessionHandle, status, senderContext, options),
 	}
-	child.Child = child
-	return child.CIPEncapsulationPacket
+	_result.Child = _result
+	return _result
 }
 
 func CastCIPEncapsulationConnectionResponse(structType interface{}) *CIPEncapsulationConnectionResponse {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationPacket.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationPacket.go
index d582065..d87adcb 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationPacket.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationPacket.go
@@ -107,6 +107,9 @@ func CastCIPEncapsulationPacket(structType interface{}) *CIPEncapsulationPacket
 	if casted, ok := structType.(*CIPEncapsulationPacket); ok {
 		return casted
 	}
+	if casted, ok := structType.(ICIPEncapsulationPacketChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadRequest.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadRequest.go
index 607d5f5..12b59d0 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadRequest.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadRequest.go
@@ -83,13 +83,13 @@ func (m *CIPEncapsulationReadRequest) GetRequest() *DF1RequestMessage {
 ///////////////////////////////////////////////////////////
 
 // NewCIPEncapsulationReadRequest factory function for CIPEncapsulationReadRequest
-func NewCIPEncapsulationReadRequest(request *DF1RequestMessage, sessionHandle uint32, status uint32, senderContext []uint8, options uint32) *CIPEncapsulationPacket {
-	child := &CIPEncapsulationReadRequest{
+func NewCIPEncapsulationReadRequest(request *DF1RequestMessage, sessionHandle uint32, status uint32, senderContext []uint8, options uint32) *CIPEncapsulationReadRequest {
+	_result := &CIPEncapsulationReadRequest{
 		Request:                request,
 		CIPEncapsulationPacket: NewCIPEncapsulationPacket(sessionHandle, status, senderContext, options),
 	}
-	child.Child = child
-	return child.CIPEncapsulationPacket
+	_result.Child = _result
+	return _result
 }
 
 func CastCIPEncapsulationReadRequest(structType interface{}) *CIPEncapsulationReadRequest {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadResponse.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadResponse.go
index 487c584..bbbf21c 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadResponse.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadResponse.go
@@ -86,13 +86,13 @@ func (m *CIPEncapsulationReadResponse) GetResponse() *DF1ResponseMessage {
 ///////////////////////////////////////////////////////////
 
 // NewCIPEncapsulationReadResponse factory function for CIPEncapsulationReadResponse
-func NewCIPEncapsulationReadResponse(response *DF1ResponseMessage, sessionHandle uint32, status uint32, senderContext []uint8, options uint32, len uint16) *CIPEncapsulationPacket {
-	child := &CIPEncapsulationReadResponse{
+func NewCIPEncapsulationReadResponse(response *DF1ResponseMessage, sessionHandle uint32, status uint32, senderContext []uint8, options uint32, len uint16) *CIPEncapsulationReadResponse {
+	_result := &CIPEncapsulationReadResponse{
 		Response:               response,
 		CIPEncapsulationPacket: NewCIPEncapsulationPacket(sessionHandle, status, senderContext, options),
 	}
-	child.Child = child
-	return child.CIPEncapsulationPacket
+	_result.Child = _result
+	return _result
 }
 
 func CastCIPEncapsulationReadResponse(structType interface{}) *CIPEncapsulationReadResponse {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandRequestMessage.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandRequestMessage.go
index 5ff1cf3..987ca57 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandRequestMessage.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandRequestMessage.go
@@ -83,13 +83,13 @@ func (m *DF1CommandRequestMessage) GetCommand() *DF1RequestCommand {
 ///////////////////////////////////////////////////////////
 
 // NewDF1CommandRequestMessage factory function for DF1CommandRequestMessage
-func NewDF1CommandRequestMessage(command *DF1RequestCommand, destinationAddress uint8, sourceAddress uint8, status uint8, transactionCounter uint16) *DF1RequestMessage {
-	child := &DF1CommandRequestMessage{
+func NewDF1CommandRequestMessage(command *DF1RequestCommand, destinationAddress uint8, sourceAddress uint8, status uint8, transactionCounter uint16) *DF1CommandRequestMessage {
+	_result := &DF1CommandRequestMessage{
 		Command:           command,
 		DF1RequestMessage: NewDF1RequestMessage(destinationAddress, sourceAddress, status, transactionCounter),
 	}
-	child.Child = child
-	return child.DF1RequestMessage
+	_result.Child = _result
+	return _result
 }
 
 func CastDF1CommandRequestMessage(structType interface{}) *DF1CommandRequestMessage {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandResponseMessageProtectedTypedLogicalRead.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandResponseMessageProtectedTypedLogicalRead.go
index 67b4ead..8ad95ae 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandResponseMessageProtectedTypedLogicalRead.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandResponseMessageProtectedTypedLogicalRead.go
@@ -86,13 +86,13 @@ func (m *DF1CommandResponseMessageProtectedTypedLogicalRead) GetData() []uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewDF1CommandResponseMessageProtectedTypedLogicalRead factory function for DF1CommandResponseMessageProtectedTypedLogicalRead
-func NewDF1CommandResponseMessageProtectedTypedLogicalRead(data []uint8, destinationAddress uint8, sourceAddress uint8, status uint8, transactionCounter uint16, payloadLength uint16) *DF1ResponseMessage {
-	child := &DF1CommandResponseMessageProtectedTypedLogicalRead{
+func NewDF1CommandResponseMessageProtectedTypedLogicalRead(data []uint8, destinationAddress uint8, sourceAddress uint8, status uint8, transactionCounter uint16, payloadLength uint16) *DF1CommandResponseMessageProtectedTypedLogicalRead {
+	_result := &DF1CommandResponseMessageProtectedTypedLogicalRead{
 		Data:               data,
 		DF1ResponseMessage: NewDF1ResponseMessage(destinationAddress, sourceAddress, status, transactionCounter, payloadLength),
 	}
-	child.Child = child
-	return child.DF1ResponseMessage
+	_result.Child = _result
+	return _result
 }
 
 func CastDF1CommandResponseMessageProtectedTypedLogicalRead(structType interface{}) *DF1CommandResponseMessageProtectedTypedLogicalRead {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestCommand.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestCommand.go
index 8a566ef..031ea2e 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestCommand.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestCommand.go
@@ -69,6 +69,9 @@ func CastDF1RequestCommand(structType interface{}) *DF1RequestCommand {
 	if casted, ok := structType.(*DF1RequestCommand); ok {
 		return casted
 	}
+	if casted, ok := structType.(IDF1RequestCommandChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestMessage.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestMessage.go
index 621f5ec..f4e65d4 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestMessage.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestMessage.go
@@ -107,6 +107,9 @@ func CastDF1RequestMessage(structType interface{}) *DF1RequestMessage {
 	if casted, ok := structType.(*DF1RequestMessage); ok {
 		return casted
 	}
+	if casted, ok := structType.(IDF1RequestMessageChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestProtectedTypedLogicalRead.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestProtectedTypedLogicalRead.go
index 0353aceb..91edd6b 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestProtectedTypedLogicalRead.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestProtectedTypedLogicalRead.go
@@ -106,8 +106,8 @@ func (m *DF1RequestProtectedTypedLogicalRead) GetSubElementNumber() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewDF1RequestProtectedTypedLogicalRead factory function for DF1RequestProtectedTypedLogicalRead
-func NewDF1RequestProtectedTypedLogicalRead(byteSize uint8, fileNumber uint8, fileType uint8, elementNumber uint8, subElementNumber uint8) *DF1RequestCommand {
-	child := &DF1RequestProtectedTypedLogicalRead{
+func NewDF1RequestProtectedTypedLogicalRead(byteSize uint8, fileNumber uint8, fileType uint8, elementNumber uint8, subElementNumber uint8) *DF1RequestProtectedTypedLogicalRead {
+	_result := &DF1RequestProtectedTypedLogicalRead{
 		ByteSize:          byteSize,
 		FileNumber:        fileNumber,
 		FileType:          fileType,
@@ -115,8 +115,8 @@ func NewDF1RequestProtectedTypedLogicalRead(byteSize uint8, fileNumber uint8, fi
 		SubElementNumber:  subElementNumber,
 		DF1RequestCommand: NewDF1RequestCommand(),
 	}
-	child.Child = child
-	return child.DF1RequestCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastDF1RequestProtectedTypedLogicalRead(structType interface{}) *DF1RequestProtectedTypedLogicalRead {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1ResponseMessage.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1ResponseMessage.go
index ca2ef2a..bb3c514 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1ResponseMessage.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1ResponseMessage.go
@@ -110,6 +110,9 @@ func CastDF1ResponseMessage(structType interface{}) *DF1ResponseMessage {
 	if casted, ok := structType.(*DF1ResponseMessage); ok {
 		return casted
 	}
+	if casted, ok := structType.(IDF1ResponseMessageChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/ads/Reader.go b/plc4go/internal/plc4go/ads/Reader.go
index c746ba4..8917b91 100644
--- a/plc4go/internal/plc4go/ads/Reader.go
+++ b/plc4go/internal/plc4go/ads/Reader.go
@@ -146,7 +146,7 @@ func (m *Reader) singleRead(readRequest model.PlcReadRequest, result chan model.
 	default:
 		readLength = uint32(adsField.Datatype.NumBytes())
 	}
-	userdata.Data = readWriteModel.NewAdsReadRequest(adsField.IndexGroup, adsField.IndexOffset, readLength)
+	userdata.Data = readWriteModel.NewAdsReadRequest(adsField.IndexGroup, adsField.IndexOffset, readLength).GetParent()
 
 	m.sendOverTheWire(userdata, readRequest, result)
 }
@@ -236,9 +236,9 @@ func (m *Reader) multiRead(readRequest model.PlcReadRequest, result chan model.P
 			return
 		}
 		// With multi-requests, the index-group is fixed and the index offset indicates the number of elements.
-		items[i] = readWriteModel.NewAdsMultiRequestItemRead(adsField.IndexGroup, adsField.IndexOffset, uint32(adsField.GetDatatype().NumBytes())*adsField.NumberOfElements)
+		items[i] = readWriteModel.NewAdsMultiRequestItemRead(adsField.IndexGroup, adsField.IndexOffset, uint32(adsField.GetDatatype().NumBytes())*adsField.NumberOfElements).GetParent()
 	}
-	userdata.Data = readWriteModel.NewAdsReadWriteRequest(uint32(readWriteModel.ReservedIndexGroups_ADSIGRP_MULTIPLE_READ), uint32(len(readRequest.GetFieldNames())), expectedResponseDataSize, items, nil)
+	userdata.Data = readWriteModel.NewAdsReadWriteRequest(uint32(readWriteModel.ReservedIndexGroups_ADSIGRP_MULTIPLE_READ), uint32(len(readRequest.GetFieldNames())), expectedResponseDataSize, items, nil).GetParent()
 
 	m.sendOverTheWire(userdata, readRequest, result)
 }
@@ -332,7 +332,7 @@ func (m *Reader) resolveField(symbolicField SymbolicPlcField) (DirectPlcField, e
 		4,
 		nil,
 		[]byte(symbolicField.SymbolicAddress+"\000"),
-	)
+	).GetParent()
 	result := make(chan model.PlcReadRequestResult)
 	go func() {
 		dummyRequest := plc4goModel.NewDefaultPlcReadRequest(map[string]model.PlcField{"dummy": DirectPlcField{PlcField: PlcField{Datatype: readWriteModel.AdsDataType_UINT32}}}, []string{"dummy"}, nil, nil)
diff --git a/plc4go/internal/plc4go/ads/Writer.go b/plc4go/internal/plc4go/ads/Writer.go
index 12639de..be77b33 100644
--- a/plc4go/internal/plc4go/ads/Writer.go
+++ b/plc4go/internal/plc4go/ads/Writer.go
@@ -128,7 +128,7 @@ func (m *Writer) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWrite
 		}
 		switch adsField.FieldType {
 		case DirectAdsStringField:
-			userdata.Data = readWriteModel.NewAdsWriteRequest(adsField.IndexGroup, adsField.IndexOffset, data)
+			userdata.Data = readWriteModel.NewAdsWriteRequest(adsField.IndexGroup, adsField.IndexOffset, data).GetParent()
 			panic("implement me")
 		case DirectAdsField:
 			panic("implement me")
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
index 2829187..fff1ae5 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
@@ -118,8 +118,8 @@ func (m *AdsAddDeviceNotificationRequest) GetCycleTime() uint32 {
 ///////////////////////////////////////////////////////////
 
 // NewAdsAddDeviceNotificationRequest factory function for AdsAddDeviceNotificationRequest
-func NewAdsAddDeviceNotificationRequest(indexGroup uint32, indexOffset uint32, length uint32, transmissionMode uint32, maxDelay uint32, cycleTime uint32) *AdsData {
-	child := &AdsAddDeviceNotificationRequest{
+func NewAdsAddDeviceNotificationRequest(indexGroup uint32, indexOffset uint32, length uint32, transmissionMode uint32, maxDelay uint32, cycleTime uint32) *AdsAddDeviceNotificationRequest {
+	_result := &AdsAddDeviceNotificationRequest{
 		IndexGroup:       indexGroup,
 		IndexOffset:      indexOffset,
 		Length:           length,
@@ -128,8 +128,8 @@ func NewAdsAddDeviceNotificationRequest(indexGroup uint32, indexOffset uint32, l
 		CycleTime:        cycleTime,
 		AdsData:          NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsAddDeviceNotificationRequest(structType interface{}) *AdsAddDeviceNotificationRequest {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
index 57d8425..52b2497 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
@@ -89,14 +89,14 @@ func (m *AdsAddDeviceNotificationResponse) GetNotificationHandle() uint32 {
 ///////////////////////////////////////////////////////////
 
 // NewAdsAddDeviceNotificationResponse factory function for AdsAddDeviceNotificationResponse
-func NewAdsAddDeviceNotificationResponse(result ReturnCode, notificationHandle uint32) *AdsData {
-	child := &AdsAddDeviceNotificationResponse{
+func NewAdsAddDeviceNotificationResponse(result ReturnCode, notificationHandle uint32) *AdsAddDeviceNotificationResponse {
+	_result := &AdsAddDeviceNotificationResponse{
 		Result:             result,
 		NotificationHandle: notificationHandle,
 		AdsData:            NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsAddDeviceNotificationResponse(structType interface{}) *AdsAddDeviceNotificationResponse {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
index 7b10e28..fb5ea84 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
@@ -71,6 +71,9 @@ func CastAdsData(structType interface{}) *AdsData {
 	if casted, ok := structType.(*AdsData); ok {
 		return casted
 	}
+	if casted, ok := structType.(IAdsDataChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
index 43f7d5f..4b04b6f 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
@@ -82,13 +82,13 @@ func (m *AdsDeleteDeviceNotificationRequest) GetNotificationHandle() uint32 {
 ///////////////////////////////////////////////////////////
 
 // NewAdsDeleteDeviceNotificationRequest factory function for AdsDeleteDeviceNotificationRequest
-func NewAdsDeleteDeviceNotificationRequest(notificationHandle uint32) *AdsData {
-	child := &AdsDeleteDeviceNotificationRequest{
+func NewAdsDeleteDeviceNotificationRequest(notificationHandle uint32) *AdsDeleteDeviceNotificationRequest {
+	_result := &AdsDeleteDeviceNotificationRequest{
 		NotificationHandle: notificationHandle,
 		AdsData:            NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsDeleteDeviceNotificationRequest(structType interface{}) *AdsDeleteDeviceNotificationRequest {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
index c95cef9..ae347c9 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
@@ -82,13 +82,13 @@ func (m *AdsDeleteDeviceNotificationResponse) GetResult() ReturnCode {
 ///////////////////////////////////////////////////////////
 
 // NewAdsDeleteDeviceNotificationResponse factory function for AdsDeleteDeviceNotificationResponse
-func NewAdsDeleteDeviceNotificationResponse(result ReturnCode) *AdsData {
-	child := &AdsDeleteDeviceNotificationResponse{
+func NewAdsDeleteDeviceNotificationResponse(result ReturnCode) *AdsDeleteDeviceNotificationResponse {
+	_result := &AdsDeleteDeviceNotificationResponse{
 		Result:  result,
 		AdsData: NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsDeleteDeviceNotificationResponse(structType interface{}) *AdsDeleteDeviceNotificationResponse {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
index cf3f66b..fb426e1 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
@@ -96,15 +96,15 @@ func (m *AdsDeviceNotificationRequest) GetAdsStampHeaders() []*AdsStampHeader {
 ///////////////////////////////////////////////////////////
 
 // NewAdsDeviceNotificationRequest factory function for AdsDeviceNotificationRequest
-func NewAdsDeviceNotificationRequest(length uint32, stamps uint32, adsStampHeaders []*AdsStampHeader) *AdsData {
-	child := &AdsDeviceNotificationRequest{
+func NewAdsDeviceNotificationRequest(length uint32, stamps uint32, adsStampHeaders []*AdsStampHeader) *AdsDeviceNotificationRequest {
+	_result := &AdsDeviceNotificationRequest{
 		Length:          length,
 		Stamps:          stamps,
 		AdsStampHeaders: adsStampHeaders,
 		AdsData:         NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsDeviceNotificationRequest(structType interface{}) *AdsDeviceNotificationRequest {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
index f33200e..981263e 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
@@ -65,12 +65,12 @@ func (m *AdsDeviceNotificationResponse) GetParent() *AdsData {
 }
 
 // NewAdsDeviceNotificationResponse factory function for AdsDeviceNotificationResponse
-func NewAdsDeviceNotificationResponse() *AdsData {
-	child := &AdsDeviceNotificationResponse{
+func NewAdsDeviceNotificationResponse() *AdsDeviceNotificationResponse {
+	_result := &AdsDeviceNotificationResponse{
 		AdsData: NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsDeviceNotificationResponse(structType interface{}) *AdsDeviceNotificationResponse {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
index 59e27af..23dec4d 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
@@ -65,12 +65,12 @@ func (m *AdsInvalidRequest) GetParent() *AdsData {
 }
 
 // NewAdsInvalidRequest factory function for AdsInvalidRequest
-func NewAdsInvalidRequest() *AdsData {
-	child := &AdsInvalidRequest{
+func NewAdsInvalidRequest() *AdsInvalidRequest {
+	_result := &AdsInvalidRequest{
 		AdsData: NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsInvalidRequest(structType interface{}) *AdsInvalidRequest {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
index c698f06..afb4a0c 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
@@ -65,12 +65,12 @@ func (m *AdsInvalidResponse) GetParent() *AdsData {
 }
 
 // NewAdsInvalidResponse factory function for AdsInvalidResponse
-func NewAdsInvalidResponse() *AdsData {
-	child := &AdsInvalidResponse{
+func NewAdsInvalidResponse() *AdsInvalidResponse {
+	_result := &AdsInvalidResponse{
 		AdsData: NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsInvalidResponse(structType interface{}) *AdsInvalidResponse {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
index 804f3a3..5356551 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
@@ -69,6 +69,9 @@ func CastAdsMultiRequestItem(structType interface{}) *AdsMultiRequestItem {
 	if casted, ok := structType.(*AdsMultiRequestItem); ok {
 		return casted
 	}
+	if casted, ok := structType.(IAdsMultiRequestItemChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
index 8a12c61..426dced 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
@@ -92,15 +92,15 @@ func (m *AdsMultiRequestItemRead) GetItemReadLength() uint32 {
 ///////////////////////////////////////////////////////////
 
 // NewAdsMultiRequestItemRead factory function for AdsMultiRequestItemRead
-func NewAdsMultiRequestItemRead(itemIndexGroup uint32, itemIndexOffset uint32, itemReadLength uint32) *AdsMultiRequestItem {
-	child := &AdsMultiRequestItemRead{
+func NewAdsMultiRequestItemRead(itemIndexGroup uint32, itemIndexOffset uint32, itemReadLength uint32) *AdsMultiRequestItemRead {
+	_result := &AdsMultiRequestItemRead{
 		ItemIndexGroup:      itemIndexGroup,
 		ItemIndexOffset:     itemIndexOffset,
 		ItemReadLength:      itemReadLength,
 		AdsMultiRequestItem: NewAdsMultiRequestItem(),
 	}
-	child.Child = child
-	return child.AdsMultiRequestItem
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsMultiRequestItemRead(structType interface{}) *AdsMultiRequestItemRead {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
index a7ccb45..2818f2a 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
@@ -99,16 +99,16 @@ func (m *AdsMultiRequestItemReadWrite) GetItemWriteLength() uint32 {
 ///////////////////////////////////////////////////////////
 
 // NewAdsMultiRequestItemReadWrite factory function for AdsMultiRequestItemReadWrite
-func NewAdsMultiRequestItemReadWrite(itemIndexGroup uint32, itemIndexOffset uint32, itemReadLength uint32, itemWriteLength uint32) *AdsMultiRequestItem {
-	child := &AdsMultiRequestItemReadWrite{
+func NewAdsMultiRequestItemReadWrite(itemIndexGroup uint32, itemIndexOffset uint32, itemReadLength uint32, itemWriteLength uint32) *AdsMultiRequestItemReadWrite {
+	_result := &AdsMultiRequestItemReadWrite{
 		ItemIndexGroup:      itemIndexGroup,
 		ItemIndexOffset:     itemIndexOffset,
 		ItemReadLength:      itemReadLength,
 		ItemWriteLength:     itemWriteLength,
 		AdsMultiRequestItem: NewAdsMultiRequestItem(),
 	}
-	child.Child = child
-	return child.AdsMultiRequestItem
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsMultiRequestItemReadWrite(structType interface{}) *AdsMultiRequestItemReadWrite {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
index 0aa94b1..a19c500 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
@@ -92,15 +92,15 @@ func (m *AdsMultiRequestItemWrite) GetItemWriteLength() uint32 {
 ///////////////////////////////////////////////////////////
 
 // NewAdsMultiRequestItemWrite factory function for AdsMultiRequestItemWrite
-func NewAdsMultiRequestItemWrite(itemIndexGroup uint32, itemIndexOffset uint32, itemWriteLength uint32) *AdsMultiRequestItem {
-	child := &AdsMultiRequestItemWrite{
+func NewAdsMultiRequestItemWrite(itemIndexGroup uint32, itemIndexOffset uint32, itemWriteLength uint32) *AdsMultiRequestItemWrite {
+	_result := &AdsMultiRequestItemWrite{
 		ItemIndexGroup:      itemIndexGroup,
 		ItemIndexOffset:     itemIndexOffset,
 		ItemWriteLength:     itemWriteLength,
 		AdsMultiRequestItem: NewAdsMultiRequestItem(),
 	}
-	child.Child = child
-	return child.AdsMultiRequestItem
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsMultiRequestItemWrite(structType interface{}) *AdsMultiRequestItemWrite {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
index a8f3919..f5d21a2 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
@@ -65,12 +65,12 @@ func (m *AdsReadDeviceInfoRequest) GetParent() *AdsData {
 }
 
 // NewAdsReadDeviceInfoRequest factory function for AdsReadDeviceInfoRequest
-func NewAdsReadDeviceInfoRequest() *AdsData {
-	child := &AdsReadDeviceInfoRequest{
+func NewAdsReadDeviceInfoRequest() *AdsReadDeviceInfoRequest {
+	_result := &AdsReadDeviceInfoRequest{
 		AdsData: NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsReadDeviceInfoRequest(structType interface{}) *AdsReadDeviceInfoRequest {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
index 43e2a64..35575aa 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
@@ -110,8 +110,8 @@ func (m *AdsReadDeviceInfoResponse) GetDevice() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewAdsReadDeviceInfoResponse factory function for AdsReadDeviceInfoResponse
-func NewAdsReadDeviceInfoResponse(result ReturnCode, majorVersion uint8, minorVersion uint8, version uint16, device []byte) *AdsData {
-	child := &AdsReadDeviceInfoResponse{
+func NewAdsReadDeviceInfoResponse(result ReturnCode, majorVersion uint8, minorVersion uint8, version uint16, device []byte) *AdsReadDeviceInfoResponse {
+	_result := &AdsReadDeviceInfoResponse{
 		Result:       result,
 		MajorVersion: majorVersion,
 		MinorVersion: minorVersion,
@@ -119,8 +119,8 @@ func NewAdsReadDeviceInfoResponse(result ReturnCode, majorVersion uint8, minorVe
 		Device:       device,
 		AdsData:      NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsReadDeviceInfoResponse(structType interface{}) *AdsReadDeviceInfoResponse {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
index 784985b..8aafecf 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
@@ -96,15 +96,15 @@ func (m *AdsReadRequest) GetLength() uint32 {
 ///////////////////////////////////////////////////////////
 
 // NewAdsReadRequest factory function for AdsReadRequest
-func NewAdsReadRequest(indexGroup uint32, indexOffset uint32, length uint32) *AdsData {
-	child := &AdsReadRequest{
+func NewAdsReadRequest(indexGroup uint32, indexOffset uint32, length uint32) *AdsReadRequest {
+	_result := &AdsReadRequest{
 		IndexGroup:  indexGroup,
 		IndexOffset: indexOffset,
 		Length:      length,
 		AdsData:     NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsReadRequest(structType interface{}) *AdsReadRequest {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
index fc45531..e24852a 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
@@ -89,14 +89,14 @@ func (m *AdsReadResponse) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewAdsReadResponse factory function for AdsReadResponse
-func NewAdsReadResponse(result ReturnCode, data []byte) *AdsData {
-	child := &AdsReadResponse{
+func NewAdsReadResponse(result ReturnCode, data []byte) *AdsReadResponse {
+	_result := &AdsReadResponse{
 		Result:  result,
 		Data:    data,
 		AdsData: NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsReadResponse(structType interface{}) *AdsReadResponse {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
index 0c68159..140822c 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
@@ -65,12 +65,12 @@ func (m *AdsReadStateRequest) GetParent() *AdsData {
 }
 
 // NewAdsReadStateRequest factory function for AdsReadStateRequest
-func NewAdsReadStateRequest() *AdsData {
-	child := &AdsReadStateRequest{
+func NewAdsReadStateRequest() *AdsReadStateRequest {
+	_result := &AdsReadStateRequest{
 		AdsData: NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsReadStateRequest(structType interface{}) *AdsReadStateRequest {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
index cd3c02f..a628e88 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
@@ -96,15 +96,15 @@ func (m *AdsReadStateResponse) GetDeviceState() uint16 {
 ///////////////////////////////////////////////////////////
 
 // NewAdsReadStateResponse factory function for AdsReadStateResponse
-func NewAdsReadStateResponse(result ReturnCode, adsState uint16, deviceState uint16) *AdsData {
-	child := &AdsReadStateResponse{
+func NewAdsReadStateResponse(result ReturnCode, adsState uint16, deviceState uint16) *AdsReadStateResponse {
+	_result := &AdsReadStateResponse{
 		Result:      result,
 		AdsState:    adsState,
 		DeviceState: deviceState,
 		AdsData:     NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsReadStateResponse(structType interface{}) *AdsReadStateResponse {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
index 77b207f..e580162 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
@@ -110,8 +110,8 @@ func (m *AdsReadWriteRequest) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewAdsReadWriteRequest factory function for AdsReadWriteRequest
-func NewAdsReadWriteRequest(indexGroup uint32, indexOffset uint32, readLength uint32, items []*AdsMultiRequestItem, data []byte) *AdsData {
-	child := &AdsReadWriteRequest{
+func NewAdsReadWriteRequest(indexGroup uint32, indexOffset uint32, readLength uint32, items []*AdsMultiRequestItem, data []byte) *AdsReadWriteRequest {
+	_result := &AdsReadWriteRequest{
 		IndexGroup:  indexGroup,
 		IndexOffset: indexOffset,
 		ReadLength:  readLength,
@@ -119,8 +119,8 @@ func NewAdsReadWriteRequest(indexGroup uint32, indexOffset uint32, readLength ui
 		Data:        data,
 		AdsData:     NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsReadWriteRequest(structType interface{}) *AdsReadWriteRequest {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
index 9a51a42..e484694 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
@@ -89,14 +89,14 @@ func (m *AdsReadWriteResponse) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewAdsReadWriteResponse factory function for AdsReadWriteResponse
-func NewAdsReadWriteResponse(result ReturnCode, data []byte) *AdsData {
-	child := &AdsReadWriteResponse{
+func NewAdsReadWriteResponse(result ReturnCode, data []byte) *AdsReadWriteResponse {
+	_result := &AdsReadWriteResponse{
 		Result:  result,
 		Data:    data,
 		AdsData: NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsReadWriteResponse(structType interface{}) *AdsReadWriteResponse {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
index 21a491a..dd6c5b6 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
@@ -96,15 +96,15 @@ func (m *AdsWriteControlRequest) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewAdsWriteControlRequest factory function for AdsWriteControlRequest
-func NewAdsWriteControlRequest(adsState uint16, deviceState uint16, data []byte) *AdsData {
-	child := &AdsWriteControlRequest{
+func NewAdsWriteControlRequest(adsState uint16, deviceState uint16, data []byte) *AdsWriteControlRequest {
+	_result := &AdsWriteControlRequest{
 		AdsState:    adsState,
 		DeviceState: deviceState,
 		Data:        data,
 		AdsData:     NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsWriteControlRequest(structType interface{}) *AdsWriteControlRequest {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go
index cbd0621..4021752 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go
@@ -82,13 +82,13 @@ func (m *AdsWriteControlResponse) GetResult() ReturnCode {
 ///////////////////////////////////////////////////////////
 
 // NewAdsWriteControlResponse factory function for AdsWriteControlResponse
-func NewAdsWriteControlResponse(result ReturnCode) *AdsData {
-	child := &AdsWriteControlResponse{
+func NewAdsWriteControlResponse(result ReturnCode) *AdsWriteControlResponse {
+	_result := &AdsWriteControlResponse{
 		Result:  result,
 		AdsData: NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsWriteControlResponse(structType interface{}) *AdsWriteControlResponse {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
index 0c1b9aa..1b6f789 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
@@ -96,15 +96,15 @@ func (m *AdsWriteRequest) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewAdsWriteRequest factory function for AdsWriteRequest
-func NewAdsWriteRequest(indexGroup uint32, indexOffset uint32, data []byte) *AdsData {
-	child := &AdsWriteRequest{
+func NewAdsWriteRequest(indexGroup uint32, indexOffset uint32, data []byte) *AdsWriteRequest {
+	_result := &AdsWriteRequest{
 		IndexGroup:  indexGroup,
 		IndexOffset: indexOffset,
 		Data:        data,
 		AdsData:     NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsWriteRequest(structType interface{}) *AdsWriteRequest {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go
index fb346f0..9719b74 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go
@@ -82,13 +82,13 @@ func (m *AdsWriteResponse) GetResult() ReturnCode {
 ///////////////////////////////////////////////////////////
 
 // NewAdsWriteResponse factory function for AdsWriteResponse
-func NewAdsWriteResponse(result ReturnCode) *AdsData {
-	child := &AdsWriteResponse{
+func NewAdsWriteResponse(result ReturnCode) *AdsWriteResponse {
+	_result := &AdsWriteResponse{
 		Result:  result,
 		AdsData: NewAdsData(),
 	}
-	child.Child = child
-	return child.AdsData
+	_result.Child = _result
+	return _result
 }
 
 func CastAdsWriteResponse(structType interface{}) *AdsWriteResponse {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
index ddd7958..0993a49 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
@@ -72,6 +72,9 @@ func CastAPDU(structType interface{}) *APDU {
 	if casted, ok := structType.(*APDU); ok {
 		return casted
 	}
+	if casted, ok := structType.(IAPDUChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
index 6865caa..e755ae7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
@@ -96,15 +96,15 @@ func (m *APDUAbort) GetAbortReason() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewAPDUAbort factory function for APDUAbort
-func NewAPDUAbort(server bool, originalInvokeId uint8, abortReason uint8, apduLength uint16) *APDU {
-	child := &APDUAbort{
+func NewAPDUAbort(server bool, originalInvokeId uint8, abortReason uint8, apduLength uint16) *APDUAbort {
+	_result := &APDUAbort{
 		Server:           server,
 		OriginalInvokeId: originalInvokeId,
 		AbortReason:      abortReason,
 		APDU:             NewAPDU(apduLength),
 	}
-	child.Child = child
-	return child.APDU
+	_result.Child = _result
+	return _result
 }
 
 func CastAPDUAbort(structType interface{}) *APDUAbort {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
index 9aac103..524720b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
@@ -132,8 +132,8 @@ func (m *APDUComplexAck) GetSegment() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewAPDUComplexAck factory function for APDUComplexAck
-func NewAPDUComplexAck(segmentedMessage bool, moreFollows bool, originalInvokeId uint8, sequenceNumber *uint8, proposedWindowSize *uint8, serviceAck *BACnetServiceAck, segmentServiceChoice *uint8, segment []byte, apduLength uint16) *APDU {
-	child := &APDUComplexAck{
+func NewAPDUComplexAck(segmentedMessage bool, moreFollows bool, originalInvokeId uint8, sequenceNumber *uint8, proposedWindowSize *uint8, serviceAck *BACnetServiceAck, segmentServiceChoice *uint8, segment []byte, apduLength uint16) *APDUComplexAck {
+	_result := &APDUComplexAck{
 		SegmentedMessage:     segmentedMessage,
 		MoreFollows:          moreFollows,
 		OriginalInvokeId:     originalInvokeId,
@@ -144,8 +144,8 @@ func NewAPDUComplexAck(segmentedMessage bool, moreFollows bool, originalInvokeId
 		Segment:              segment,
 		APDU:                 NewAPDU(apduLength),
 	}
-	child.Child = child
-	return child.APDU
+	_result.Child = _result
+	return _result
 }
 
 func CastAPDUComplexAck(structType interface{}) *APDUComplexAck {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
index 71f9e96..8105053 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
@@ -138,8 +138,8 @@ func (m *APDUConfirmedRequest) GetServiceRequest() *BACnetConfirmedServiceReques
 ///////////////////////////////////////////////////////////
 
 // NewAPDUConfirmedRequest factory function for APDUConfirmedRequest
-func NewAPDUConfirmedRequest(segmentedMessage bool, moreFollows bool, segmentedResponseAccepted bool, maxSegmentsAccepted uint8, maxApduLengthAccepted uint8, invokeId uint8, sequenceNumber *uint8, proposedWindowSize *uint8, serviceRequest *BACnetConfirmedServiceRequest, apduLength uint16) *APDU {
-	child := &APDUConfirmedRequest{
+func NewAPDUConfirmedRequest(segmentedMessage bool, moreFollows bool, segmentedResponseAccepted bool, maxSegmentsAccepted uint8, maxApduLengthAccepted uint8, invokeId uint8, sequenceNumber *uint8, proposedWindowSize *uint8, serviceRequest *BACnetConfirmedServiceRequest, apduLength uint16) *APDUConfirmedRequest {
+	_result := &APDUConfirmedRequest{
 		SegmentedMessage:          segmentedMessage,
 		MoreFollows:               moreFollows,
 		SegmentedResponseAccepted: segmentedResponseAccepted,
@@ -151,8 +151,8 @@ func NewAPDUConfirmedRequest(segmentedMessage bool, moreFollows bool, segmentedR
 		ServiceRequest:            serviceRequest,
 		APDU:                      NewAPDU(apduLength),
 	}
-	child.Child = child
-	return child.APDU
+	_result.Child = _result
+	return _result
 }
 
 func CastAPDUConfirmedRequest(structType interface{}) *APDUConfirmedRequest {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
index 9c2dc2a..4245766 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
@@ -89,14 +89,14 @@ func (m *APDUError) GetError() *BACnetError {
 ///////////////////////////////////////////////////////////
 
 // NewAPDUError factory function for APDUError
-func NewAPDUError(originalInvokeId uint8, error *BACnetError, apduLength uint16) *APDU {
-	child := &APDUError{
+func NewAPDUError(originalInvokeId uint8, error *BACnetError, apduLength uint16) *APDUError {
+	_result := &APDUError{
 		OriginalInvokeId: originalInvokeId,
 		Error:            error,
 		APDU:             NewAPDU(apduLength),
 	}
-	child.Child = child
-	return child.APDU
+	_result.Child = _result
+	return _result
 }
 
 func CastAPDUError(structType interface{}) *APDUError {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
index 45573b3..856b389 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
@@ -89,14 +89,14 @@ func (m *APDUReject) GetRejectReason() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewAPDUReject factory function for APDUReject
-func NewAPDUReject(originalInvokeId uint8, rejectReason uint8, apduLength uint16) *APDU {
-	child := &APDUReject{
+func NewAPDUReject(originalInvokeId uint8, rejectReason uint8, apduLength uint16) *APDUReject {
+	_result := &APDUReject{
 		OriginalInvokeId: originalInvokeId,
 		RejectReason:     rejectReason,
 		APDU:             NewAPDU(apduLength),
 	}
-	child.Child = child
-	return child.APDU
+	_result.Child = _result
+	return _result
 }
 
 func CastAPDUReject(structType interface{}) *APDUReject {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
index 63d5fd4..e23eb53 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
@@ -110,8 +110,8 @@ func (m *APDUSegmentAck) GetProposedWindowSize() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewAPDUSegmentAck factory function for APDUSegmentAck
-func NewAPDUSegmentAck(negativeAck bool, server bool, originalInvokeId uint8, sequenceNumber uint8, proposedWindowSize uint8, apduLength uint16) *APDU {
-	child := &APDUSegmentAck{
+func NewAPDUSegmentAck(negativeAck bool, server bool, originalInvokeId uint8, sequenceNumber uint8, proposedWindowSize uint8, apduLength uint16) *APDUSegmentAck {
+	_result := &APDUSegmentAck{
 		NegativeAck:        negativeAck,
 		Server:             server,
 		OriginalInvokeId:   originalInvokeId,
@@ -119,8 +119,8 @@ func NewAPDUSegmentAck(negativeAck bool, server bool, originalInvokeId uint8, se
 		ProposedWindowSize: proposedWindowSize,
 		APDU:               NewAPDU(apduLength),
 	}
-	child.Child = child
-	return child.APDU
+	_result.Child = _result
+	return _result
 }
 
 func CastAPDUSegmentAck(structType interface{}) *APDUSegmentAck {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
index 8c90843..526297d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
@@ -89,14 +89,14 @@ func (m *APDUSimpleAck) GetServiceChoice() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewAPDUSimpleAck factory function for APDUSimpleAck
-func NewAPDUSimpleAck(originalInvokeId uint8, serviceChoice uint8, apduLength uint16) *APDU {
-	child := &APDUSimpleAck{
+func NewAPDUSimpleAck(originalInvokeId uint8, serviceChoice uint8, apduLength uint16) *APDUSimpleAck {
+	_result := &APDUSimpleAck{
 		OriginalInvokeId: originalInvokeId,
 		ServiceChoice:    serviceChoice,
 		APDU:             NewAPDU(apduLength),
 	}
-	child.Child = child
-	return child.APDU
+	_result.Child = _result
+	return _result
 }
 
 func CastAPDUSimpleAck(structType interface{}) *APDUSimpleAck {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
index 3edb6c6..725ed97 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
@@ -82,13 +82,13 @@ func (m *APDUUnconfirmedRequest) GetServiceRequest() *BACnetUnconfirmedServiceRe
 ///////////////////////////////////////////////////////////
 
 // NewAPDUUnconfirmedRequest factory function for APDUUnconfirmedRequest
-func NewAPDUUnconfirmedRequest(serviceRequest *BACnetUnconfirmedServiceRequest, apduLength uint16) *APDU {
-	child := &APDUUnconfirmedRequest{
+func NewAPDUUnconfirmedRequest(serviceRequest *BACnetUnconfirmedServiceRequest, apduLength uint16) *APDUUnconfirmedRequest {
+	_result := &APDUUnconfirmedRequest{
 		ServiceRequest: serviceRequest,
 		APDU:           NewAPDU(apduLength),
 	}
-	child.Child = child
-	return child.APDU
+	_result.Child = _result
+	return _result
 }
 
 func CastAPDUUnconfirmedRequest(structType interface{}) *APDUUnconfirmedRequest {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnknown.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnknown.go
index d462be2..dc821f0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnknown.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnknown.go
@@ -81,13 +81,13 @@ func (m *APDUUnknown) GetUnknownBytes() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewAPDUUnknown factory function for APDUUnknown
-func NewAPDUUnknown(unknownBytes []byte, apduLength uint16) *APDU {
-	child := &APDUUnknown{
+func NewAPDUUnknown(unknownBytes []byte, apduLength uint16) *APDUUnknown {
+	_result := &APDUUnknown{
 		UnknownBytes: unknownBytes,
 		APDU:         NewAPDU(apduLength),
 	}
-	child.Child = child
-	return child.APDU
+	_result.Child = _result
+	return _result
 }
 
 func CastAPDUUnknown(structType interface{}) *APDUUnknown {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTag.go
index 1c3098a..1899e7e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTag.go
@@ -103,6 +103,9 @@ func CastBACnetApplicationTag(structType interface{}) *BACnetApplicationTag {
 	if casted, ok := structType.(*BACnetApplicationTag); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetApplicationTagChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBitString.go
index b8f589a..3bc50c1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBitString.go
@@ -76,13 +76,13 @@ func (m *BACnetApplicationTagBitString) GetPayload() *BACnetTagPayloadBitString
 ///////////////////////////////////////////////////////////
 
 // NewBACnetApplicationTagBitString factory function for BACnetApplicationTagBitString
-func NewBACnetApplicationTagBitString(payload *BACnetTagPayloadBitString, header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagBitString{
+func NewBACnetApplicationTagBitString(payload *BACnetTagPayloadBitString, header *BACnetTagHeader) *BACnetApplicationTagBitString {
+	_result := &BACnetApplicationTagBitString{
 		Payload:              payload,
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagBitString(structType interface{}) *BACnetApplicationTagBitString {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBoolean.go
index e3ef171..797b8b5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBoolean.go
@@ -90,13 +90,13 @@ func (m *BACnetApplicationTagBoolean) GetActualValue() bool {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetApplicationTagBoolean factory function for BACnetApplicationTagBoolean
-func NewBACnetApplicationTagBoolean(payload *BACnetTagPayloadBoolean, header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagBoolean{
+func NewBACnetApplicationTagBoolean(payload *BACnetTagPayloadBoolean, header *BACnetTagHeader) *BACnetApplicationTagBoolean {
+	_result := &BACnetApplicationTagBoolean{
 		Payload:              payload,
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagBoolean(structType interface{}) *BACnetApplicationTagBoolean {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagCharacterString.go
index e0672e7..891637e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagCharacterString.go
@@ -90,13 +90,13 @@ func (m *BACnetApplicationTagCharacterString) GetValue() string {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetApplicationTagCharacterString factory function for BACnetApplicationTagCharacterString
-func NewBACnetApplicationTagCharacterString(payload *BACnetTagPayloadCharacterString, header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagCharacterString{
+func NewBACnetApplicationTagCharacterString(payload *BACnetTagPayloadCharacterString, header *BACnetTagHeader) *BACnetApplicationTagCharacterString {
+	_result := &BACnetApplicationTagCharacterString{
 		Payload:              payload,
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagCharacterString(structType interface{}) *BACnetApplicationTagCharacterString {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDate.go
index 6c8165d..38f34d9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDate.go
@@ -76,13 +76,13 @@ func (m *BACnetApplicationTagDate) GetPayload() *BACnetTagPayloadDate {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetApplicationTagDate factory function for BACnetApplicationTagDate
-func NewBACnetApplicationTagDate(payload *BACnetTagPayloadDate, header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagDate{
+func NewBACnetApplicationTagDate(payload *BACnetTagPayloadDate, header *BACnetTagHeader) *BACnetApplicationTagDate {
+	_result := &BACnetApplicationTagDate{
 		Payload:              payload,
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagDate(structType interface{}) *BACnetApplicationTagDate {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDouble.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDouble.go
index da48eea..ef78fb2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDouble.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDouble.go
@@ -90,13 +90,13 @@ func (m *BACnetApplicationTagDouble) GetActualValue() float64 {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetApplicationTagDouble factory function for BACnetApplicationTagDouble
-func NewBACnetApplicationTagDouble(payload *BACnetTagPayloadDouble, header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagDouble{
+func NewBACnetApplicationTagDouble(payload *BACnetTagPayloadDouble, header *BACnetTagHeader) *BACnetApplicationTagDouble {
+	_result := &BACnetApplicationTagDouble{
 		Payload:              payload,
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagDouble(structType interface{}) *BACnetApplicationTagDouble {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
index 8746457..747ad1e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
@@ -90,13 +90,13 @@ func (m *BACnetApplicationTagEnumerated) GetActualValue() uint32 {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetApplicationTagEnumerated factory function for BACnetApplicationTagEnumerated
-func NewBACnetApplicationTagEnumerated(payload *BACnetTagPayloadEnumerated, header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagEnumerated{
+func NewBACnetApplicationTagEnumerated(payload *BACnetTagPayloadEnumerated, header *BACnetTagHeader) *BACnetApplicationTagEnumerated {
+	_result := &BACnetApplicationTagEnumerated{
 		Payload:              payload,
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagEnumerated(structType interface{}) *BACnetApplicationTagEnumerated {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagNull.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagNull.go
index e9fc311..f656ff4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagNull.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagNull.go
@@ -59,12 +59,12 @@ func (m *BACnetApplicationTagNull) GetParent() *BACnetApplicationTag {
 }
 
 // NewBACnetApplicationTagNull factory function for BACnetApplicationTagNull
-func NewBACnetApplicationTagNull(header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagNull{
+func NewBACnetApplicationTagNull(header *BACnetTagHeader) *BACnetApplicationTagNull {
+	_result := &BACnetApplicationTagNull{
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagNull(structType interface{}) *BACnetApplicationTagNull {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagObjectIdentifier.go
index cbfc10e..7c46dd3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagObjectIdentifier.go
@@ -96,13 +96,13 @@ func (m *BACnetApplicationTagObjectIdentifier) GetInstanceNumber() uint32 {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetApplicationTagObjectIdentifier factory function for BACnetApplicationTagObjectIdentifier
-func NewBACnetApplicationTagObjectIdentifier(payload *BACnetTagPayloadObjectIdentifier, header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagObjectIdentifier{
+func NewBACnetApplicationTagObjectIdentifier(payload *BACnetTagPayloadObjectIdentifier, header *BACnetTagHeader) *BACnetApplicationTagObjectIdentifier {
+	_result := &BACnetApplicationTagObjectIdentifier{
 		Payload:              payload,
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagObjectIdentifier(structType interface{}) *BACnetApplicationTagObjectIdentifier {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagOctetString.go
index bac9546..2a99098 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagOctetString.go
@@ -90,13 +90,13 @@ func (m *BACnetApplicationTagOctetString) GetValue() string {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetApplicationTagOctetString factory function for BACnetApplicationTagOctetString
-func NewBACnetApplicationTagOctetString(payload *BACnetTagPayloadOctetString, header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagOctetString{
+func NewBACnetApplicationTagOctetString(payload *BACnetTagPayloadOctetString, header *BACnetTagHeader) *BACnetApplicationTagOctetString {
+	_result := &BACnetApplicationTagOctetString{
 		Payload:              payload,
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagOctetString(structType interface{}) *BACnetApplicationTagOctetString {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagReal.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagReal.go
index 5792117..3cdb51d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagReal.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagReal.go
@@ -90,13 +90,13 @@ func (m *BACnetApplicationTagReal) GetActualValue() float32 {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetApplicationTagReal factory function for BACnetApplicationTagReal
-func NewBACnetApplicationTagReal(payload *BACnetTagPayloadReal, header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagReal{
+func NewBACnetApplicationTagReal(payload *BACnetTagPayloadReal, header *BACnetTagHeader) *BACnetApplicationTagReal {
+	_result := &BACnetApplicationTagReal{
 		Payload:              payload,
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagReal(structType interface{}) *BACnetApplicationTagReal {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagSignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagSignedInteger.go
index b435f24..2010170 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagSignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagSignedInteger.go
@@ -90,13 +90,13 @@ func (m *BACnetApplicationTagSignedInteger) GetActualValue() uint64 {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetApplicationTagSignedInteger factory function for BACnetApplicationTagSignedInteger
-func NewBACnetApplicationTagSignedInteger(payload *BACnetTagPayloadSignedInteger, header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagSignedInteger{
+func NewBACnetApplicationTagSignedInteger(payload *BACnetTagPayloadSignedInteger, header *BACnetTagHeader) *BACnetApplicationTagSignedInteger {
+	_result := &BACnetApplicationTagSignedInteger{
 		Payload:              payload,
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagSignedInteger(structType interface{}) *BACnetApplicationTagSignedInteger {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagTime.go
index c7d3d03..2376187 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagTime.go
@@ -76,13 +76,13 @@ func (m *BACnetApplicationTagTime) GetPayload() *BACnetTagPayloadTime {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetApplicationTagTime factory function for BACnetApplicationTagTime
-func NewBACnetApplicationTagTime(payload *BACnetTagPayloadTime, header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagTime{
+func NewBACnetApplicationTagTime(payload *BACnetTagPayloadTime, header *BACnetTagHeader) *BACnetApplicationTagTime {
+	_result := &BACnetApplicationTagTime{
 		Payload:              payload,
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagTime(structType interface{}) *BACnetApplicationTagTime {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagUnsignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagUnsignedInteger.go
index 7f6d73a..1eafdf6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagUnsignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagUnsignedInteger.go
@@ -90,13 +90,13 @@ func (m *BACnetApplicationTagUnsignedInteger) GetActualValue() uint64 {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetApplicationTagUnsignedInteger factory function for BACnetApplicationTagUnsignedInteger
-func NewBACnetApplicationTagUnsignedInteger(payload *BACnetTagPayloadUnsignedInteger, header *BACnetTagHeader) *BACnetApplicationTag {
-	child := &BACnetApplicationTagUnsignedInteger{
+func NewBACnetApplicationTagUnsignedInteger(payload *BACnetTagPayloadUnsignedInteger, header *BACnetTagHeader) *BACnetApplicationTagUnsignedInteger {
+	_result := &BACnetApplicationTagUnsignedInteger{
 		Payload:              payload,
 		BACnetApplicationTag: NewBACnetApplicationTag(header),
 	}
-	child.Child = child
-	return child.BACnetApplicationTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetApplicationTagUnsignedInteger(structType interface{}) *BACnetApplicationTagUnsignedInteger {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetClosingTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetClosingTag.go
index f19d73d..8991152 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetClosingTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetClosingTag.go
@@ -67,12 +67,12 @@ func (m *BACnetClosingTag) GetParent() *BACnetContextTag {
 }
 
 // NewBACnetClosingTag factory function for BACnetClosingTag
-func NewBACnetClosingTag(header *BACnetTagHeader, tagNumberArgument uint8, actualLength uint32) *BACnetContextTag {
-	child := &BACnetClosingTag{
+func NewBACnetClosingTag(header *BACnetTagHeader, tagNumberArgument uint8, actualLength uint32) *BACnetClosingTag {
+	_result := &BACnetClosingTag{
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetClosingTag(structType interface{}) *BACnetClosingTag {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
index f1a64ce..43be813 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
@@ -69,6 +69,9 @@ func CastBACnetConfirmedServiceACK(structType interface{}) *BACnetConfirmedServi
 	if casted, ok := structType.(*BACnetConfirmedServiceACK); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetConfirmedServiceACKChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
index 67e49d1..c30354d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
@@ -62,12 +62,12 @@ func (m *BACnetConfirmedServiceACKAtomicReadFile) GetParent() *BACnetConfirmedSe
 }
 
 // NewBACnetConfirmedServiceACKAtomicReadFile factory function for BACnetConfirmedServiceACKAtomicReadFile
-func NewBACnetConfirmedServiceACKAtomicReadFile() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKAtomicReadFile{
+func NewBACnetConfirmedServiceACKAtomicReadFile() *BACnetConfirmedServiceACKAtomicReadFile {
+	_result := &BACnetConfirmedServiceACKAtomicReadFile{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKAtomicReadFile(structType interface{}) *BACnetConfirmedServiceACKAtomicReadFile {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
index fbec942..f69b4d7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
@@ -62,12 +62,12 @@ func (m *BACnetConfirmedServiceACKAtomicWriteFile) GetParent() *BACnetConfirmedS
 }
 
 // NewBACnetConfirmedServiceACKAtomicWriteFile factory function for BACnetConfirmedServiceACKAtomicWriteFile
-func NewBACnetConfirmedServiceACKAtomicWriteFile() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKAtomicWriteFile{
+func NewBACnetConfirmedServiceACKAtomicWriteFile() *BACnetConfirmedServiceACKAtomicWriteFile {
+	_result := &BACnetConfirmedServiceACKAtomicWriteFile{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKAtomicWriteFile(structType interface{}) *BACnetConfirmedServiceACKAtomicWriteFile {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
index 4d7d14b..d77160b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
@@ -62,12 +62,12 @@ func (m *BACnetConfirmedServiceACKConfirmedPrivateTransfer) GetParent() *BACnetC
 }
 
 // NewBACnetConfirmedServiceACKConfirmedPrivateTransfer factory function for BACnetConfirmedServiceACKConfirmedPrivateTransfer
-func NewBACnetConfirmedServiceACKConfirmedPrivateTransfer() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKConfirmedPrivateTransfer{
+func NewBACnetConfirmedServiceACKConfirmedPrivateTransfer() *BACnetConfirmedServiceACKConfirmedPrivateTransfer {
+	_result := &BACnetConfirmedServiceACKConfirmedPrivateTransfer{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKConfirmedPrivateTransfer(structType interface{}) *BACnetConfirmedServiceACKConfirmedPrivateTransfer {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
index e3f4e6d..1056990 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
@@ -61,12 +61,12 @@ func (m *BACnetConfirmedServiceACKCreateObject) GetParent() *BACnetConfirmedServ
 }
 
 // NewBACnetConfirmedServiceACKCreateObject factory function for BACnetConfirmedServiceACKCreateObject
-func NewBACnetConfirmedServiceACKCreateObject() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKCreateObject{
+func NewBACnetConfirmedServiceACKCreateObject() *BACnetConfirmedServiceACKCreateObject {
+	_result := &BACnetConfirmedServiceACKCreateObject{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKCreateObject(structType interface{}) *BACnetConfirmedServiceACKCreateObject {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
index dc501b2..3c96155 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
@@ -62,12 +62,12 @@ func (m *BACnetConfirmedServiceACKGetAlarmSummary) GetParent() *BACnetConfirmedS
 }
 
 // NewBACnetConfirmedServiceACKGetAlarmSummary factory function for BACnetConfirmedServiceACKGetAlarmSummary
-func NewBACnetConfirmedServiceACKGetAlarmSummary() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKGetAlarmSummary{
+func NewBACnetConfirmedServiceACKGetAlarmSummary() *BACnetConfirmedServiceACKGetAlarmSummary {
+	_result := &BACnetConfirmedServiceACKGetAlarmSummary{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKGetAlarmSummary(structType interface{}) *BACnetConfirmedServiceACKGetAlarmSummary {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
index ce9b0c7..fe8589a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
@@ -62,12 +62,12 @@ func (m *BACnetConfirmedServiceACKGetEnrollmentSummary) GetParent() *BACnetConfi
 }
 
 // NewBACnetConfirmedServiceACKGetEnrollmentSummary factory function for BACnetConfirmedServiceACKGetEnrollmentSummary
-func NewBACnetConfirmedServiceACKGetEnrollmentSummary() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKGetEnrollmentSummary{
+func NewBACnetConfirmedServiceACKGetEnrollmentSummary() *BACnetConfirmedServiceACKGetEnrollmentSummary {
+	_result := &BACnetConfirmedServiceACKGetEnrollmentSummary{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKGetEnrollmentSummary(structType interface{}) *BACnetConfirmedServiceACKGetEnrollmentSummary {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
index b434c1f..527ec43 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
@@ -62,12 +62,12 @@ func (m *BACnetConfirmedServiceACKGetEventInformation) GetParent() *BACnetConfir
 }
 
 // NewBACnetConfirmedServiceACKGetEventInformation factory function for BACnetConfirmedServiceACKGetEventInformation
-func NewBACnetConfirmedServiceACKGetEventInformation() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKGetEventInformation{
+func NewBACnetConfirmedServiceACKGetEventInformation() *BACnetConfirmedServiceACKGetEventInformation {
+	_result := &BACnetConfirmedServiceACKGetEventInformation{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKGetEventInformation(structType interface{}) *BACnetConfirmedServiceACKGetEventInformation {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
index fbc4fbe..d5eca30 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
@@ -61,12 +61,12 @@ func (m *BACnetConfirmedServiceACKReadProperty) GetParent() *BACnetConfirmedServ
 }
 
 // NewBACnetConfirmedServiceACKReadProperty factory function for BACnetConfirmedServiceACKReadProperty
-func NewBACnetConfirmedServiceACKReadProperty() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKReadProperty{
+func NewBACnetConfirmedServiceACKReadProperty() *BACnetConfirmedServiceACKReadProperty {
+	_result := &BACnetConfirmedServiceACKReadProperty{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKReadProperty(structType interface{}) *BACnetConfirmedServiceACKReadProperty {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
index e9a9745..eaf1507 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
@@ -62,12 +62,12 @@ func (m *BACnetConfirmedServiceACKReadPropertyMultiple) GetParent() *BACnetConfi
 }
 
 // NewBACnetConfirmedServiceACKReadPropertyMultiple factory function for BACnetConfirmedServiceACKReadPropertyMultiple
-func NewBACnetConfirmedServiceACKReadPropertyMultiple() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKReadPropertyMultiple{
+func NewBACnetConfirmedServiceACKReadPropertyMultiple() *BACnetConfirmedServiceACKReadPropertyMultiple {
+	_result := &BACnetConfirmedServiceACKReadPropertyMultiple{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKReadPropertyMultiple(structType interface{}) *BACnetConfirmedServiceACKReadPropertyMultiple {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
index 72208ac..c23aa97 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
@@ -61,12 +61,12 @@ func (m *BACnetConfirmedServiceACKReadRange) GetParent() *BACnetConfirmedService
 }
 
 // NewBACnetConfirmedServiceACKReadRange factory function for BACnetConfirmedServiceACKReadRange
-func NewBACnetConfirmedServiceACKReadRange() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKReadRange{
+func NewBACnetConfirmedServiceACKReadRange() *BACnetConfirmedServiceACKReadRange {
+	_result := &BACnetConfirmedServiceACKReadRange{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKReadRange(structType interface{}) *BACnetConfirmedServiceACKReadRange {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
index ea31ebd..9701e92 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
@@ -62,12 +62,12 @@ func (m *BACnetConfirmedServiceACKRemovedAuthenticate) GetParent() *BACnetConfir
 }
 
 // NewBACnetConfirmedServiceACKRemovedAuthenticate factory function for BACnetConfirmedServiceACKRemovedAuthenticate
-func NewBACnetConfirmedServiceACKRemovedAuthenticate() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKRemovedAuthenticate{
+func NewBACnetConfirmedServiceACKRemovedAuthenticate() *BACnetConfirmedServiceACKRemovedAuthenticate {
+	_result := &BACnetConfirmedServiceACKRemovedAuthenticate{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKRemovedAuthenticate(structType interface{}) *BACnetConfirmedServiceACKRemovedAuthenticate {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
index fbd0ebc..826eef6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
@@ -62,12 +62,12 @@ func (m *BACnetConfirmedServiceACKRemovedReadPropertyConditional) GetParent() *B
 }
 
 // NewBACnetConfirmedServiceACKRemovedReadPropertyConditional factory function for BACnetConfirmedServiceACKRemovedReadPropertyConditional
-func NewBACnetConfirmedServiceACKRemovedReadPropertyConditional() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKRemovedReadPropertyConditional{
+func NewBACnetConfirmedServiceACKRemovedReadPropertyConditional() *BACnetConfirmedServiceACKRemovedReadPropertyConditional {
+	_result := &BACnetConfirmedServiceACKRemovedReadPropertyConditional{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKRemovedReadPropertyConditional(structType interface{}) *BACnetConfirmedServiceACKRemovedReadPropertyConditional {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
index 250ba94..0662c21 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
@@ -61,12 +61,12 @@ func (m *BACnetConfirmedServiceACKVTData) GetParent() *BACnetConfirmedServiceACK
 }
 
 // NewBACnetConfirmedServiceACKVTData factory function for BACnetConfirmedServiceACKVTData
-func NewBACnetConfirmedServiceACKVTData() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKVTData{
+func NewBACnetConfirmedServiceACKVTData() *BACnetConfirmedServiceACKVTData {
+	_result := &BACnetConfirmedServiceACKVTData{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKVTData(structType interface{}) *BACnetConfirmedServiceACKVTData {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
index 62a6bda..914719a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
@@ -61,12 +61,12 @@ func (m *BACnetConfirmedServiceACKVTOpen) GetParent() *BACnetConfirmedServiceACK
 }
 
 // NewBACnetConfirmedServiceACKVTOpen factory function for BACnetConfirmedServiceACKVTOpen
-func NewBACnetConfirmedServiceACKVTOpen() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceACKVTOpen{
+func NewBACnetConfirmedServiceACKVTOpen() *BACnetConfirmedServiceACKVTOpen {
+	_result := &BACnetConfirmedServiceACKVTOpen{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceACKVTOpen(structType interface{}) *BACnetConfirmedServiceACKVTOpen {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceAddListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceAddListElement.go
index b1704f6..0d3e206 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceAddListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceAddListElement.go
@@ -61,12 +61,12 @@ func (m *BACnetConfirmedServiceAddListElement) GetParent() *BACnetConfirmedServi
 }
 
 // NewBACnetConfirmedServiceAddListElement factory function for BACnetConfirmedServiceAddListElement
-func NewBACnetConfirmedServiceAddListElement() *BACnetConfirmedServiceACK {
-	child := &BACnetConfirmedServiceAddListElement{
+func NewBACnetConfirmedServiceAddListElement() *BACnetConfirmedServiceAddListElement {
+	_result := &BACnetConfirmedServiceAddListElement{
 		BACnetConfirmedServiceACK: NewBACnetConfirmedServiceACK(),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceACK
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceAddListElement(structType interface{}) *BACnetConfirmedServiceAddListElement {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
index 5770efc..9a2fe0e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
@@ -72,6 +72,9 @@ func CastBACnetConfirmedServiceRequest(structType interface{}) *BACnetConfirmedS
 	if casted, ok := structType.(*BACnetConfirmedServiceRequest); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetConfirmedServiceRequestChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
index 76a95a4..43104b3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestAcknowledgeAlarm) GetParent() *BACnetConfi
 }
 
 // NewBACnetConfirmedServiceRequestAcknowledgeAlarm factory function for BACnetConfirmedServiceRequestAcknowledgeAlarm
-func NewBACnetConfirmedServiceRequestAcknowledgeAlarm(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestAcknowledgeAlarm{
+func NewBACnetConfirmedServiceRequestAcknowledgeAlarm(len uint16) *BACnetConfirmedServiceRequestAcknowledgeAlarm {
+	_result := &BACnetConfirmedServiceRequestAcknowledgeAlarm{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestAcknowledgeAlarm(structType interface{}) *BACnetConfirmedServiceRequestAcknowledgeAlarm {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
index 4bd6a75..136d883 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestAddListElement) GetParent() *BACnetConfirm
 }
 
 // NewBACnetConfirmedServiceRequestAddListElement factory function for BACnetConfirmedServiceRequestAddListElement
-func NewBACnetConfirmedServiceRequestAddListElement(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestAddListElement{
+func NewBACnetConfirmedServiceRequestAddListElement(len uint16) *BACnetConfirmedServiceRequestAddListElement {
+	_result := &BACnetConfirmedServiceRequestAddListElement{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestAddListElement(structType interface{}) *BACnetConfirmedServiceRequestAddListElement {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
index e5630da..cd3be82 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
@@ -89,14 +89,14 @@ func (m *BACnetConfirmedServiceRequestAtomicReadFile) GetAccessMethod() *BACnetC
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestAtomicReadFile factory function for BACnetConfirmedServiceRequestAtomicReadFile
-func NewBACnetConfirmedServiceRequestAtomicReadFile(fileIdentifier *BACnetApplicationTagObjectIdentifier, accessMethod *BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord, len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestAtomicReadFile{
+func NewBACnetConfirmedServiceRequestAtomicReadFile(fileIdentifier *BACnetApplicationTagObjectIdentifier, accessMethod *BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord, len uint16) *BACnetConfirmedServiceRequestAtomicReadFile {
+	_result := &BACnetConfirmedServiceRequestAtomicReadFile{
 		FileIdentifier:                fileIdentifier,
 		AccessMethod:                  accessMethod,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestAtomicReadFile(structType interface{}) *BACnetConfirmedServiceRequestAtomicReadFile {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileRecord.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileRecord.go
index 412514f..944fb8a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileRecord.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileRecord.go
@@ -85,14 +85,14 @@ func (m *BACnetConfirmedServiceRequestAtomicReadFileRecord) GetRequestRecordCoun
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestAtomicReadFileRecord factory function for BACnetConfirmedServiceRequestAtomicReadFileRecord
-func NewBACnetConfirmedServiceRequestAtomicReadFileRecord(fileStartRecord *BACnetApplicationTagSignedInteger, requestRecordCount *BACnetApplicationTagUnsignedInteger, peekedTagHeader *BACnetTagHeader, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) *BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord {
-	child := &BACnetConfirmedServiceRequestAtomicReadFileRecord{
+func NewBACnetConfirmedServiceRequestAtomicReadFileRecord(fileStartRecord *BACnetApplicationTagSignedInteger, requestRecordCount *BACnetApplicationTagUnsignedInteger, peekedTagHeader *BACnetTagHeader, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) *BACnetConfirmedServiceRequestAtomicReadFileRecord {
+	_result := &BACnetConfirmedServiceRequestAtomicReadFileRecord{
 		FileStartRecord:    fileStartRecord,
 		RequestRecordCount: requestRecordCount,
 		BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord: NewBACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord(peekedTagHeader, openingTag, closingTag),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestAtomicReadFileRecord(structType interface{}) *BACnetConfirmedServiceRequestAtomicReadFileRecord {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStream.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStream.go
index 1bf852c..474e58e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStream.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStream.go
@@ -85,14 +85,14 @@ func (m *BACnetConfirmedServiceRequestAtomicReadFileStream) GetRequestOctetCount
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestAtomicReadFileStream factory function for BACnetConfirmedServiceRequestAtomicReadFileStream
-func NewBACnetConfirmedServiceRequestAtomicReadFileStream(fileStartPosition *BACnetApplicationTagSignedInteger, requestOctetCount *BACnetApplicationTagUnsignedInteger, peekedTagHeader *BACnetTagHeader, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) *BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord {
-	child := &BACnetConfirmedServiceRequestAtomicReadFileStream{
+func NewBACnetConfirmedServiceRequestAtomicReadFileStream(fileStartPosition *BACnetApplicationTagSignedInteger, requestOctetCount *BACnetApplicationTagUnsignedInteger, peekedTagHeader *BACnetTagHeader, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) *BACnetConfirmedServiceRequestAtomicReadFileStream {
+	_result := &BACnetConfirmedServiceRequestAtomicReadFileStream{
 		FileStartPosition: fileStartPosition,
 		RequestOctetCount: requestOctetCount,
 		BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord: NewBACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord(peekedTagHeader, openingTag, closingTag),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestAtomicReadFileStream(structType interface{}) *BACnetConfirmedServiceRequestAtomicReadFileStream {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go
index b845f1e..68742d3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go
@@ -111,6 +111,9 @@ func CastBACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord(structType in
 	if casted, ok := structType.(*BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetConfirmedServiceRequestAtomicReadFileStreamOrRecordChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
index 7a17528..3998bc1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
@@ -111,8 +111,8 @@ func (m *BACnetConfirmedServiceRequestAtomicWriteFile) GetClosingTag() *BACnetCl
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestAtomicWriteFile factory function for BACnetConfirmedServiceRequestAtomicWriteFile
-func NewBACnetConfirmedServiceRequestAtomicWriteFile(deviceIdentifier *BACnetApplicationTagObjectIdentifier, openingTag *BACnetOpeningTag, fileStartPosition *BACnetApplicationTagSignedInteger, fileData *BACnetApplicationTagOctetString, closingTag *BACnetClosingTag, len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestAtomicWriteFile{
+func NewBACnetConfirmedServiceRequestAtomicWriteFile(deviceIdentifier *BACnetApplicationTagObjectIdentifier, openingTag *BACnetOpeningTag, fileStartPosition *BACnetApplicationTagSignedInteger, fileData *BACnetApplicationTagOctetString, closingTag *BACnetClosingTag, len uint16) *BACnetConfirmedServiceRequestAtomicWriteFile {
+	_result := &BACnetConfirmedServiceRequestAtomicWriteFile{
 		DeviceIdentifier:              deviceIdentifier,
 		OpeningTag:                    openingTag,
 		FileStartPosition:             fileStartPosition,
@@ -120,8 +120,8 @@ func NewBACnetConfirmedServiceRequestAtomicWriteFile(deviceIdentifier *BACnetApp
 		ClosingTag:                    closingTag,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestAtomicWriteFile(structType interface{}) *BACnetConfirmedServiceRequestAtomicWriteFile {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
index e1ee554..913e0ef 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
@@ -110,8 +110,8 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) GetListOfValues(
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestConfirmedCOVNotification factory function for BACnetConfirmedServiceRequestConfirmedCOVNotification
-func NewBACnetConfirmedServiceRequestConfirmedCOVNotification(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, initiatingDeviceIdentifier *BACnetContextTagObjectIdentifier, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, lifetimeInSeconds *BACnetContextTagUnsignedInteger, listOfValues *BACnetPropertyValues, len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestConfirmedCOVNotification{
+func NewBACnetConfirmedServiceRequestConfirmedCOVNotification(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, initiatingDeviceIdentifier *BACnetContextTagObjectIdentifier, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, lifetimeInSeconds *BACnetContextTagUnsignedInteger, listOfValues *BACnetPropertyValues, len uint16) *BACnetConfirmedServiceRequestConfirmedCOVNotification {
+	_result := &BACnetConfirmedServiceRequestConfirmedCOVNotification{
 		SubscriberProcessIdentifier:   subscriberProcessIdentifier,
 		InitiatingDeviceIdentifier:    initiatingDeviceIdentifier,
 		MonitoredObjectIdentifier:     monitoredObjectIdentifier,
@@ -119,8 +119,8 @@ func NewBACnetConfirmedServiceRequestConfirmedCOVNotification(subscriberProcessI
 		ListOfValues:                  listOfValues,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestConfirmedCOVNotification(structType interface{}) *BACnetConfirmedServiceRequestConfirmedCOVNotification {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
index 48d703c..39970e1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) GetParen
 }
 
 // NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple factory function for BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple
-func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple{
+func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(len uint16) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple {
+	_result := &BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(structType interface{}) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
index 9e6b11d..3bbb00f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
@@ -167,8 +167,8 @@ func (m *BACnetConfirmedServiceRequestConfirmedEventNotification) GetEventValues
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestConfirmedEventNotification factory function for BACnetConfirmedServiceRequestConfirmedEventNotification
-func NewBACnetConfirmedServiceRequestConfirmedEventNotification(processIdentifier *BACnetContextTagUnsignedInteger, initiatingDeviceIdentifier *BACnetContextTagObjectIdentifier, eventObjectIdentifier *BACnetContextTagObjectIdentifier, timestamp *BACnetTimeStamp, notificationClass *BACnetContextTagUnsignedInteger, priority *BACnetContextTagUnsignedInteger, eventType *BACnetContextTagEventType, messageText *BACnetContextTagCharacterString, notifyType *BACnetContextTagNotifyType, ackRequire [...]
-	child := &BACnetConfirmedServiceRequestConfirmedEventNotification{
+func NewBACnetConfirmedServiceRequestConfirmedEventNotification(processIdentifier *BACnetContextTagUnsignedInteger, initiatingDeviceIdentifier *BACnetContextTagObjectIdentifier, eventObjectIdentifier *BACnetContextTagObjectIdentifier, timestamp *BACnetTimeStamp, notificationClass *BACnetContextTagUnsignedInteger, priority *BACnetContextTagUnsignedInteger, eventType *BACnetContextTagEventType, messageText *BACnetContextTagCharacterString, notifyType *BACnetContextTagNotifyType, ackRequire [...]
+	_result := &BACnetConfirmedServiceRequestConfirmedEventNotification{
 		ProcessIdentifier:             processIdentifier,
 		InitiatingDeviceIdentifier:    initiatingDeviceIdentifier,
 		EventObjectIdentifier:         eventObjectIdentifier,
@@ -184,8 +184,8 @@ func NewBACnetConfirmedServiceRequestConfirmedEventNotification(processIdentifie
 		EventValues:                   eventValues,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestConfirmedEventNotification(structType interface{}) *BACnetConfirmedServiceRequestConfirmedEventNotification {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
index a2591c6..dfe57f3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) GetParent() *BAC
 }
 
 // NewBACnetConfirmedServiceRequestConfirmedPrivateTransfer factory function for BACnetConfirmedServiceRequestConfirmedPrivateTransfer
-func NewBACnetConfirmedServiceRequestConfirmedPrivateTransfer(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestConfirmedPrivateTransfer{
+func NewBACnetConfirmedServiceRequestConfirmedPrivateTransfer(len uint16) *BACnetConfirmedServiceRequestConfirmedPrivateTransfer {
+	_result := &BACnetConfirmedServiceRequestConfirmedPrivateTransfer{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestConfirmedPrivateTransfer(structType interface{}) *BACnetConfirmedServiceRequestConfirmedPrivateTransfer {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
index 85856c3..c4cecde 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestConfirmedTextMessage) GetParent() *BACnetC
 }
 
 // NewBACnetConfirmedServiceRequestConfirmedTextMessage factory function for BACnetConfirmedServiceRequestConfirmedTextMessage
-func NewBACnetConfirmedServiceRequestConfirmedTextMessage(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestConfirmedTextMessage{
+func NewBACnetConfirmedServiceRequestConfirmedTextMessage(len uint16) *BACnetConfirmedServiceRequestConfirmedTextMessage {
+	_result := &BACnetConfirmedServiceRequestConfirmedTextMessage{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestConfirmedTextMessage(structType interface{}) *BACnetConfirmedServiceRequestConfirmedTextMessage {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedUnknown.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedUnknown.go
index c7ef843..663f4c3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedUnknown.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedUnknown.go
@@ -82,13 +82,13 @@ func (m *BACnetConfirmedServiceRequestConfirmedUnknown) GetUnknownBytes() []byte
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestConfirmedUnknown factory function for BACnetConfirmedServiceRequestConfirmedUnknown
-func NewBACnetConfirmedServiceRequestConfirmedUnknown(unknownBytes []byte, len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestConfirmedUnknown{
+func NewBACnetConfirmedServiceRequestConfirmedUnknown(unknownBytes []byte, len uint16) *BACnetConfirmedServiceRequestConfirmedUnknown {
+	_result := &BACnetConfirmedServiceRequestConfirmedUnknown{
 		UnknownBytes:                  unknownBytes,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestConfirmedUnknown(structType interface{}) *BACnetConfirmedServiceRequestConfirmedUnknown {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
index a79445c..d577370 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestCreateObject) GetParent() *BACnetConfirmed
 }
 
 // NewBACnetConfirmedServiceRequestCreateObject factory function for BACnetConfirmedServiceRequestCreateObject
-func NewBACnetConfirmedServiceRequestCreateObject(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestCreateObject{
+func NewBACnetConfirmedServiceRequestCreateObject(len uint16) *BACnetConfirmedServiceRequestCreateObject {
+	_result := &BACnetConfirmedServiceRequestCreateObject{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestCreateObject(structType interface{}) *BACnetConfirmedServiceRequestCreateObject {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
index 2d311ca..8e149ce 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestDeleteObject) GetParent() *BACnetConfirmed
 }
 
 // NewBACnetConfirmedServiceRequestDeleteObject factory function for BACnetConfirmedServiceRequestDeleteObject
-func NewBACnetConfirmedServiceRequestDeleteObject(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestDeleteObject{
+func NewBACnetConfirmedServiceRequestDeleteObject(len uint16) *BACnetConfirmedServiceRequestDeleteObject {
+	_result := &BACnetConfirmedServiceRequestDeleteObject{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestDeleteObject(structType interface{}) *BACnetConfirmedServiceRequestDeleteObject {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
index 418cd50..25c4924 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
@@ -97,15 +97,15 @@ func (m *BACnetConfirmedServiceRequestDeviceCommunicationControl) GetPassword()
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestDeviceCommunicationControl factory function for BACnetConfirmedServiceRequestDeviceCommunicationControl
-func NewBACnetConfirmedServiceRequestDeviceCommunicationControl(timeDuration *BACnetContextTagUnsignedInteger, enableDisable *BACnetConfirmedServiceRequestReinitializeDeviceEnableDisable, password *BACnetContextTagCharacterString, len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestDeviceCommunicationControl{
+func NewBACnetConfirmedServiceRequestDeviceCommunicationControl(timeDuration *BACnetContextTagUnsignedInteger, enableDisable *BACnetConfirmedServiceRequestReinitializeDeviceEnableDisable, password *BACnetContextTagCharacterString, len uint16) *BACnetConfirmedServiceRequestDeviceCommunicationControl {
+	_result := &BACnetConfirmedServiceRequestDeviceCommunicationControl{
 		TimeDuration:                  timeDuration,
 		EnableDisable:                 enableDisable,
 		Password:                      password,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestDeviceCommunicationControl(structType interface{}) *BACnetConfirmedServiceRequestDeviceCommunicationControl {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
index 2888cc9..e99a1de 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestGetEnrollmentSummary) GetParent() *BACnetC
 }
 
 // NewBACnetConfirmedServiceRequestGetEnrollmentSummary factory function for BACnetConfirmedServiceRequestGetEnrollmentSummary
-func NewBACnetConfirmedServiceRequestGetEnrollmentSummary(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestGetEnrollmentSummary{
+func NewBACnetConfirmedServiceRequestGetEnrollmentSummary(len uint16) *BACnetConfirmedServiceRequestGetEnrollmentSummary {
+	_result := &BACnetConfirmedServiceRequestGetEnrollmentSummary{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestGetEnrollmentSummary(structType interface{}) *BACnetConfirmedServiceRequestGetEnrollmentSummary {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
index 442ffb1..b9a2acd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestGetEventInformation) GetParent() *BACnetCo
 }
 
 // NewBACnetConfirmedServiceRequestGetEventInformation factory function for BACnetConfirmedServiceRequestGetEventInformation
-func NewBACnetConfirmedServiceRequestGetEventInformation(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestGetEventInformation{
+func NewBACnetConfirmedServiceRequestGetEventInformation(len uint16) *BACnetConfirmedServiceRequestGetEventInformation {
+	_result := &BACnetConfirmedServiceRequestGetEventInformation{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestGetEventInformation(structType interface{}) *BACnetConfirmedServiceRequestGetEventInformation {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
index c2a2d36..096138b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestLifeSafetyOperation) GetParent() *BACnetCo
 }
 
 // NewBACnetConfirmedServiceRequestLifeSafetyOperation factory function for BACnetConfirmedServiceRequestLifeSafetyOperation
-func NewBACnetConfirmedServiceRequestLifeSafetyOperation(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestLifeSafetyOperation{
+func NewBACnetConfirmedServiceRequestLifeSafetyOperation(len uint16) *BACnetConfirmedServiceRequestLifeSafetyOperation {
+	_result := &BACnetConfirmedServiceRequestLifeSafetyOperation{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestLifeSafetyOperation(structType interface{}) *BACnetConfirmedServiceRequestLifeSafetyOperation {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
index 2cbc227..de34494 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
@@ -97,15 +97,15 @@ func (m *BACnetConfirmedServiceRequestReadProperty) GetArrayIndex() *BACnetConte
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestReadProperty factory function for BACnetConfirmedServiceRequestReadProperty
-func NewBACnetConfirmedServiceRequestReadProperty(objectIdentifier *BACnetContextTagObjectIdentifier, propertyIdentifier *BACnetContextTagPropertyIdentifier, arrayIndex *BACnetContextTagUnsignedInteger, len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestReadProperty{
+func NewBACnetConfirmedServiceRequestReadProperty(objectIdentifier *BACnetContextTagObjectIdentifier, propertyIdentifier *BACnetContextTagPropertyIdentifier, arrayIndex *BACnetContextTagUnsignedInteger, len uint16) *BACnetConfirmedServiceRequestReadProperty {
+	_result := &BACnetConfirmedServiceRequestReadProperty{
 		ObjectIdentifier:              objectIdentifier,
 		PropertyIdentifier:            propertyIdentifier,
 		ArrayIndex:                    arrayIndex,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestReadProperty(structType interface{}) *BACnetConfirmedServiceRequestReadProperty {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
index 3ab5886..dc28ca5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
@@ -82,13 +82,13 @@ func (m *BACnetConfirmedServiceRequestReadPropertyMultiple) GetData() []*BACnetR
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestReadPropertyMultiple factory function for BACnetConfirmedServiceRequestReadPropertyMultiple
-func NewBACnetConfirmedServiceRequestReadPropertyMultiple(data []*BACnetReadAccessSpecification, len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestReadPropertyMultiple{
+func NewBACnetConfirmedServiceRequestReadPropertyMultiple(data []*BACnetReadAccessSpecification, len uint16) *BACnetConfirmedServiceRequestReadPropertyMultiple {
+	_result := &BACnetConfirmedServiceRequestReadPropertyMultiple{
 		Data:                          data,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestReadPropertyMultiple(structType interface{}) *BACnetConfirmedServiceRequestReadPropertyMultiple {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
index 3c101a7..5bd3abc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestReadRange) GetParent() *BACnetConfirmedSer
 }
 
 // NewBACnetConfirmedServiceRequestReadRange factory function for BACnetConfirmedServiceRequestReadRange
-func NewBACnetConfirmedServiceRequestReadRange(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestReadRange{
+func NewBACnetConfirmedServiceRequestReadRange(len uint16) *BACnetConfirmedServiceRequestReadRange {
+	_result := &BACnetConfirmedServiceRequestReadRange{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestReadRange(structType interface{}) *BACnetConfirmedServiceRequestReadRange {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
index 2c41bdb..5574735 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
@@ -90,14 +90,14 @@ func (m *BACnetConfirmedServiceRequestReinitializeDevice) GetPassword() *BACnetC
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestReinitializeDevice factory function for BACnetConfirmedServiceRequestReinitializeDevice
-func NewBACnetConfirmedServiceRequestReinitializeDevice(reinitializedStateOfDevice *BACnetContextTagDeviceState, password *BACnetContextTagCharacterString, len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestReinitializeDevice{
+func NewBACnetConfirmedServiceRequestReinitializeDevice(reinitializedStateOfDevice *BACnetContextTagDeviceState, password *BACnetContextTagCharacterString, len uint16) *BACnetConfirmedServiceRequestReinitializeDevice {
+	_result := &BACnetConfirmedServiceRequestReinitializeDevice{
 		ReinitializedStateOfDevice:    reinitializedStateOfDevice,
 		Password:                      password,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestReinitializeDevice(structType interface{}) *BACnetConfirmedServiceRequestReinitializeDevice {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
index abb72e1..eb5fef1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestRemoveListElement) GetParent() *BACnetConf
 }
 
 // NewBACnetConfirmedServiceRequestRemoveListElement factory function for BACnetConfirmedServiceRequestRemoveListElement
-func NewBACnetConfirmedServiceRequestRemoveListElement(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestRemoveListElement{
+func NewBACnetConfirmedServiceRequestRemoveListElement(len uint16) *BACnetConfirmedServiceRequestRemoveListElement {
+	_result := &BACnetConfirmedServiceRequestRemoveListElement{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestRemoveListElement(structType interface{}) *BACnetConfirmedServiceRequestRemoveListElement {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
index 775f823..8a3bf4a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestRemovedAuthenticate) GetParent() *BACnetCo
 }
 
 // NewBACnetConfirmedServiceRequestRemovedAuthenticate factory function for BACnetConfirmedServiceRequestRemovedAuthenticate
-func NewBACnetConfirmedServiceRequestRemovedAuthenticate(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestRemovedAuthenticate{
+func NewBACnetConfirmedServiceRequestRemovedAuthenticate(len uint16) *BACnetConfirmedServiceRequestRemovedAuthenticate {
+	_result := &BACnetConfirmedServiceRequestRemovedAuthenticate{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestRemovedAuthenticate(structType interface{}) *BACnetConfirmedServiceRequestRemovedAuthenticate {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
index 749268a..d99f865 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestRemovedReadPropertyConditional) GetParent(
 }
 
 // NewBACnetConfirmedServiceRequestRemovedReadPropertyConditional factory function for BACnetConfirmedServiceRequestRemovedReadPropertyConditional
-func NewBACnetConfirmedServiceRequestRemovedReadPropertyConditional(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestRemovedReadPropertyConditional{
+func NewBACnetConfirmedServiceRequestRemovedReadPropertyConditional(len uint16) *BACnetConfirmedServiceRequestRemovedReadPropertyConditional {
+	_result := &BACnetConfirmedServiceRequestRemovedReadPropertyConditional{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestRemovedReadPropertyConditional(structType interface{}) *BACnetConfirmedServiceRequestRemovedReadPropertyConditional {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
index 1e2dc3b..80fe65f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestRemovedRequestKey) GetParent() *BACnetConf
 }
 
 // NewBACnetConfirmedServiceRequestRemovedRequestKey factory function for BACnetConfirmedServiceRequestRemovedRequestKey
-func NewBACnetConfirmedServiceRequestRemovedRequestKey(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestRemovedRequestKey{
+func NewBACnetConfirmedServiceRequestRemovedRequestKey(len uint16) *BACnetConfirmedServiceRequestRemovedRequestKey {
+	_result := &BACnetConfirmedServiceRequestRemovedRequestKey{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestRemovedRequestKey(structType interface{}) *BACnetConfirmedServiceRequestRemovedRequestKey {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
index 66e25ee..5987268 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
@@ -103,16 +103,16 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOV) GetLifetimeInSeconds() *BACn
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestSubscribeCOV factory function for BACnetConfirmedServiceRequestSubscribeCOV
-func NewBACnetConfirmedServiceRequestSubscribeCOV(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, issueConfirmed *BACnetContextTagBoolean, lifetimeInSeconds *BACnetContextTagUnsignedInteger, len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestSubscribeCOV{
+func NewBACnetConfirmedServiceRequestSubscribeCOV(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, issueConfirmed *BACnetContextTagBoolean, lifetimeInSeconds *BACnetContextTagUnsignedInteger, len uint16) *BACnetConfirmedServiceRequestSubscribeCOV {
+	_result := &BACnetConfirmedServiceRequestSubscribeCOV{
 		SubscriberProcessIdentifier:   subscriberProcessIdentifier,
 		MonitoredObjectIdentifier:     monitoredObjectIdentifier,
 		IssueConfirmed:                issueConfirmed,
 		LifetimeInSeconds:             lifetimeInSeconds,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestSubscribeCOV(structType interface{}) *BACnetConfirmedServiceRequestSubscribeCOV {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
index e0ec143..717e8ff 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetParent() *BACnetC
 }
 
 // NewBACnetConfirmedServiceRequestSubscribeCOVProperty factory function for BACnetConfirmedServiceRequestSubscribeCOVProperty
-func NewBACnetConfirmedServiceRequestSubscribeCOVProperty(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestSubscribeCOVProperty{
+func NewBACnetConfirmedServiceRequestSubscribeCOVProperty(len uint16) *BACnetConfirmedServiceRequestSubscribeCOVProperty {
+	_result := &BACnetConfirmedServiceRequestSubscribeCOVProperty{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestSubscribeCOVProperty(structType interface{}) *BACnetConfirmedServiceRequestSubscribeCOVProperty {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
index aa1720b..eacc153 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetParent()
 }
 
 // NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple factory function for BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
-func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple{
+func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(len uint16) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple {
+	_result := &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(structType interface{}) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
index 02f83a8..fb1cb14 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestVTClose) GetParent() *BACnetConfirmedServi
 }
 
 // NewBACnetConfirmedServiceRequestVTClose factory function for BACnetConfirmedServiceRequestVTClose
-func NewBACnetConfirmedServiceRequestVTClose(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestVTClose{
+func NewBACnetConfirmedServiceRequestVTClose(len uint16) *BACnetConfirmedServiceRequestVTClose {
+	_result := &BACnetConfirmedServiceRequestVTClose{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestVTClose(structType interface{}) *BACnetConfirmedServiceRequestVTClose {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
index feb49a4..19e8373 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestVTData) GetParent() *BACnetConfirmedServic
 }
 
 // NewBACnetConfirmedServiceRequestVTData factory function for BACnetConfirmedServiceRequestVTData
-func NewBACnetConfirmedServiceRequestVTData(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestVTData{
+func NewBACnetConfirmedServiceRequestVTData(len uint16) *BACnetConfirmedServiceRequestVTData {
+	_result := &BACnetConfirmedServiceRequestVTData{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestVTData(structType interface{}) *BACnetConfirmedServiceRequestVTData {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
index 026f5ab..e90f60a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestVTOpen) GetParent() *BACnetConfirmedServic
 }
 
 // NewBACnetConfirmedServiceRequestVTOpen factory function for BACnetConfirmedServiceRequestVTOpen
-func NewBACnetConfirmedServiceRequestVTOpen(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestVTOpen{
+func NewBACnetConfirmedServiceRequestVTOpen(len uint16) *BACnetConfirmedServiceRequestVTOpen {
+	_result := &BACnetConfirmedServiceRequestVTOpen{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestVTOpen(structType interface{}) *BACnetConfirmedServiceRequestVTOpen {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
index 125f26a..8cdd094 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
@@ -111,8 +111,8 @@ func (m *BACnetConfirmedServiceRequestWriteProperty) GetPriority() *BACnetContex
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestWriteProperty factory function for BACnetConfirmedServiceRequestWriteProperty
-func NewBACnetConfirmedServiceRequestWriteProperty(objectIdentifier *BACnetContextTagObjectIdentifier, propertyIdentifier *BACnetContextTagPropertyIdentifier, arrayIndex *BACnetContextTagUnsignedInteger, propertyValue *BACnetConstructedData, priority *BACnetContextTagUnsignedInteger, len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestWriteProperty{
+func NewBACnetConfirmedServiceRequestWriteProperty(objectIdentifier *BACnetContextTagObjectIdentifier, propertyIdentifier *BACnetContextTagPropertyIdentifier, arrayIndex *BACnetContextTagUnsignedInteger, propertyValue *BACnetConstructedData, priority *BACnetContextTagUnsignedInteger, len uint16) *BACnetConfirmedServiceRequestWriteProperty {
+	_result := &BACnetConfirmedServiceRequestWriteProperty{
 		ObjectIdentifier:              objectIdentifier,
 		PropertyIdentifier:            propertyIdentifier,
 		ArrayIndex:                    arrayIndex,
@@ -120,8 +120,8 @@ func NewBACnetConfirmedServiceRequestWriteProperty(objectIdentifier *BACnetConte
 		Priority:                      priority,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestWriteProperty(structType interface{}) *BACnetConfirmedServiceRequestWriteProperty {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
index 6665eba..8859acd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
@@ -65,12 +65,12 @@ func (m *BACnetConfirmedServiceRequestWritePropertyMultiple) GetParent() *BACnet
 }
 
 // NewBACnetConfirmedServiceRequestWritePropertyMultiple factory function for BACnetConfirmedServiceRequestWritePropertyMultiple
-func NewBACnetConfirmedServiceRequestWritePropertyMultiple(len uint16) *BACnetConfirmedServiceRequest {
-	child := &BACnetConfirmedServiceRequestWritePropertyMultiple{
+func NewBACnetConfirmedServiceRequestWritePropertyMultiple(len uint16) *BACnetConfirmedServiceRequestWritePropertyMultiple {
+	_result := &BACnetConfirmedServiceRequestWritePropertyMultiple{
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetConfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConfirmedServiceRequestWritePropertyMultiple(structType interface{}) *BACnetConfirmedServiceRequestWritePropertyMultiple {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go
index 4a382c5..c6e5840 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go
@@ -110,6 +110,9 @@ func CastBACnetConstructedData(structType interface{}) *BACnetConstructedData {
 	if casted, ok := structType.(*BACnetConstructedData); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetConstructedDataChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataCommand.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataCommand.go
index f611830..e084db3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataCommand.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataCommand.go
@@ -99,15 +99,15 @@ func (m *BACnetConstructedDataCommand) GetInnerClosingTag() *BACnetClosingTag {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConstructedDataCommand factory function for BACnetConstructedDataCommand
-func NewBACnetConstructedDataCommand(innerOpeningTag *BACnetOpeningTag, action []*BACnetActionCommand, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, tagNumber uint8, propertyIdentifierArgument BACnetContextTagPropertyIdentifier) *BACnetConstructedData {
-	child := &BACnetConstructedDataCommand{
+func NewBACnetConstructedDataCommand(innerOpeningTag *BACnetOpeningTag, action []*BACnetActionCommand, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, tagNumber uint8, propertyIdentifierArgument BACnetContextTagPropertyIdentifier) *BACnetConstructedDataCommand {
+	_result := &BACnetConstructedDataCommand{
 		InnerOpeningTag:       innerOpeningTag,
 		Action:                action,
 		InnerClosingTag:       innerClosingTag,
 		BACnetConstructedData: NewBACnetConstructedData(openingTag, closingTag, tagNumber, propertyIdentifierArgument),
 	}
-	child.Child = child
-	return child.BACnetConstructedData
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConstructedDataCommand(structType interface{}) *BACnetConstructedDataCommand {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataEventTimestamps.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataEventTimestamps.go
index aad2cd5..e3461fb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataEventTimestamps.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataEventTimestamps.go
@@ -99,15 +99,15 @@ func (m *BACnetConstructedDataEventTimestamps) GetToNormal() *BACnetDateTime {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConstructedDataEventTimestamps factory function for BACnetConstructedDataEventTimestamps
-func NewBACnetConstructedDataEventTimestamps(toOffnormal *BACnetContextTagTime, toFault *BACnetContextTagUnsignedInteger, toNormal *BACnetDateTime, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, tagNumber uint8, propertyIdentifierArgument BACnetContextTagPropertyIdentifier) *BACnetConstructedData {
-	child := &BACnetConstructedDataEventTimestamps{
+func NewBACnetConstructedDataEventTimestamps(toOffnormal *BACnetContextTagTime, toFault *BACnetContextTagUnsignedInteger, toNormal *BACnetDateTime, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, tagNumber uint8, propertyIdentifierArgument BACnetContextTagPropertyIdentifier) *BACnetConstructedDataEventTimestamps {
+	_result := &BACnetConstructedDataEventTimestamps{
 		ToOffnormal:           toOffnormal,
 		ToFault:               toFault,
 		ToNormal:              toNormal,
 		BACnetConstructedData: NewBACnetConstructedData(openingTag, closingTag, tagNumber, propertyIdentifierArgument),
 	}
-	child.Child = child
-	return child.BACnetConstructedData
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConstructedDataEventTimestamps(structType interface{}) *BACnetConstructedDataEventTimestamps {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataLifeSafetyZone.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataLifeSafetyZone.go
index 0591b99..7966253 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataLifeSafetyZone.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataLifeSafetyZone.go
@@ -85,13 +85,13 @@ func (m *BACnetConstructedDataLifeSafetyZone) GetZones() []*BACnetContextTagObje
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConstructedDataLifeSafetyZone factory function for BACnetConstructedDataLifeSafetyZone
-func NewBACnetConstructedDataLifeSafetyZone(zones []*BACnetContextTagObjectIdentifier, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, tagNumber uint8, propertyIdentifierArgument BACnetContextTagPropertyIdentifier) *BACnetConstructedData {
-	child := &BACnetConstructedDataLifeSafetyZone{
+func NewBACnetConstructedDataLifeSafetyZone(zones []*BACnetContextTagObjectIdentifier, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, tagNumber uint8, propertyIdentifierArgument BACnetContextTagPropertyIdentifier) *BACnetConstructedDataLifeSafetyZone {
+	_result := &BACnetConstructedDataLifeSafetyZone{
 		Zones:                 zones,
 		BACnetConstructedData: NewBACnetConstructedData(openingTag, closingTag, tagNumber, propertyIdentifierArgument),
 	}
-	child.Child = child
-	return child.BACnetConstructedData
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConstructedDataLifeSafetyZone(structType interface{}) *BACnetConstructedDataLifeSafetyZone {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataUnspecified.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataUnspecified.go
index 3d2f703..325e72a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataUnspecified.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataUnspecified.go
@@ -118,15 +118,15 @@ func (m *BACnetConstructedDataUnspecified) GetHasData() bool {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConstructedDataUnspecified factory function for BACnetConstructedDataUnspecified
-func NewBACnetConstructedDataUnspecified(data []*BACnetConstructedDataElement, propertyIdentifier *BACnetContextTagPropertyIdentifier, content *BACnetApplicationTag, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, tagNumber uint8, propertyIdentifierArgument BACnetContextTagPropertyIdentifier) *BACnetConstructedData {
-	child := &BACnetConstructedDataUnspecified{
+func NewBACnetConstructedDataUnspecified(data []*BACnetConstructedDataElement, propertyIdentifier *BACnetContextTagPropertyIdentifier, content *BACnetApplicationTag, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag, tagNumber uint8, propertyIdentifierArgument BACnetContextTagPropertyIdentifier) *BACnetConstructedDataUnspecified {
+	_result := &BACnetConstructedDataUnspecified{
 		Data:                  data,
 		PropertyIdentifier:    propertyIdentifier,
 		Content:               content,
 		BACnetConstructedData: NewBACnetConstructedData(openingTag, closingTag, tagNumber, propertyIdentifierArgument),
 	}
-	child.Child = child
-	return child.BACnetConstructedData
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetConstructedDataUnspecified(structType interface{}) *BACnetConstructedDataUnspecified {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go
index aaf9c9c..0e501e1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go
@@ -114,6 +114,9 @@ func CastBACnetContextTag(structType interface{}) *BACnetContextTag {
 	if casted, ok := structType.(*BACnetContextTag); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetContextTagChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBitString.go
index a471a2a..e791514 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBitString.go
@@ -84,13 +84,13 @@ func (m *BACnetContextTagBitString) GetPayload() *BACnetTagPayloadBitString {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagBitString factory function for BACnetContextTagBitString
-func NewBACnetContextTagBitString(payload *BACnetTagPayloadBitString, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagBitString{
+func NewBACnetContextTagBitString(payload *BACnetTagPayloadBitString, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagBitString {
+	_result := &BACnetContextTagBitString{
 		Payload:          payload,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagBitString(structType interface{}) *BACnetContextTagBitString {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go
index 1c68b83..649ef8c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go
@@ -105,14 +105,14 @@ func (m *BACnetContextTagBoolean) GetActualValue() bool {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagBoolean factory function for BACnetContextTagBoolean
-func NewBACnetContextTagBoolean(value uint8, payload *BACnetTagPayloadBoolean, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagBoolean{
+func NewBACnetContextTagBoolean(value uint8, payload *BACnetTagPayloadBoolean, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagBoolean {
+	_result := &BACnetContextTagBoolean{
 		Value:            value,
 		Payload:          payload,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagBoolean(structType interface{}) *BACnetContextTagBoolean {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagCharacterString.go
index 2f6246b..362563c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagCharacterString.go
@@ -84,13 +84,13 @@ func (m *BACnetContextTagCharacterString) GetPayload() *BACnetTagPayloadCharacte
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagCharacterString factory function for BACnetContextTagCharacterString
-func NewBACnetContextTagCharacterString(payload *BACnetTagPayloadCharacterString, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagCharacterString{
+func NewBACnetContextTagCharacterString(payload *BACnetTagPayloadCharacterString, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagCharacterString {
+	_result := &BACnetContextTagCharacterString{
 		Payload:          payload,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagCharacterString(structType interface{}) *BACnetContextTagCharacterString {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDate.go
index bc3841c..4893b20 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDate.go
@@ -84,13 +84,13 @@ func (m *BACnetContextTagDate) GetPayload() *BACnetTagPayloadDate {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagDate factory function for BACnetContextTagDate
-func NewBACnetContextTagDate(payload *BACnetTagPayloadDate, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagDate{
+func NewBACnetContextTagDate(payload *BACnetTagPayloadDate, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagDate {
+	_result := &BACnetContextTagDate{
 		Payload:          payload,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagDate(structType interface{}) *BACnetContextTagDate {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDeviceState.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDeviceState.go
index 6b9bc67..9406540 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDeviceState.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDeviceState.go
@@ -84,13 +84,13 @@ func (m *BACnetContextTagDeviceState) GetState() BACnetDeviceState {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagDeviceState factory function for BACnetContextTagDeviceState
-func NewBACnetContextTagDeviceState(state BACnetDeviceState, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagDeviceState{
+func NewBACnetContextTagDeviceState(state BACnetDeviceState, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagDeviceState {
+	_result := &BACnetContextTagDeviceState{
 		State:            state,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagDeviceState(structType interface{}) *BACnetContextTagDeviceState {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDouble.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDouble.go
index 6a27e0f..97a8800 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDouble.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDouble.go
@@ -98,13 +98,13 @@ func (m *BACnetContextTagDouble) GetActualValue() float64 {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagDouble factory function for BACnetContextTagDouble
-func NewBACnetContextTagDouble(payload *BACnetTagPayloadDouble, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagDouble{
+func NewBACnetContextTagDouble(payload *BACnetTagPayloadDouble, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagDouble {
+	_result := &BACnetContextTagDouble{
 		Payload:          payload,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagDouble(structType interface{}) *BACnetContextTagDouble {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEmpty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEmpty.go
index a8366eb..bd7d30a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEmpty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEmpty.go
@@ -66,12 +66,12 @@ func (m *BACnetContextTagEmpty) GetParent() *BACnetContextTag {
 }
 
 // NewBACnetContextTagEmpty factory function for BACnetContextTagEmpty
-func NewBACnetContextTagEmpty(header *BACnetTagHeader, tagNumberArgument uint8) *BACnetContextTag {
-	child := &BACnetContextTagEmpty{
+func NewBACnetContextTagEmpty(header *BACnetTagHeader, tagNumberArgument uint8) *BACnetContextTagEmpty {
+	_result := &BACnetContextTagEmpty{
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagEmpty(structType interface{}) *BACnetContextTagEmpty {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go
index 01d8132..c6f5c9f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go
@@ -98,13 +98,13 @@ func (m *BACnetContextTagEnumerated) GetActualValue() uint32 {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagEnumerated factory function for BACnetContextTagEnumerated
-func NewBACnetContextTagEnumerated(payload *BACnetTagPayloadEnumerated, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagEnumerated{
+func NewBACnetContextTagEnumerated(payload *BACnetTagPayloadEnumerated, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagEnumerated {
+	_result := &BACnetContextTagEnumerated{
 		Payload:          payload,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagEnumerated(structType interface{}) *BACnetContextTagEnumerated {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventState.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventState.go
index 296d779..428fb5d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventState.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventState.go
@@ -106,14 +106,14 @@ func (m *BACnetContextTagEventState) GetIsProprietary() bool {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagEventState factory function for BACnetContextTagEventState
-func NewBACnetContextTagEventState(eventState BACnetEventState, proprietaryValue uint32, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool, actualLength uint32) *BACnetContextTag {
-	child := &BACnetContextTagEventState{
+func NewBACnetContextTagEventState(eventState BACnetEventState, proprietaryValue uint32, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool, actualLength uint32) *BACnetContextTagEventState {
+	_result := &BACnetContextTagEventState{
 		EventState:       eventState,
 		ProprietaryValue: proprietaryValue,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagEventState(structType interface{}) *BACnetContextTagEventState {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventType.go
index e4b107b..435d70a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventType.go
@@ -106,14 +106,14 @@ func (m *BACnetContextTagEventType) GetIsProprietary() bool {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagEventType factory function for BACnetContextTagEventType
-func NewBACnetContextTagEventType(eventType BACnetEventType, proprietaryValue uint32, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool, actualLength uint32) *BACnetContextTag {
-	child := &BACnetContextTagEventType{
+func NewBACnetContextTagEventType(eventType BACnetEventType, proprietaryValue uint32, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool, actualLength uint32) *BACnetContextTagEventType {
+	_result := &BACnetContextTagEventType{
 		EventType:        eventType,
 		ProprietaryValue: proprietaryValue,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagEventType(structType interface{}) *BACnetContextTagEventType {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagNotifyType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagNotifyType.go
index 4a36f57..adcf0f2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagNotifyType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagNotifyType.go
@@ -85,13 +85,13 @@ func (m *BACnetContextTagNotifyType) GetValue() BACnetNotifyType {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagNotifyType factory function for BACnetContextTagNotifyType
-func NewBACnetContextTagNotifyType(value BACnetNotifyType, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool, actualLength uint32) *BACnetContextTag {
-	child := &BACnetContextTagNotifyType{
+func NewBACnetContextTagNotifyType(value BACnetNotifyType, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool, actualLength uint32) *BACnetContextTagNotifyType {
+	_result := &BACnetContextTagNotifyType{
 		Value:            value,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagNotifyType(structType interface{}) *BACnetContextTagNotifyType {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagObjectIdentifier.go
index c441145..3cb449c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagObjectIdentifier.go
@@ -104,13 +104,13 @@ func (m *BACnetContextTagObjectIdentifier) GetInstanceNumber() uint32 {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagObjectIdentifier factory function for BACnetContextTagObjectIdentifier
-func NewBACnetContextTagObjectIdentifier(payload *BACnetTagPayloadObjectIdentifier, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagObjectIdentifier{
+func NewBACnetContextTagObjectIdentifier(payload *BACnetTagPayloadObjectIdentifier, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagObjectIdentifier {
+	_result := &BACnetContextTagObjectIdentifier{
 		Payload:          payload,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagObjectIdentifier(structType interface{}) *BACnetContextTagObjectIdentifier {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagOctetString.go
index 613d3ff..d31cfc6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagOctetString.go
@@ -84,13 +84,13 @@ func (m *BACnetContextTagOctetString) GetPayload() *BACnetTagPayloadOctetString
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagOctetString factory function for BACnetContextTagOctetString
-func NewBACnetContextTagOctetString(payload *BACnetTagPayloadOctetString, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagOctetString{
+func NewBACnetContextTagOctetString(payload *BACnetTagPayloadOctetString, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagOctetString {
+	_result := &BACnetContextTagOctetString{
 		Payload:          payload,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagOctetString(structType interface{}) *BACnetContextTagOctetString {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagPropertyIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagPropertyIdentifier.go
index f055386..f7112d0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagPropertyIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagPropertyIdentifier.go
@@ -106,14 +106,14 @@ func (m *BACnetContextTagPropertyIdentifier) GetIsProprietary() bool {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagPropertyIdentifier factory function for BACnetContextTagPropertyIdentifier
-func NewBACnetContextTagPropertyIdentifier(propertyIdentifier BACnetPropertyIdentifier, proprietaryValue uint32, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool, actualLength uint32) *BACnetContextTag {
-	child := &BACnetContextTagPropertyIdentifier{
+func NewBACnetContextTagPropertyIdentifier(propertyIdentifier BACnetPropertyIdentifier, proprietaryValue uint32, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool, actualLength uint32) *BACnetContextTagPropertyIdentifier {
+	_result := &BACnetContextTagPropertyIdentifier{
 		PropertyIdentifier: propertyIdentifier,
 		ProprietaryValue:   proprietaryValue,
 		BACnetContextTag:   NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagPropertyIdentifier(structType interface{}) *BACnetContextTagPropertyIdentifier {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagReal.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagReal.go
index faa1433..61bcf07 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagReal.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagReal.go
@@ -98,13 +98,13 @@ func (m *BACnetContextTagReal) GetActualValue() float32 {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagReal factory function for BACnetContextTagReal
-func NewBACnetContextTagReal(payload *BACnetTagPayloadReal, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagReal{
+func NewBACnetContextTagReal(payload *BACnetTagPayloadReal, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagReal {
+	_result := &BACnetContextTagReal{
 		Payload:          payload,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagReal(structType interface{}) *BACnetContextTagReal {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagSignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagSignedInteger.go
index 68ed216..48071ea 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagSignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagSignedInteger.go
@@ -98,13 +98,13 @@ func (m *BACnetContextTagSignedInteger) GetActualValue() uint64 {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagSignedInteger factory function for BACnetContextTagSignedInteger
-func NewBACnetContextTagSignedInteger(payload *BACnetTagPayloadSignedInteger, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagSignedInteger{
+func NewBACnetContextTagSignedInteger(payload *BACnetTagPayloadSignedInteger, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagSignedInteger {
+	_result := &BACnetContextTagSignedInteger{
 		Payload:          payload,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagSignedInteger(structType interface{}) *BACnetContextTagSignedInteger {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagTime.go
index f75525d..8967ba0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagTime.go
@@ -84,13 +84,13 @@ func (m *BACnetContextTagTime) GetPayload() *BACnetTagPayloadTime {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagTime factory function for BACnetContextTagTime
-func NewBACnetContextTagTime(payload *BACnetTagPayloadTime, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagTime{
+func NewBACnetContextTagTime(payload *BACnetTagPayloadTime, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagTime {
+	_result := &BACnetContextTagTime{
 		Payload:          payload,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagTime(structType interface{}) *BACnetContextTagTime {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagUnsignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagUnsignedInteger.go
index 0a630b2..b1e339c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagUnsignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagUnsignedInteger.go
@@ -98,13 +98,13 @@ func (m *BACnetContextTagUnsignedInteger) GetActualValue() uint64 {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetContextTagUnsignedInteger factory function for BACnetContextTagUnsignedInteger
-func NewBACnetContextTagUnsignedInteger(payload *BACnetTagPayloadUnsignedInteger, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTag {
-	child := &BACnetContextTagUnsignedInteger{
+func NewBACnetContextTagUnsignedInteger(payload *BACnetTagPayloadUnsignedInteger, header *BACnetTagHeader, tagNumberArgument uint8, isNotOpeningOrClosingTag bool) *BACnetContextTagUnsignedInteger {
+	_result := &BACnetContextTagUnsignedInteger{
 		Payload:          payload,
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetContextTagUnsignedInteger(structType interface{}) *BACnetContextTagUnsignedInteger {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
index 41e3983..c1d24ca 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
@@ -92,6 +92,9 @@ func CastBACnetError(structType interface{}) *BACnetError {
 	if casted, ok := structType.(*BACnetError); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetErrorChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAcknowledgeAlarm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAcknowledgeAlarm.go
index ef291b9..968f40b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAcknowledgeAlarm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAcknowledgeAlarm.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorAcknowledgeAlarm) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorAcknowledgeAlarm factory function for BACnetErrorAcknowledgeAlarm
-func NewBACnetErrorAcknowledgeAlarm(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorAcknowledgeAlarm{
+func NewBACnetErrorAcknowledgeAlarm(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorAcknowledgeAlarm {
+	_result := &BACnetErrorAcknowledgeAlarm{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorAcknowledgeAlarm(structType interface{}) *BACnetErrorAcknowledgeAlarm {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
index 18acd4c..9264a3c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorAtomicReadFile) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorAtomicReadFile factory function for BACnetErrorAtomicReadFile
-func NewBACnetErrorAtomicReadFile(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorAtomicReadFile{
+func NewBACnetErrorAtomicReadFile(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorAtomicReadFile {
+	_result := &BACnetErrorAtomicReadFile{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorAtomicReadFile(structType interface{}) *BACnetErrorAtomicReadFile {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
index 2502c22..3dbb9d2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorAtomicWriteFile) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorAtomicWriteFile factory function for BACnetErrorAtomicWriteFile
-func NewBACnetErrorAtomicWriteFile(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorAtomicWriteFile{
+func NewBACnetErrorAtomicWriteFile(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorAtomicWriteFile {
+	_result := &BACnetErrorAtomicWriteFile{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorAtomicWriteFile(structType interface{}) *BACnetErrorAtomicWriteFile {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedEventNotification.go
index b04557a..3570619 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedEventNotification.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorConfirmedEventNotification) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorConfirmedEventNotification factory function for BACnetErrorConfirmedEventNotification
-func NewBACnetErrorConfirmedEventNotification(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorConfirmedEventNotification{
+func NewBACnetErrorConfirmedEventNotification(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorConfirmedEventNotification {
+	_result := &BACnetErrorConfirmedEventNotification{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorConfirmedEventNotification(structType interface{}) *BACnetErrorConfirmedEventNotification {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
index 71ab859..3b9f9ef 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorConfirmedPrivateTransfer) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorConfirmedPrivateTransfer factory function for BACnetErrorConfirmedPrivateTransfer
-func NewBACnetErrorConfirmedPrivateTransfer(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorConfirmedPrivateTransfer{
+func NewBACnetErrorConfirmedPrivateTransfer(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorConfirmedPrivateTransfer {
+	_result := &BACnetErrorConfirmedPrivateTransfer{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorConfirmedPrivateTransfer(structType interface{}) *BACnetErrorConfirmedPrivateTransfer {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
index 0d2f259..1b6288b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorCreateObject) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorCreateObject factory function for BACnetErrorCreateObject
-func NewBACnetErrorCreateObject(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorCreateObject{
+func NewBACnetErrorCreateObject(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorCreateObject {
+	_result := &BACnetErrorCreateObject{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorCreateObject(structType interface{}) *BACnetErrorCreateObject {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorDeviceCommunicationProtocol.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorDeviceCommunicationProtocol.go
index 05ee29e..cf688b9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorDeviceCommunicationProtocol.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorDeviceCommunicationProtocol.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorDeviceCommunicationProtocol) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorDeviceCommunicationProtocol factory function for BACnetErrorDeviceCommunicationProtocol
-func NewBACnetErrorDeviceCommunicationProtocol(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorDeviceCommunicationProtocol{
+func NewBACnetErrorDeviceCommunicationProtocol(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorDeviceCommunicationProtocol {
+	_result := &BACnetErrorDeviceCommunicationProtocol{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorDeviceCommunicationProtocol(structType interface{}) *BACnetErrorDeviceCommunicationProtocol {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
index cc8c852..de2103d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorGetAlarmSummary) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorGetAlarmSummary factory function for BACnetErrorGetAlarmSummary
-func NewBACnetErrorGetAlarmSummary(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorGetAlarmSummary{
+func NewBACnetErrorGetAlarmSummary(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorGetAlarmSummary {
+	_result := &BACnetErrorGetAlarmSummary{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorGetAlarmSummary(structType interface{}) *BACnetErrorGetAlarmSummary {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
index fc9f996..a037f58 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorGetEnrollmentSummary) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorGetEnrollmentSummary factory function for BACnetErrorGetEnrollmentSummary
-func NewBACnetErrorGetEnrollmentSummary(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorGetEnrollmentSummary{
+func NewBACnetErrorGetEnrollmentSummary(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorGetEnrollmentSummary {
+	_result := &BACnetErrorGetEnrollmentSummary{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorGetEnrollmentSummary(structType interface{}) *BACnetErrorGetEnrollmentSummary {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
index 3d21eda..33ca1ed 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorGetEventInformation) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorGetEventInformation factory function for BACnetErrorGetEventInformation
-func NewBACnetErrorGetEventInformation(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorGetEventInformation{
+func NewBACnetErrorGetEventInformation(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorGetEventInformation {
+	_result := &BACnetErrorGetEventInformation{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorGetEventInformation(structType interface{}) *BACnetErrorGetEventInformation {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorPasswordFailure.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorPasswordFailure.go
index bc365a3..4e9337c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorPasswordFailure.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorPasswordFailure.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorPasswordFailure) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorPasswordFailure factory function for BACnetErrorPasswordFailure
-func NewBACnetErrorPasswordFailure(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorPasswordFailure{
+func NewBACnetErrorPasswordFailure(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorPasswordFailure {
+	_result := &BACnetErrorPasswordFailure{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorPasswordFailure(structType interface{}) *BACnetErrorPasswordFailure {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
index de72c95..420306e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorReadProperty) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorReadProperty factory function for BACnetErrorReadProperty
-func NewBACnetErrorReadProperty(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorReadProperty{
+func NewBACnetErrorReadProperty(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorReadProperty {
+	_result := &BACnetErrorReadProperty{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorReadProperty(structType interface{}) *BACnetErrorReadProperty {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
index c916fed..e302c55 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorReadPropertyMultiple) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorReadPropertyMultiple factory function for BACnetErrorReadPropertyMultiple
-func NewBACnetErrorReadPropertyMultiple(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorReadPropertyMultiple{
+func NewBACnetErrorReadPropertyMultiple(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorReadPropertyMultiple {
+	_result := &BACnetErrorReadPropertyMultiple{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorReadPropertyMultiple(structType interface{}) *BACnetErrorReadPropertyMultiple {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
index f5066ea..0076204 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorReadRange) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorReadRange factory function for BACnetErrorReadRange
-func NewBACnetErrorReadRange(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorReadRange{
+func NewBACnetErrorReadRange(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorReadRange {
+	_result := &BACnetErrorReadRange{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorReadRange(structType interface{}) *BACnetErrorReadRange {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
index 78859c0..170cb5c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorRemovedAuthenticate) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorRemovedAuthenticate factory function for BACnetErrorRemovedAuthenticate
-func NewBACnetErrorRemovedAuthenticate(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorRemovedAuthenticate{
+func NewBACnetErrorRemovedAuthenticate(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorRemovedAuthenticate {
+	_result := &BACnetErrorRemovedAuthenticate{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorRemovedAuthenticate(structType interface{}) *BACnetErrorRemovedAuthenticate {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
index 4cd97c2..bcbacc0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorRemovedReadPropertyConditional) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorRemovedReadPropertyConditional factory function for BACnetErrorRemovedReadPropertyConditional
-func NewBACnetErrorRemovedReadPropertyConditional(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorRemovedReadPropertyConditional{
+func NewBACnetErrorRemovedReadPropertyConditional(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorRemovedReadPropertyConditional {
+	_result := &BACnetErrorRemovedReadPropertyConditional{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorRemovedReadPropertyConditional(structType interface{}) *BACnetErrorRemovedReadPropertyConditional {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorUnknown.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorUnknown.go
index fbbea0d..109f74b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorUnknown.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorUnknown.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorUnknown) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorUnknown factory function for BACnetErrorUnknown
-func NewBACnetErrorUnknown(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorUnknown{
+func NewBACnetErrorUnknown(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorUnknown {
+	_result := &BACnetErrorUnknown{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorUnknown(structType interface{}) *BACnetErrorUnknown {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
index 597e2eb..dd74366 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorVTData) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorVTData factory function for BACnetErrorVTData
-func NewBACnetErrorVTData(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorVTData{
+func NewBACnetErrorVTData(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorVTData {
+	_result := &BACnetErrorVTData{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorVTData(structType interface{}) *BACnetErrorVTData {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
index ff2e12a..9fe41fb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorVTOpen) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorVTOpen factory function for BACnetErrorVTOpen
-func NewBACnetErrorVTOpen(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorVTOpen{
+func NewBACnetErrorVTOpen(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorVTOpen {
+	_result := &BACnetErrorVTOpen{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorVTOpen(structType interface{}) *BACnetErrorVTOpen {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorWriteProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorWriteProperty.go
index 2f00f41..fa0a84c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorWriteProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorWriteProperty.go
@@ -64,12 +64,12 @@ func (m *BACnetErrorWriteProperty) GetParent() *BACnetError {
 }
 
 // NewBACnetErrorWriteProperty factory function for BACnetErrorWriteProperty
-func NewBACnetErrorWriteProperty(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetError {
-	child := &BACnetErrorWriteProperty{
+func NewBACnetErrorWriteProperty(errorClass *BACnetApplicationTagEnumerated, errorCode *BACnetApplicationTagEnumerated) *BACnetErrorWriteProperty {
+	_result := &BACnetErrorWriteProperty{
 		BACnetError: NewBACnetError(errorClass, errorCode),
 	}
-	child.Child = child
-	return child.BACnetError
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetErrorWriteProperty(structType interface{}) *BACnetErrorWriteProperty {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParameters.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParameters.go
index adb5864..3ebebb7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParameters.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParameters.go
@@ -115,6 +115,9 @@ func CastBACnetNotificationParameters(structType interface{}) *BACnetNotificatio
 	if casted, ok := structType.(*BACnetNotificationParameters); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetNotificationParametersChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersBufferReady.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersBufferReady.go
index 05aeac9..c68035b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersBufferReady.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersBufferReady.go
@@ -110,8 +110,8 @@ func (m *BACnetNotificationParametersBufferReady) GetInnerClosingTag() *BACnetCl
 ///////////////////////////////////////////////////////////
 
 // NewBACnetNotificationParametersBufferReady factory function for BACnetNotificationParametersBufferReady
-func NewBACnetNotificationParametersBufferReady(innerOpeningTag *BACnetOpeningTag, bufferProperty *BACnetDeviceObjectPropertyReference, previousNotification *BACnetContextTagUnsignedInteger, currentNotification *BACnetContextTagUnsignedInteger, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParameters {
-	child := &BACnetNotificationParametersBufferReady{
+func NewBACnetNotificationParametersBufferReady(innerOpeningTag *BACnetOpeningTag, bufferProperty *BACnetDeviceObjectPropertyReference, previousNotification *BACnetContextTagUnsignedInteger, currentNotification *BACnetContextTagUnsignedInteger, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParametersBufferReady {
+	_result := &BACnetNotificationParametersBufferReady{
 		InnerOpeningTag:              innerOpeningTag,
 		BufferProperty:               bufferProperty,
 		PreviousNotification:         previousNotification,
@@ -119,8 +119,8 @@ func NewBACnetNotificationParametersBufferReady(innerOpeningTag *BACnetOpeningTa
 		InnerClosingTag:              innerClosingTag,
 		BACnetNotificationParameters: NewBACnetNotificationParameters(openingTag, peekedTagHeader, closingTag, tagNumber, objectType),
 	}
-	child.Child = child
-	return child.BACnetNotificationParameters
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetNotificationParametersBufferReady(structType interface{}) *BACnetNotificationParametersBufferReady {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfBitString.go
index 599316d..eacd794 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfBitString.go
@@ -103,16 +103,16 @@ func (m *BACnetNotificationParametersChangeOfBitString) GetInnerClosingTag() *BA
 ///////////////////////////////////////////////////////////
 
 // NewBACnetNotificationParametersChangeOfBitString factory function for BACnetNotificationParametersChangeOfBitString
-func NewBACnetNotificationParametersChangeOfBitString(innerOpeningTag *BACnetOpeningTag, changeOfBitString *BACnetContextTagBitString, statusFlags *BACnetStatusFlags, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParameters {
-	child := &BACnetNotificationParametersChangeOfBitString{
+func NewBACnetNotificationParametersChangeOfBitString(innerOpeningTag *BACnetOpeningTag, changeOfBitString *BACnetContextTagBitString, statusFlags *BACnetStatusFlags, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParametersChangeOfBitString {
+	_result := &BACnetNotificationParametersChangeOfBitString{
 		InnerOpeningTag:              innerOpeningTag,
 		ChangeOfBitString:            changeOfBitString,
 		StatusFlags:                  statusFlags,
 		InnerClosingTag:              innerClosingTag,
 		BACnetNotificationParameters: NewBACnetNotificationParameters(openingTag, peekedTagHeader, closingTag, tagNumber, objectType),
 	}
-	child.Child = child
-	return child.BACnetNotificationParameters
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetNotificationParametersChangeOfBitString(structType interface{}) *BACnetNotificationParametersChangeOfBitString {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfState.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfState.go
index a4bf5c5..2f87c2d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfState.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfState.go
@@ -103,16 +103,16 @@ func (m *BACnetNotificationParametersChangeOfState) GetInnerClosingTag() *BACnet
 ///////////////////////////////////////////////////////////
 
 // NewBACnetNotificationParametersChangeOfState factory function for BACnetNotificationParametersChangeOfState
-func NewBACnetNotificationParametersChangeOfState(innerOpeningTag *BACnetOpeningTag, changeOfState *BACnetPropertyStates, statusFlags *BACnetStatusFlags, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParameters {
-	child := &BACnetNotificationParametersChangeOfState{
+func NewBACnetNotificationParametersChangeOfState(innerOpeningTag *BACnetOpeningTag, changeOfState *BACnetPropertyStates, statusFlags *BACnetStatusFlags, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParametersChangeOfState {
+	_result := &BACnetNotificationParametersChangeOfState{
 		InnerOpeningTag:              innerOpeningTag,
 		ChangeOfState:                changeOfState,
 		StatusFlags:                  statusFlags,
 		InnerClosingTag:              innerClosingTag,
 		BACnetNotificationParameters: NewBACnetNotificationParameters(openingTag, peekedTagHeader, closingTag, tagNumber, objectType),
 	}
-	child.Child = child
-	return child.BACnetNotificationParameters
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetNotificationParametersChangeOfState(structType interface{}) *BACnetNotificationParametersChangeOfState {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValue.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValue.go
index 7b9d060..efb617c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValue.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValue.go
@@ -103,16 +103,16 @@ func (m *BACnetNotificationParametersChangeOfValue) GetInnerClosingTag() *BACnet
 ///////////////////////////////////////////////////////////
 
 // NewBACnetNotificationParametersChangeOfValue factory function for BACnetNotificationParametersChangeOfValue
-func NewBACnetNotificationParametersChangeOfValue(innerOpeningTag *BACnetOpeningTag, newValue *BACnetNotificationParametersChangeOfValueNewValue, statusFlags *BACnetStatusFlags, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParameters {
-	child := &BACnetNotificationParametersChangeOfValue{
+func NewBACnetNotificationParametersChangeOfValue(innerOpeningTag *BACnetOpeningTag, newValue *BACnetNotificationParametersChangeOfValueNewValue, statusFlags *BACnetStatusFlags, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParametersChangeOfValue {
+	_result := &BACnetNotificationParametersChangeOfValue{
 		InnerOpeningTag:              innerOpeningTag,
 		NewValue:                     newValue,
 		StatusFlags:                  statusFlags,
 		InnerClosingTag:              innerClosingTag,
 		BACnetNotificationParameters: NewBACnetNotificationParameters(openingTag, peekedTagHeader, closingTag, tagNumber, objectType),
 	}
-	child.Child = child
-	return child.BACnetNotificationParameters
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetNotificationParametersChangeOfValue(structType interface{}) *BACnetNotificationParametersChangeOfValue {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go
index 1e6e237..f37d879 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go
@@ -114,6 +114,9 @@ func CastBACnetNotificationParametersChangeOfValueNewValue(structType interface{
 	if casted, ok := structType.(*BACnetNotificationParametersChangeOfValueNewValue); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetNotificationParametersChangeOfValueNewValueChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedBits.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedBits.go
index cd2c2f8..e0f8cea 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedBits.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedBits.go
@@ -81,13 +81,13 @@ func (m *BACnetNotificationParametersChangeOfValueNewValueChangedBits) GetChange
 ///////////////////////////////////////////////////////////
 
 // NewBACnetNotificationParametersChangeOfValueNewValueChangedBits factory function for BACnetNotificationParametersChangeOfValueNewValueChangedBits
-func NewBACnetNotificationParametersChangeOfValueNewValueChangedBits(changedBits *BACnetContextTagBitString, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetNotificationParametersChangeOfValueNewValue {
-	child := &BACnetNotificationParametersChangeOfValueNewValueChangedBits{
+func NewBACnetNotificationParametersChangeOfValueNewValueChangedBits(changedBits *BACnetContextTagBitString, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetNotificationParametersChangeOfValueNewValueChangedBits {
+	_result := &BACnetNotificationParametersChangeOfValueNewValueChangedBits{
 		ChangedBits: changedBits,
 		BACnetNotificationParametersChangeOfValueNewValue: NewBACnetNotificationParametersChangeOfValueNewValue(openingTag, peekedTagHeader, closingTag, tagNumber),
 	}
-	child.Child = child
-	return child.BACnetNotificationParametersChangeOfValueNewValue
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetNotificationParametersChangeOfValueNewValueChangedBits(structType interface{}) *BACnetNotificationParametersChangeOfValueNewValueChangedBits {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedValue.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedValue.go
index 413e447..c33f686 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedValue.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedValue.go
@@ -81,13 +81,13 @@ func (m *BACnetNotificationParametersChangeOfValueNewValueChangedValue) GetChang
 ///////////////////////////////////////////////////////////
 
 // NewBACnetNotificationParametersChangeOfValueNewValueChangedValue factory function for BACnetNotificationParametersChangeOfValueNewValueChangedValue
-func NewBACnetNotificationParametersChangeOfValueNewValueChangedValue(changedValue *BACnetContextTagReal, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetNotificationParametersChangeOfValueNewValue {
-	child := &BACnetNotificationParametersChangeOfValueNewValueChangedValue{
+func NewBACnetNotificationParametersChangeOfValueNewValueChangedValue(changedValue *BACnetContextTagReal, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetNotificationParametersChangeOfValueNewValueChangedValue {
+	_result := &BACnetNotificationParametersChangeOfValueNewValueChangedValue{
 		ChangedValue: changedValue,
 		BACnetNotificationParametersChangeOfValueNewValue: NewBACnetNotificationParametersChangeOfValueNewValue(openingTag, peekedTagHeader, closingTag, tagNumber),
 	}
-	child.Child = child
-	return child.BACnetNotificationParametersChangeOfValueNewValue
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetNotificationParametersChangeOfValueNewValueChangedValue(structType interface{}) *BACnetNotificationParametersChangeOfValueNewValueChangedValue {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersComplexEventType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersComplexEventType.go
index fec74bf..ede1267 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersComplexEventType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersComplexEventType.go
@@ -82,13 +82,13 @@ func (m *BACnetNotificationParametersComplexEventType) GetListOfValues() *BACnet
 ///////////////////////////////////////////////////////////
 
 // NewBACnetNotificationParametersComplexEventType factory function for BACnetNotificationParametersComplexEventType
-func NewBACnetNotificationParametersComplexEventType(listOfValues *BACnetPropertyValues, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParameters {
-	child := &BACnetNotificationParametersComplexEventType{
+func NewBACnetNotificationParametersComplexEventType(listOfValues *BACnetPropertyValues, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParametersComplexEventType {
+	_result := &BACnetNotificationParametersComplexEventType{
 		ListOfValues:                 listOfValues,
 		BACnetNotificationParameters: NewBACnetNotificationParameters(openingTag, peekedTagHeader, closingTag, tagNumber, objectType),
 	}
-	child.Child = child
-	return child.BACnetNotificationParameters
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetNotificationParametersComplexEventType(structType interface{}) *BACnetNotificationParametersComplexEventType {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersExtended.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersExtended.go
index 4e28b32..87649ea 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersExtended.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersExtended.go
@@ -110,8 +110,8 @@ func (m *BACnetNotificationParametersExtended) GetInnerClosingTag() *BACnetClosi
 ///////////////////////////////////////////////////////////
 
 // NewBACnetNotificationParametersExtended factory function for BACnetNotificationParametersExtended
-func NewBACnetNotificationParametersExtended(innerOpeningTag *BACnetOpeningTag, vendorId *BACnetContextTagUnsignedInteger, extendedEventType *BACnetContextTagUnsignedInteger, parameters *BACnetNotificationParametersExtendedParameters, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParameters {
-	child := &BACnetNotificationParametersExtended{
+func NewBACnetNotificationParametersExtended(innerOpeningTag *BACnetOpeningTag, vendorId *BACnetContextTagUnsignedInteger, extendedEventType *BACnetContextTagUnsignedInteger, parameters *BACnetNotificationParametersExtendedParameters, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParametersExtended {
+	_result := &BACnetNotificationParametersExtended{
 		InnerOpeningTag:              innerOpeningTag,
 		VendorId:                     vendorId,
 		ExtendedEventType:            extendedEventType,
@@ -119,8 +119,8 @@ func NewBACnetNotificationParametersExtended(innerOpeningTag *BACnetOpeningTag,
 		InnerClosingTag:              innerClosingTag,
 		BACnetNotificationParameters: NewBACnetNotificationParameters(openingTag, peekedTagHeader, closingTag, tagNumber, objectType),
 	}
-	child.Child = child
-	return child.BACnetNotificationParameters
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetNotificationParametersExtended(structType interface{}) *BACnetNotificationParametersExtended {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersFloatingLimit.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersFloatingLimit.go
index b36b483..236d5fc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersFloatingLimit.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersFloatingLimit.go
@@ -117,8 +117,8 @@ func (m *BACnetNotificationParametersFloatingLimit) GetInnerClosingTag() *BACnet
 ///////////////////////////////////////////////////////////
 
 // NewBACnetNotificationParametersFloatingLimit factory function for BACnetNotificationParametersFloatingLimit
-func NewBACnetNotificationParametersFloatingLimit(innerOpeningTag *BACnetOpeningTag, referenceValue *BACnetContextTagReal, statusFlags *BACnetStatusFlags, setPointValue *BACnetContextTagReal, errorLimit *BACnetContextTagReal, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParameters {
-	child := &BACnetNotificationParametersFloatingLimit{
+func NewBACnetNotificationParametersFloatingLimit(innerOpeningTag *BACnetOpeningTag, referenceValue *BACnetContextTagReal, statusFlags *BACnetStatusFlags, setPointValue *BACnetContextTagReal, errorLimit *BACnetContextTagReal, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParametersFloatingLimit {
+	_result := &BACnetNotificationParametersFloatingLimit{
 		InnerOpeningTag:              innerOpeningTag,
 		ReferenceValue:               referenceValue,
 		StatusFlags:                  statusFlags,
@@ -127,8 +127,8 @@ func NewBACnetNotificationParametersFloatingLimit(innerOpeningTag *BACnetOpening
 		InnerClosingTag:              innerClosingTag,
 		BACnetNotificationParameters: NewBACnetNotificationParameters(openingTag, peekedTagHeader, closingTag, tagNumber, objectType),
 	}
-	child.Child = child
-	return child.BACnetNotificationParameters
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetNotificationParametersFloatingLimit(structType interface{}) *BACnetNotificationParametersFloatingLimit {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersOutOfRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersOutOfRange.go
index ec760f5..ee5cc12 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersOutOfRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersOutOfRange.go
@@ -117,8 +117,8 @@ func (m *BACnetNotificationParametersOutOfRange) GetInnerClosingTag() *BACnetClo
 ///////////////////////////////////////////////////////////
 
 // NewBACnetNotificationParametersOutOfRange factory function for BACnetNotificationParametersOutOfRange
-func NewBACnetNotificationParametersOutOfRange(innerOpeningTag *BACnetOpeningTag, exceedingValue *BACnetContextTagReal, statusFlags *BACnetStatusFlags, deadband *BACnetContextTagReal, exceededLimit *BACnetContextTagReal, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParameters {
-	child := &BACnetNotificationParametersOutOfRange{
+func NewBACnetNotificationParametersOutOfRange(innerOpeningTag *BACnetOpeningTag, exceedingValue *BACnetContextTagReal, statusFlags *BACnetStatusFlags, deadband *BACnetContextTagReal, exceededLimit *BACnetContextTagReal, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParametersOutOfRange {
+	_result := &BACnetNotificationParametersOutOfRange{
 		InnerOpeningTag:              innerOpeningTag,
 		ExceedingValue:               exceedingValue,
 		StatusFlags:                  statusFlags,
@@ -127,8 +127,8 @@ func NewBACnetNotificationParametersOutOfRange(innerOpeningTag *BACnetOpeningTag
 		InnerClosingTag:              innerClosingTag,
 		BACnetNotificationParameters: NewBACnetNotificationParameters(openingTag, peekedTagHeader, closingTag, tagNumber, objectType),
 	}
-	child.Child = child
-	return child.BACnetNotificationParameters
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetNotificationParametersOutOfRange(structType interface{}) *BACnetNotificationParametersOutOfRange {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersUnsignedRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersUnsignedRange.go
index 48f234d..54d9e88 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersUnsignedRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersUnsignedRange.go
@@ -110,8 +110,8 @@ func (m *BACnetNotificationParametersUnsignedRange) GetInnerClosingTag() *BACnet
 ///////////////////////////////////////////////////////////
 
 // NewBACnetNotificationParametersUnsignedRange factory function for BACnetNotificationParametersUnsignedRange
-func NewBACnetNotificationParametersUnsignedRange(innerOpeningTag *BACnetOpeningTag, sequenceNumber *BACnetContextTagUnsignedInteger, statusFlags *BACnetStatusFlags, exceededLimit *BACnetContextTagUnsignedInteger, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParameters {
-	child := &BACnetNotificationParametersUnsignedRange{
+func NewBACnetNotificationParametersUnsignedRange(innerOpeningTag *BACnetOpeningTag, sequenceNumber *BACnetContextTagUnsignedInteger, statusFlags *BACnetStatusFlags, exceededLimit *BACnetContextTagUnsignedInteger, innerClosingTag *BACnetClosingTag, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8, objectType BACnetObjectType) *BACnetNotificationParametersUnsignedRange {
+	_result := &BACnetNotificationParametersUnsignedRange{
 		InnerOpeningTag:              innerOpeningTag,
 		SequenceNumber:               sequenceNumber,
 		StatusFlags:                  statusFlags,
@@ -119,8 +119,8 @@ func NewBACnetNotificationParametersUnsignedRange(innerOpeningTag *BACnetOpening
 		InnerClosingTag:              innerClosingTag,
 		BACnetNotificationParameters: NewBACnetNotificationParameters(openingTag, peekedTagHeader, closingTag, tagNumber, objectType),
 	}
-	child.Child = child
-	return child.BACnetNotificationParameters
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetNotificationParametersUnsignedRange(structType interface{}) *BACnetNotificationParametersUnsignedRange {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go
index b6122fb..d60382e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go
@@ -67,12 +67,12 @@ func (m *BACnetOpeningTag) GetParent() *BACnetContextTag {
 }
 
 // NewBACnetOpeningTag factory function for BACnetOpeningTag
-func NewBACnetOpeningTag(header *BACnetTagHeader, tagNumberArgument uint8, actualLength uint32) *BACnetContextTag {
-	child := &BACnetOpeningTag{
+func NewBACnetOpeningTag(header *BACnetTagHeader, tagNumberArgument uint8, actualLength uint32) *BACnetOpeningTag {
+	_result := &BACnetOpeningTag{
 		BACnetContextTag: NewBACnetContextTag(header, tagNumberArgument),
 	}
-	child.Child = child
-	return child.BACnetContextTag
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetOpeningTag(structType interface{}) *BACnetOpeningTag {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStates.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStates.go
index d82f25c..98d1e2d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStates.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStates.go
@@ -114,6 +114,9 @@ func CastBACnetPropertyStates(structType interface{}) *BACnetPropertyStates {
 	if casted, ok := structType.(*BACnetPropertyStates); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetPropertyStatesChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesAction.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesAction.go
index 8f034f7..a95f3c2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesAction.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesAction.go
@@ -82,13 +82,13 @@ func (m *BACnetPropertyStatesAction) GetAction() *BACnetAction {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetPropertyStatesAction factory function for BACnetPropertyStatesAction
-func NewBACnetPropertyStatesAction(action *BACnetAction, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetPropertyStates {
-	child := &BACnetPropertyStatesAction{
+func NewBACnetPropertyStatesAction(action *BACnetAction, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetPropertyStatesAction {
+	_result := &BACnetPropertyStatesAction{
 		Action:               action,
 		BACnetPropertyStates: NewBACnetPropertyStates(openingTag, peekedTagHeader, closingTag, tagNumber),
 	}
-	child.Child = child
-	return child.BACnetPropertyStates
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetPropertyStatesAction(structType interface{}) *BACnetPropertyStatesAction {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBinaryValue.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBinaryValue.go
index 721af7b..71ef648 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBinaryValue.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBinaryValue.go
@@ -82,13 +82,13 @@ func (m *BACnetPropertyStatesBinaryValue) GetBinaryValue() *BACnetBinaryPV {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetPropertyStatesBinaryValue factory function for BACnetPropertyStatesBinaryValue
-func NewBACnetPropertyStatesBinaryValue(binaryValue *BACnetBinaryPV, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetPropertyStates {
-	child := &BACnetPropertyStatesBinaryValue{
+func NewBACnetPropertyStatesBinaryValue(binaryValue *BACnetBinaryPV, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetPropertyStatesBinaryValue {
+	_result := &BACnetPropertyStatesBinaryValue{
 		BinaryValue:          binaryValue,
 		BACnetPropertyStates: NewBACnetPropertyStates(openingTag, peekedTagHeader, closingTag, tagNumber),
 	}
-	child.Child = child
-	return child.BACnetPropertyStates
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetPropertyStatesBinaryValue(structType interface{}) *BACnetPropertyStatesBinaryValue {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBoolean.go
index a93eb4b..92a3beb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBoolean.go
@@ -82,13 +82,13 @@ func (m *BACnetPropertyStatesBoolean) GetBooleanValue() *BACnetContextTagBoolean
 ///////////////////////////////////////////////////////////
 
 // NewBACnetPropertyStatesBoolean factory function for BACnetPropertyStatesBoolean
-func NewBACnetPropertyStatesBoolean(booleanValue *BACnetContextTagBoolean, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetPropertyStates {
-	child := &BACnetPropertyStatesBoolean{
+func NewBACnetPropertyStatesBoolean(booleanValue *BACnetContextTagBoolean, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetPropertyStatesBoolean {
+	_result := &BACnetPropertyStatesBoolean{
 		BooleanValue:         booleanValue,
 		BACnetPropertyStates: NewBACnetPropertyStates(openingTag, peekedTagHeader, closingTag, tagNumber),
 	}
-	child.Child = child
-	return child.BACnetPropertyStates
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetPropertyStatesBoolean(structType interface{}) *BACnetPropertyStatesBoolean {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
index 281d113..fbe3f32 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
@@ -69,6 +69,9 @@ func CastBACnetServiceAck(structType interface{}) *BACnetServiceAck {
 	if casted, ok := structType.(*BACnetServiceAck); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetServiceAckChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
index 264def8..f18deb9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
@@ -85,14 +85,14 @@ func (m *BACnetServiceAckAtomicReadFile) GetAccessMethod() *BACnetServiceAckAtom
 ///////////////////////////////////////////////////////////
 
 // NewBACnetServiceAckAtomicReadFile factory function for BACnetServiceAckAtomicReadFile
-func NewBACnetServiceAckAtomicReadFile(endOfFile *BACnetApplicationTagBoolean, accessMethod *BACnetServiceAckAtomicReadFileStreamOrRecord) *BACnetServiceAck {
-	child := &BACnetServiceAckAtomicReadFile{
+func NewBACnetServiceAckAtomicReadFile(endOfFile *BACnetApplicationTagBoolean, accessMethod *BACnetServiceAckAtomicReadFileStreamOrRecord) *BACnetServiceAckAtomicReadFile {
+	_result := &BACnetServiceAckAtomicReadFile{
 		EndOfFile:        endOfFile,
 		AccessMethod:     accessMethod,
 		BACnetServiceAck: NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckAtomicReadFile(structType interface{}) *BACnetServiceAckAtomicReadFile {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileRecord.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileRecord.go
index c95affc..a271787 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileRecord.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileRecord.go
@@ -92,15 +92,15 @@ func (m *BACnetServiceAckAtomicReadFileRecord) GetFileRecordData() []*BACnetAppl
 ///////////////////////////////////////////////////////////
 
 // NewBACnetServiceAckAtomicReadFileRecord factory function for BACnetServiceAckAtomicReadFileRecord
-func NewBACnetServiceAckAtomicReadFileRecord(fileStartRecord *BACnetApplicationTagSignedInteger, returnedRecordCount *BACnetApplicationTagUnsignedInteger, fileRecordData []*BACnetApplicationTagOctetString, peekedTagHeader *BACnetTagHeader, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) *BACnetServiceAckAtomicReadFileStreamOrRecord {
-	child := &BACnetServiceAckAtomicReadFileRecord{
+func NewBACnetServiceAckAtomicReadFileRecord(fileStartRecord *BACnetApplicationTagSignedInteger, returnedRecordCount *BACnetApplicationTagUnsignedInteger, fileRecordData []*BACnetApplicationTagOctetString, peekedTagHeader *BACnetTagHeader, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) *BACnetServiceAckAtomicReadFileRecord {
+	_result := &BACnetServiceAckAtomicReadFileRecord{
 		FileStartRecord:     fileStartRecord,
 		ReturnedRecordCount: returnedRecordCount,
 		FileRecordData:      fileRecordData,
 		BACnetServiceAckAtomicReadFileStreamOrRecord: NewBACnetServiceAckAtomicReadFileStreamOrRecord(peekedTagHeader, openingTag, closingTag),
 	}
-	child.Child = child
-	return child.BACnetServiceAckAtomicReadFileStreamOrRecord
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckAtomicReadFileRecord(structType interface{}) *BACnetServiceAckAtomicReadFileRecord {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStream.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStream.go
index 1fc0380..6ff3242 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStream.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStream.go
@@ -85,14 +85,14 @@ func (m *BACnetServiceAckAtomicReadFileStream) GetFileData() *BACnetApplicationT
 ///////////////////////////////////////////////////////////
 
 // NewBACnetServiceAckAtomicReadFileStream factory function for BACnetServiceAckAtomicReadFileStream
-func NewBACnetServiceAckAtomicReadFileStream(fileStartPosition *BACnetApplicationTagSignedInteger, fileData *BACnetApplicationTagOctetString, peekedTagHeader *BACnetTagHeader, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) *BACnetServiceAckAtomicReadFileStreamOrRecord {
-	child := &BACnetServiceAckAtomicReadFileStream{
+func NewBACnetServiceAckAtomicReadFileStream(fileStartPosition *BACnetApplicationTagSignedInteger, fileData *BACnetApplicationTagOctetString, peekedTagHeader *BACnetTagHeader, openingTag *BACnetOpeningTag, closingTag *BACnetClosingTag) *BACnetServiceAckAtomicReadFileStream {
+	_result := &BACnetServiceAckAtomicReadFileStream{
 		FileStartPosition: fileStartPosition,
 		FileData:          fileData,
 		BACnetServiceAckAtomicReadFileStreamOrRecord: NewBACnetServiceAckAtomicReadFileStreamOrRecord(peekedTagHeader, openingTag, closingTag),
 	}
-	child.Child = child
-	return child.BACnetServiceAckAtomicReadFileStreamOrRecord
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckAtomicReadFileStream(structType interface{}) *BACnetServiceAckAtomicReadFileStream {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go
index 7aa58f9..7c133ae 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go
@@ -111,6 +111,9 @@ func CastBACnetServiceAckAtomicReadFileStreamOrRecord(structType interface{}) *B
 	if casted, ok := structType.(*BACnetServiceAckAtomicReadFileStreamOrRecord); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetServiceAckAtomicReadFileStreamOrRecordChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
index 56bd9e9..b0cae57 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
@@ -78,13 +78,13 @@ func (m *BACnetServiceAckAtomicWriteFile) GetFileStartPosition() *BACnetContextT
 ///////////////////////////////////////////////////////////
 
 // NewBACnetServiceAckAtomicWriteFile factory function for BACnetServiceAckAtomicWriteFile
-func NewBACnetServiceAckAtomicWriteFile(fileStartPosition *BACnetContextTagSignedInteger) *BACnetServiceAck {
-	child := &BACnetServiceAckAtomicWriteFile{
+func NewBACnetServiceAckAtomicWriteFile(fileStartPosition *BACnetContextTagSignedInteger) *BACnetServiceAckAtomicWriteFile {
+	_result := &BACnetServiceAckAtomicWriteFile{
 		FileStartPosition: fileStartPosition,
 		BACnetServiceAck:  NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckAtomicWriteFile(structType interface{}) *BACnetServiceAckAtomicWriteFile {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
index b63eed5..0db7256 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
@@ -61,12 +61,12 @@ func (m *BACnetServiceAckConfirmedPrivateTransfer) GetParent() *BACnetServiceAck
 }
 
 // NewBACnetServiceAckConfirmedPrivateTransfer factory function for BACnetServiceAckConfirmedPrivateTransfer
-func NewBACnetServiceAckConfirmedPrivateTransfer() *BACnetServiceAck {
-	child := &BACnetServiceAckConfirmedPrivateTransfer{
+func NewBACnetServiceAckConfirmedPrivateTransfer() *BACnetServiceAckConfirmedPrivateTransfer {
+	_result := &BACnetServiceAckConfirmedPrivateTransfer{
 		BACnetServiceAck: NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckConfirmedPrivateTransfer(structType interface{}) *BACnetServiceAckConfirmedPrivateTransfer {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
index 99610ea..6d954b4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
@@ -61,12 +61,12 @@ func (m *BACnetServiceAckCreateObject) GetParent() *BACnetServiceAck {
 }
 
 // NewBACnetServiceAckCreateObject factory function for BACnetServiceAckCreateObject
-func NewBACnetServiceAckCreateObject() *BACnetServiceAck {
-	child := &BACnetServiceAckCreateObject{
+func NewBACnetServiceAckCreateObject() *BACnetServiceAckCreateObject {
+	_result := &BACnetServiceAckCreateObject{
 		BACnetServiceAck: NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckCreateObject(structType interface{}) *BACnetServiceAckCreateObject {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
index de9cf35..7ccab4c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
@@ -61,12 +61,12 @@ func (m *BACnetServiceAckGetAlarmSummary) GetParent() *BACnetServiceAck {
 }
 
 // NewBACnetServiceAckGetAlarmSummary factory function for BACnetServiceAckGetAlarmSummary
-func NewBACnetServiceAckGetAlarmSummary() *BACnetServiceAck {
-	child := &BACnetServiceAckGetAlarmSummary{
+func NewBACnetServiceAckGetAlarmSummary() *BACnetServiceAckGetAlarmSummary {
+	_result := &BACnetServiceAckGetAlarmSummary{
 		BACnetServiceAck: NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckGetAlarmSummary(structType interface{}) *BACnetServiceAckGetAlarmSummary {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
index e6f45eb..eca0f07 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
@@ -61,12 +61,12 @@ func (m *BACnetServiceAckGetEnrollmentSummary) GetParent() *BACnetServiceAck {
 }
 
 // NewBACnetServiceAckGetEnrollmentSummary factory function for BACnetServiceAckGetEnrollmentSummary
-func NewBACnetServiceAckGetEnrollmentSummary() *BACnetServiceAck {
-	child := &BACnetServiceAckGetEnrollmentSummary{
+func NewBACnetServiceAckGetEnrollmentSummary() *BACnetServiceAckGetEnrollmentSummary {
+	_result := &BACnetServiceAckGetEnrollmentSummary{
 		BACnetServiceAck: NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckGetEnrollmentSummary(structType interface{}) *BACnetServiceAckGetEnrollmentSummary {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
index c3d8364..28c9023 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
@@ -61,12 +61,12 @@ func (m *BACnetServiceAckGetEventInformation) GetParent() *BACnetServiceAck {
 }
 
 // NewBACnetServiceAckGetEventInformation factory function for BACnetServiceAckGetEventInformation
-func NewBACnetServiceAckGetEventInformation() *BACnetServiceAck {
-	child := &BACnetServiceAckGetEventInformation{
+func NewBACnetServiceAckGetEventInformation() *BACnetServiceAckGetEventInformation {
+	_result := &BACnetServiceAckGetEventInformation{
 		BACnetServiceAck: NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckGetEventInformation(structType interface{}) *BACnetServiceAckGetEventInformation {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
index 49e1457..9ccfe5a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
@@ -100,16 +100,16 @@ func (m *BACnetServiceAckReadProperty) GetValues() *BACnetConstructedData {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetServiceAckReadProperty factory function for BACnetServiceAckReadProperty
-func NewBACnetServiceAckReadProperty(objectIdentifier *BACnetContextTagObjectIdentifier, propertyIdentifier *BACnetContextTagPropertyIdentifier, arrayIndex *BACnetContextTagUnsignedInteger, values *BACnetConstructedData) *BACnetServiceAck {
-	child := &BACnetServiceAckReadProperty{
+func NewBACnetServiceAckReadProperty(objectIdentifier *BACnetContextTagObjectIdentifier, propertyIdentifier *BACnetContextTagPropertyIdentifier, arrayIndex *BACnetContextTagUnsignedInteger, values *BACnetConstructedData) *BACnetServiceAckReadProperty {
+	_result := &BACnetServiceAckReadProperty{
 		ObjectIdentifier:   objectIdentifier,
 		PropertyIdentifier: propertyIdentifier,
 		ArrayIndex:         arrayIndex,
 		Values:             values,
 		BACnetServiceAck:   NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckReadProperty(structType interface{}) *BACnetServiceAckReadProperty {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
index 45e6324..a7fef39 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
@@ -61,12 +61,12 @@ func (m *BACnetServiceAckReadPropertyMultiple) GetParent() *BACnetServiceAck {
 }
 
 // NewBACnetServiceAckReadPropertyMultiple factory function for BACnetServiceAckReadPropertyMultiple
-func NewBACnetServiceAckReadPropertyMultiple() *BACnetServiceAck {
-	child := &BACnetServiceAckReadPropertyMultiple{
+func NewBACnetServiceAckReadPropertyMultiple() *BACnetServiceAckReadPropertyMultiple {
+	_result := &BACnetServiceAckReadPropertyMultiple{
 		BACnetServiceAck: NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckReadPropertyMultiple(structType interface{}) *BACnetServiceAckReadPropertyMultiple {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
index 93a42c7..8e61238 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
@@ -61,12 +61,12 @@ func (m *BACnetServiceAckReadRange) GetParent() *BACnetServiceAck {
 }
 
 // NewBACnetServiceAckReadRange factory function for BACnetServiceAckReadRange
-func NewBACnetServiceAckReadRange() *BACnetServiceAck {
-	child := &BACnetServiceAckReadRange{
+func NewBACnetServiceAckReadRange() *BACnetServiceAckReadRange {
+	_result := &BACnetServiceAckReadRange{
 		BACnetServiceAck: NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckReadRange(structType interface{}) *BACnetServiceAckReadRange {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
index 987ac31..7de07c6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
@@ -61,12 +61,12 @@ func (m *BACnetServiceAckRemovedAuthenticate) GetParent() *BACnetServiceAck {
 }
 
 // NewBACnetServiceAckRemovedAuthenticate factory function for BACnetServiceAckRemovedAuthenticate
-func NewBACnetServiceAckRemovedAuthenticate() *BACnetServiceAck {
-	child := &BACnetServiceAckRemovedAuthenticate{
+func NewBACnetServiceAckRemovedAuthenticate() *BACnetServiceAckRemovedAuthenticate {
+	_result := &BACnetServiceAckRemovedAuthenticate{
 		BACnetServiceAck: NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckRemovedAuthenticate(structType interface{}) *BACnetServiceAckRemovedAuthenticate {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
index 1ce2993..afee26b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
@@ -61,12 +61,12 @@ func (m *BACnetServiceAckRemovedReadPropertyConditional) GetParent() *BACnetServ
 }
 
 // NewBACnetServiceAckRemovedReadPropertyConditional factory function for BACnetServiceAckRemovedReadPropertyConditional
-func NewBACnetServiceAckRemovedReadPropertyConditional() *BACnetServiceAck {
-	child := &BACnetServiceAckRemovedReadPropertyConditional{
+func NewBACnetServiceAckRemovedReadPropertyConditional() *BACnetServiceAckRemovedReadPropertyConditional {
+	_result := &BACnetServiceAckRemovedReadPropertyConditional{
 		BACnetServiceAck: NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckRemovedReadPropertyConditional(structType interface{}) *BACnetServiceAckRemovedReadPropertyConditional {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
index 77546e8..d67f8ca 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
@@ -61,12 +61,12 @@ func (m *BACnetServiceAckVTData) GetParent() *BACnetServiceAck {
 }
 
 // NewBACnetServiceAckVTData factory function for BACnetServiceAckVTData
-func NewBACnetServiceAckVTData() *BACnetServiceAck {
-	child := &BACnetServiceAckVTData{
+func NewBACnetServiceAckVTData() *BACnetServiceAckVTData {
+	_result := &BACnetServiceAckVTData{
 		BACnetServiceAck: NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckVTData(structType interface{}) *BACnetServiceAckVTData {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
index e0f8376..1a0e066 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
@@ -61,12 +61,12 @@ func (m *BACnetServiceAckVTOpen) GetParent() *BACnetServiceAck {
 }
 
 // NewBACnetServiceAckVTOpen factory function for BACnetServiceAckVTOpen
-func NewBACnetServiceAckVTOpen() *BACnetServiceAck {
-	child := &BACnetServiceAckVTOpen{
+func NewBACnetServiceAckVTOpen() *BACnetServiceAckVTOpen {
+	_result := &BACnetServiceAckVTOpen{
 		BACnetServiceAck: NewBACnetServiceAck(),
 	}
-	child.Child = child
-	return child.BACnetServiceAck
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetServiceAckVTOpen(structType interface{}) *BACnetServiceAckVTOpen {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStamp.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStamp.go
index 6e1650b..aa83c2e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStamp.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStamp.go
@@ -114,6 +114,9 @@ func CastBACnetTimeStamp(structType interface{}) *BACnetTimeStamp {
 	if casted, ok := structType.(*BACnetTimeStamp); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetTimeStampChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampDateTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampDateTime.go
index 6c74ea3..33c5f8c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampDateTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampDateTime.go
@@ -81,13 +81,13 @@ func (m *BACnetTimeStampDateTime) GetDateTimeValue() *BACnetDateTime {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetTimeStampDateTime factory function for BACnetTimeStampDateTime
-func NewBACnetTimeStampDateTime(dateTimeValue *BACnetDateTime, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetTimeStamp {
-	child := &BACnetTimeStampDateTime{
+func NewBACnetTimeStampDateTime(dateTimeValue *BACnetDateTime, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetTimeStampDateTime {
+	_result := &BACnetTimeStampDateTime{
 		DateTimeValue:   dateTimeValue,
 		BACnetTimeStamp: NewBACnetTimeStamp(openingTag, peekedTagHeader, closingTag, tagNumber),
 	}
-	child.Child = child
-	return child.BACnetTimeStamp
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetTimeStampDateTime(structType interface{}) *BACnetTimeStampDateTime {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampSequence.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampSequence.go
index f6918fb..1759257 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampSequence.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampSequence.go
@@ -81,13 +81,13 @@ func (m *BACnetTimeStampSequence) GetSequenceNumber() *BACnetContextTagUnsignedI
 ///////////////////////////////////////////////////////////
 
 // NewBACnetTimeStampSequence factory function for BACnetTimeStampSequence
-func NewBACnetTimeStampSequence(sequenceNumber *BACnetContextTagUnsignedInteger, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetTimeStamp {
-	child := &BACnetTimeStampSequence{
+func NewBACnetTimeStampSequence(sequenceNumber *BACnetContextTagUnsignedInteger, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetTimeStampSequence {
+	_result := &BACnetTimeStampSequence{
 		SequenceNumber:  sequenceNumber,
 		BACnetTimeStamp: NewBACnetTimeStamp(openingTag, peekedTagHeader, closingTag, tagNumber),
 	}
-	child.Child = child
-	return child.BACnetTimeStamp
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetTimeStampSequence(structType interface{}) *BACnetTimeStampSequence {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampTime.go
index 6c787c2..f956e4c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampTime.go
@@ -81,13 +81,13 @@ func (m *BACnetTimeStampTime) GetTimeValue() *BACnetContextTagTime {
 ///////////////////////////////////////////////////////////
 
 // NewBACnetTimeStampTime factory function for BACnetTimeStampTime
-func NewBACnetTimeStampTime(timeValue *BACnetContextTagTime, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetTimeStamp {
-	child := &BACnetTimeStampTime{
+func NewBACnetTimeStampTime(timeValue *BACnetContextTagTime, openingTag *BACnetOpeningTag, peekedTagHeader *BACnetTagHeader, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetTimeStampTime {
+	_result := &BACnetTimeStampTime{
 		TimeValue:       timeValue,
 		BACnetTimeStamp: NewBACnetTimeStamp(openingTag, peekedTagHeader, closingTag, tagNumber),
 	}
-	child.Child = child
-	return child.BACnetTimeStamp
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetTimeStampTime(structType interface{}) *BACnetTimeStampTime {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
index 5288b40..994ab9b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
@@ -72,6 +72,9 @@ func CastBACnetUnconfirmedServiceRequest(structType interface{}) *BACnetUnconfir
 	if casted, ok := structType.(*BACnetUnconfirmedServiceRequest); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBACnetUnconfirmedServiceRequestChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
index 48e0542..56c6ace 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
@@ -103,16 +103,16 @@ func (m *BACnetUnconfirmedServiceRequestIAm) GetVendorId() *BACnetApplicationTag
 ///////////////////////////////////////////////////////////
 
 // NewBACnetUnconfirmedServiceRequestIAm factory function for BACnetUnconfirmedServiceRequestIAm
-func NewBACnetUnconfirmedServiceRequestIAm(deviceIdentifier *BACnetApplicationTagObjectIdentifier, maximumApduLengthAcceptedLength *BACnetApplicationTagUnsignedInteger, segmentationSupported *BACnetSegmentation, vendorId *BACnetApplicationTagUnsignedInteger, len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestIAm{
+func NewBACnetUnconfirmedServiceRequestIAm(deviceIdentifier *BACnetApplicationTagObjectIdentifier, maximumApduLengthAcceptedLength *BACnetApplicationTagUnsignedInteger, segmentationSupported *BACnetSegmentation, vendorId *BACnetApplicationTagUnsignedInteger, len uint16) *BACnetUnconfirmedServiceRequestIAm {
+	_result := &BACnetUnconfirmedServiceRequestIAm{
 		DeviceIdentifier:                deviceIdentifier,
 		MaximumApduLengthAcceptedLength: maximumApduLengthAcceptedLength,
 		SegmentationSupported:           segmentationSupported,
 		VendorId:                        vendorId,
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestIAm(structType interface{}) *BACnetUnconfirmedServiceRequestIAm {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
index 3efe0f8..a84b046 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
@@ -96,15 +96,15 @@ func (m *BACnetUnconfirmedServiceRequestIHave) GetObjectName() *BACnetApplicatio
 ///////////////////////////////////////////////////////////
 
 // NewBACnetUnconfirmedServiceRequestIHave factory function for BACnetUnconfirmedServiceRequestIHave
-func NewBACnetUnconfirmedServiceRequestIHave(deviceIdentifier *BACnetApplicationTagObjectIdentifier, objectIdentifier *BACnetApplicationTagObjectIdentifier, objectName *BACnetApplicationTagCharacterString, len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestIHave{
+func NewBACnetUnconfirmedServiceRequestIHave(deviceIdentifier *BACnetApplicationTagObjectIdentifier, objectIdentifier *BACnetApplicationTagObjectIdentifier, objectName *BACnetApplicationTagCharacterString, len uint16) *BACnetUnconfirmedServiceRequestIHave {
+	_result := &BACnetUnconfirmedServiceRequestIHave{
 		DeviceIdentifier:                deviceIdentifier,
 		ObjectIdentifier:                objectIdentifier,
 		ObjectName:                      objectName,
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestIHave(structType interface{}) *BACnetUnconfirmedServiceRequestIHave {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
index d70be3a..13f220f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
@@ -89,14 +89,14 @@ func (m *BACnetUnconfirmedServiceRequestTimeSynchronization) GetSynchronizedTime
 ///////////////////////////////////////////////////////////
 
 // NewBACnetUnconfirmedServiceRequestTimeSynchronization factory function for BACnetUnconfirmedServiceRequestTimeSynchronization
-func NewBACnetUnconfirmedServiceRequestTimeSynchronization(synchronizedDate *BACnetApplicationTagDate, synchronizedTime *BACnetApplicationTagTime, len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestTimeSynchronization{
+func NewBACnetUnconfirmedServiceRequestTimeSynchronization(synchronizedDate *BACnetApplicationTagDate, synchronizedTime *BACnetApplicationTagTime, len uint16) *BACnetUnconfirmedServiceRequestTimeSynchronization {
+	_result := &BACnetUnconfirmedServiceRequestTimeSynchronization{
 		SynchronizedDate:                synchronizedDate,
 		SynchronizedTime:                synchronizedTime,
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestTimeSynchronization(structType interface{}) *BACnetUnconfirmedServiceRequestTimeSynchronization {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
index 0117fa1..17c402f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
@@ -65,12 +65,12 @@ func (m *BACnetUnconfirmedServiceRequestUTCTimeSynchronization) GetParent() *BAC
 }
 
 // NewBACnetUnconfirmedServiceRequestUTCTimeSynchronization factory function for BACnetUnconfirmedServiceRequestUTCTimeSynchronization
-func NewBACnetUnconfirmedServiceRequestUTCTimeSynchronization(len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestUTCTimeSynchronization{
+func NewBACnetUnconfirmedServiceRequestUTCTimeSynchronization(len uint16) *BACnetUnconfirmedServiceRequestUTCTimeSynchronization {
+	_result := &BACnetUnconfirmedServiceRequestUTCTimeSynchronization{
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestUTCTimeSynchronization(structType interface{}) *BACnetUnconfirmedServiceRequestUTCTimeSynchronization {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
index 33f7b02..06bf199 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
@@ -110,8 +110,8 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) GetListOfVal
 ///////////////////////////////////////////////////////////
 
 // NewBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification factory function for BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification
-func NewBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, initiatingDeviceIdentifier *BACnetContextTagObjectIdentifier, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, lifetimeInSeconds *BACnetContextTagUnsignedInteger, listOfValues *BACnetPropertyValues, len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification{
+func NewBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, initiatingDeviceIdentifier *BACnetContextTagObjectIdentifier, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, lifetimeInSeconds *BACnetContextTagUnsignedInteger, listOfValues *BACnetPropertyValues, len uint16) *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification {
+	_result := &BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification{
 		SubscriberProcessIdentifier:     subscriberProcessIdentifier,
 		InitiatingDeviceIdentifier:      initiatingDeviceIdentifier,
 		MonitoredObjectIdentifier:       monitoredObjectIdentifier,
@@ -119,8 +119,8 @@ func NewBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification(subscriberProc
 		ListOfValues:                    listOfValues,
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification(structType interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
index 2723905..c81c018 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
@@ -65,12 +65,12 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple) GetP
 }
 
 // NewBACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple factory function for BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple
-func NewBACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple(len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple{
+func NewBACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple(len uint16) *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple {
+	_result := &BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple{
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple(structType interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
index 6eda319..4389dd4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
@@ -65,12 +65,12 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedEventNotification) GetParent(
 }
 
 // NewBACnetUnconfirmedServiceRequestUnconfirmedEventNotification factory function for BACnetUnconfirmedServiceRequestUnconfirmedEventNotification
-func NewBACnetUnconfirmedServiceRequestUnconfirmedEventNotification(len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestUnconfirmedEventNotification{
+func NewBACnetUnconfirmedServiceRequestUnconfirmedEventNotification(len uint16) *BACnetUnconfirmedServiceRequestUnconfirmedEventNotification {
+	_result := &BACnetUnconfirmedServiceRequestUnconfirmedEventNotification{
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestUnconfirmedEventNotification(structType interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedEventNotification {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
index f03f4a5..fe4be14 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
@@ -97,15 +97,15 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer) GetServicePa
 ///////////////////////////////////////////////////////////
 
 // NewBACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer factory function for BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer
-func NewBACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer(vendorId *BACnetContextTagUnsignedInteger, serviceNumber *BACnetContextTagUnsignedInteger, serviceParameters *BACnetPropertyValues, len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer{
+func NewBACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer(vendorId *BACnetContextTagUnsignedInteger, serviceNumber *BACnetContextTagUnsignedInteger, serviceParameters *BACnetPropertyValues, len uint16) *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer {
+	_result := &BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer{
 		VendorId:                        vendorId,
 		ServiceNumber:                   serviceNumber,
 		ServiceParameters:               serviceParameters,
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer(structType interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
index df9c409..5a1be27 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
@@ -65,12 +65,12 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedTextMessage) GetParent() *BAC
 }
 
 // NewBACnetUnconfirmedServiceRequestUnconfirmedTextMessage factory function for BACnetUnconfirmedServiceRequestUnconfirmedTextMessage
-func NewBACnetUnconfirmedServiceRequestUnconfirmedTextMessage(len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestUnconfirmedTextMessage{
+func NewBACnetUnconfirmedServiceRequestUnconfirmedTextMessage(len uint16) *BACnetUnconfirmedServiceRequestUnconfirmedTextMessage {
+	_result := &BACnetUnconfirmedServiceRequestUnconfirmedTextMessage{
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestUnconfirmedTextMessage(structType interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedTextMessage {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedUnknown.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedUnknown.go
index beff699..22cc891 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedUnknown.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedUnknown.go
@@ -82,13 +82,13 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedUnknown) GetUnknownBytes() []
 ///////////////////////////////////////////////////////////
 
 // NewBACnetUnconfirmedServiceRequestUnconfirmedUnknown factory function for BACnetUnconfirmedServiceRequestUnconfirmedUnknown
-func NewBACnetUnconfirmedServiceRequestUnconfirmedUnknown(unknownBytes []byte, len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestUnconfirmedUnknown{
+func NewBACnetUnconfirmedServiceRequestUnconfirmedUnknown(unknownBytes []byte, len uint16) *BACnetUnconfirmedServiceRequestUnconfirmedUnknown {
+	_result := &BACnetUnconfirmedServiceRequestUnconfirmedUnknown{
 		UnknownBytes:                    unknownBytes,
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestUnconfirmedUnknown(structType interface{}) *BACnetUnconfirmedServiceRequestUnconfirmedUnknown {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
index 024ecf5..a571185 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
@@ -104,16 +104,16 @@ func (m *BACnetUnconfirmedServiceRequestWhoHas) GetObjectName() *BACnetContextTa
 ///////////////////////////////////////////////////////////
 
 // NewBACnetUnconfirmedServiceRequestWhoHas factory function for BACnetUnconfirmedServiceRequestWhoHas
-func NewBACnetUnconfirmedServiceRequestWhoHas(deviceInstanceRangeLowLimit *BACnetContextTagUnsignedInteger, deviceInstanceRangeHighLimit *BACnetContextTagUnsignedInteger, objectIdentifier *BACnetContextTagObjectIdentifier, objectName *BACnetContextTagOctetString, len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestWhoHas{
+func NewBACnetUnconfirmedServiceRequestWhoHas(deviceInstanceRangeLowLimit *BACnetContextTagUnsignedInteger, deviceInstanceRangeHighLimit *BACnetContextTagUnsignedInteger, objectIdentifier *BACnetContextTagObjectIdentifier, objectName *BACnetContextTagOctetString, len uint16) *BACnetUnconfirmedServiceRequestWhoHas {
+	_result := &BACnetUnconfirmedServiceRequestWhoHas{
 		DeviceInstanceRangeLowLimit:     deviceInstanceRangeLowLimit,
 		DeviceInstanceRangeHighLimit:    deviceInstanceRangeHighLimit,
 		ObjectIdentifier:                objectIdentifier,
 		ObjectName:                      objectName,
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestWhoHas(structType interface{}) *BACnetUnconfirmedServiceRequestWhoHas {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
index 028217c..c49102e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
@@ -90,14 +90,14 @@ func (m *BACnetUnconfirmedServiceRequestWhoIs) GetDeviceInstanceRangeHighLimit()
 ///////////////////////////////////////////////////////////
 
 // NewBACnetUnconfirmedServiceRequestWhoIs factory function for BACnetUnconfirmedServiceRequestWhoIs
-func NewBACnetUnconfirmedServiceRequestWhoIs(deviceInstanceRangeLowLimit *BACnetContextTagUnsignedInteger, deviceInstanceRangeHighLimit *BACnetContextTagUnsignedInteger, len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestWhoIs{
+func NewBACnetUnconfirmedServiceRequestWhoIs(deviceInstanceRangeLowLimit *BACnetContextTagUnsignedInteger, deviceInstanceRangeHighLimit *BACnetContextTagUnsignedInteger, len uint16) *BACnetUnconfirmedServiceRequestWhoIs {
+	_result := &BACnetUnconfirmedServiceRequestWhoIs{
 		DeviceInstanceRangeLowLimit:     deviceInstanceRangeLowLimit,
 		DeviceInstanceRangeHighLimit:    deviceInstanceRangeHighLimit,
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestWhoIs(structType interface{}) *BACnetUnconfirmedServiceRequestWhoIs {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
index bea8ba5..c30e923 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
@@ -65,12 +65,12 @@ func (m *BACnetUnconfirmedServiceRequestWriteGroup) GetParent() *BACnetUnconfirm
 }
 
 // NewBACnetUnconfirmedServiceRequestWriteGroup factory function for BACnetUnconfirmedServiceRequestWriteGroup
-func NewBACnetUnconfirmedServiceRequestWriteGroup(len uint16) *BACnetUnconfirmedServiceRequest {
-	child := &BACnetUnconfirmedServiceRequestWriteGroup{
+func NewBACnetUnconfirmedServiceRequestWriteGroup(len uint16) *BACnetUnconfirmedServiceRequestWriteGroup {
+	_result := &BACnetUnconfirmedServiceRequestWriteGroup{
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(len),
 	}
-	child.Child = child
-	return child.BACnetUnconfirmedServiceRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastBACnetUnconfirmedServiceRequestWriteGroup(structType interface{}) *BACnetUnconfirmedServiceRequestWriteGroup {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
index 03a3c3c..54f5c9f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
@@ -88,6 +88,9 @@ func CastBVLC(structType interface{}) *BVLC {
 	if casted, ok := structType.(*BVLC); ok {
 		return casted
 	}
+	if casted, ok := structType.(IBVLCChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
index 47b3de8..e0a4d5b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
@@ -61,12 +61,12 @@ func (m *BVLCDeleteForeignDeviceTableEntry) GetParent() *BVLC {
 }
 
 // NewBVLCDeleteForeignDeviceTableEntry factory function for BVLCDeleteForeignDeviceTableEntry
-func NewBVLCDeleteForeignDeviceTableEntry() *BVLC {
-	child := &BVLCDeleteForeignDeviceTableEntry{
+func NewBVLCDeleteForeignDeviceTableEntry() *BVLCDeleteForeignDeviceTableEntry {
+	_result := &BVLCDeleteForeignDeviceTableEntry{
 		BVLC: NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCDeleteForeignDeviceTableEntry(structType interface{}) *BVLCDeleteForeignDeviceTableEntry {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
index 461b962..62d98e9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
@@ -81,13 +81,13 @@ func (m *BVLCDistributeBroadcastToNetwork) GetNpdu() *NPDU {
 ///////////////////////////////////////////////////////////
 
 // NewBVLCDistributeBroadcastToNetwork factory function for BVLCDistributeBroadcastToNetwork
-func NewBVLCDistributeBroadcastToNetwork(npdu *NPDU, bvlcPayloadLength uint16) *BVLC {
-	child := &BVLCDistributeBroadcastToNetwork{
+func NewBVLCDistributeBroadcastToNetwork(npdu *NPDU, bvlcPayloadLength uint16) *BVLCDistributeBroadcastToNetwork {
+	_result := &BVLCDistributeBroadcastToNetwork{
 		Npdu: npdu,
 		BVLC: NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCDistributeBroadcastToNetwork(structType interface{}) *BVLCDistributeBroadcastToNetwork {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
index 4dce91b..306dbdf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
@@ -95,15 +95,15 @@ func (m *BVLCForwardedNPDU) GetNpdu() *NPDU {
 ///////////////////////////////////////////////////////////
 
 // NewBVLCForwardedNPDU factory function for BVLCForwardedNPDU
-func NewBVLCForwardedNPDU(ip []uint8, port uint16, npdu *NPDU, bvlcPayloadLength uint16) *BVLC {
-	child := &BVLCForwardedNPDU{
+func NewBVLCForwardedNPDU(ip []uint8, port uint16, npdu *NPDU, bvlcPayloadLength uint16) *BVLCForwardedNPDU {
+	_result := &BVLCForwardedNPDU{
 		Ip:   ip,
 		Port: port,
 		Npdu: npdu,
 		BVLC: NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCForwardedNPDU(structType interface{}) *BVLCForwardedNPDU {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
index d1c3b7d..5ac1e35 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
@@ -81,13 +81,13 @@ func (m *BVLCOriginalBroadcastNPDU) GetNpdu() *NPDU {
 ///////////////////////////////////////////////////////////
 
 // NewBVLCOriginalBroadcastNPDU factory function for BVLCOriginalBroadcastNPDU
-func NewBVLCOriginalBroadcastNPDU(npdu *NPDU, bvlcPayloadLength uint16) *BVLC {
-	child := &BVLCOriginalBroadcastNPDU{
+func NewBVLCOriginalBroadcastNPDU(npdu *NPDU, bvlcPayloadLength uint16) *BVLCOriginalBroadcastNPDU {
+	_result := &BVLCOriginalBroadcastNPDU{
 		Npdu: npdu,
 		BVLC: NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCOriginalBroadcastNPDU(structType interface{}) *BVLCOriginalBroadcastNPDU {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
index f2624d6..87ec9c7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
@@ -81,13 +81,13 @@ func (m *BVLCOriginalUnicastNPDU) GetNpdu() *NPDU {
 ///////////////////////////////////////////////////////////
 
 // NewBVLCOriginalUnicastNPDU factory function for BVLCOriginalUnicastNPDU
-func NewBVLCOriginalUnicastNPDU(npdu *NPDU, bvlcPayloadLength uint16) *BVLC {
-	child := &BVLCOriginalUnicastNPDU{
+func NewBVLCOriginalUnicastNPDU(npdu *NPDU, bvlcPayloadLength uint16) *BVLCOriginalUnicastNPDU {
+	_result := &BVLCOriginalUnicastNPDU{
 		Npdu: npdu,
 		BVLC: NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCOriginalUnicastNPDU(structType interface{}) *BVLCOriginalUnicastNPDU {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
index 9d7143c..0caea5b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
@@ -61,12 +61,12 @@ func (m *BVLCReadBroadcastDistributionTable) GetParent() *BVLC {
 }
 
 // NewBVLCReadBroadcastDistributionTable factory function for BVLCReadBroadcastDistributionTable
-func NewBVLCReadBroadcastDistributionTable() *BVLC {
-	child := &BVLCReadBroadcastDistributionTable{
+func NewBVLCReadBroadcastDistributionTable() *BVLCReadBroadcastDistributionTable {
+	_result := &BVLCReadBroadcastDistributionTable{
 		BVLC: NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCReadBroadcastDistributionTable(structType interface{}) *BVLCReadBroadcastDistributionTable {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
index fbd6162..f117742 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
@@ -61,12 +61,12 @@ func (m *BVLCReadBroadcastDistributionTableAck) GetParent() *BVLC {
 }
 
 // NewBVLCReadBroadcastDistributionTableAck factory function for BVLCReadBroadcastDistributionTableAck
-func NewBVLCReadBroadcastDistributionTableAck() *BVLC {
-	child := &BVLCReadBroadcastDistributionTableAck{
+func NewBVLCReadBroadcastDistributionTableAck() *BVLCReadBroadcastDistributionTableAck {
+	_result := &BVLCReadBroadcastDistributionTableAck{
 		BVLC: NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCReadBroadcastDistributionTableAck(structType interface{}) *BVLCReadBroadcastDistributionTableAck {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
index db52193..547afec 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
@@ -61,12 +61,12 @@ func (m *BVLCReadForeignDeviceTable) GetParent() *BVLC {
 }
 
 // NewBVLCReadForeignDeviceTable factory function for BVLCReadForeignDeviceTable
-func NewBVLCReadForeignDeviceTable() *BVLC {
-	child := &BVLCReadForeignDeviceTable{
+func NewBVLCReadForeignDeviceTable() *BVLCReadForeignDeviceTable {
+	_result := &BVLCReadForeignDeviceTable{
 		BVLC: NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCReadForeignDeviceTable(structType interface{}) *BVLCReadForeignDeviceTable {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
index c7a8d8c..5db3421 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
@@ -61,12 +61,12 @@ func (m *BVLCReadForeignDeviceTableAck) GetParent() *BVLC {
 }
 
 // NewBVLCReadForeignDeviceTableAck factory function for BVLCReadForeignDeviceTableAck
-func NewBVLCReadForeignDeviceTableAck() *BVLC {
-	child := &BVLCReadForeignDeviceTableAck{
+func NewBVLCReadForeignDeviceTableAck() *BVLCReadForeignDeviceTableAck {
+	_result := &BVLCReadForeignDeviceTableAck{
 		BVLC: NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCReadForeignDeviceTableAck(structType interface{}) *BVLCReadForeignDeviceTableAck {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
index 2bbdad7..dabf11b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
@@ -78,13 +78,13 @@ func (m *BVLCRegisterForeignDevice) GetTtl() uint16 {
 ///////////////////////////////////////////////////////////
 
 // NewBVLCRegisterForeignDevice factory function for BVLCRegisterForeignDevice
-func NewBVLCRegisterForeignDevice(ttl uint16) *BVLC {
-	child := &BVLCRegisterForeignDevice{
+func NewBVLCRegisterForeignDevice(ttl uint16) *BVLCRegisterForeignDevice {
+	_result := &BVLCRegisterForeignDevice{
 		Ttl:  ttl,
 		BVLC: NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCRegisterForeignDevice(structType interface{}) *BVLCRegisterForeignDevice {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
index e0c6fa2..075b617 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
@@ -78,13 +78,13 @@ func (m *BVLCResult) GetCode() BVLCResultCode {
 ///////////////////////////////////////////////////////////
 
 // NewBVLCResult factory function for BVLCResult
-func NewBVLCResult(code BVLCResultCode) *BVLC {
-	child := &BVLCResult{
+func NewBVLCResult(code BVLCResultCode) *BVLCResult {
+	_result := &BVLCResult{
 		Code: code,
 		BVLC: NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCResult(structType interface{}) *BVLCResult {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
index 554dd7e..2d38750 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
@@ -61,12 +61,12 @@ func (m *BVLCSecureBVLL) GetParent() *BVLC {
 }
 
 // NewBVLCSecureBVLL factory function for BVLCSecureBVLL
-func NewBVLCSecureBVLL() *BVLC {
-	child := &BVLCSecureBVLL{
+func NewBVLCSecureBVLL() *BVLCSecureBVLL {
+	_result := &BVLCSecureBVLL{
 		BVLC: NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCSecureBVLL(structType interface{}) *BVLCSecureBVLL {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWriteBroadcastDistributionTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWriteBroadcastDistributionTable.go
index c7b4e85..9063d98 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWriteBroadcastDistributionTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWriteBroadcastDistributionTable.go
@@ -81,13 +81,13 @@ func (m *BVLCWriteBroadcastDistributionTable) GetTable() []*BVLCWriteBroadcastDi
 ///////////////////////////////////////////////////////////
 
 // NewBVLCWriteBroadcastDistributionTable factory function for BVLCWriteBroadcastDistributionTable
-func NewBVLCWriteBroadcastDistributionTable(table []*BVLCWriteBroadcastDistributionTableEntry, bvlcPayloadLength uint16) *BVLC {
-	child := &BVLCWriteBroadcastDistributionTable{
+func NewBVLCWriteBroadcastDistributionTable(table []*BVLCWriteBroadcastDistributionTableEntry, bvlcPayloadLength uint16) *BVLCWriteBroadcastDistributionTable {
+	_result := &BVLCWriteBroadcastDistributionTable{
 		Table: table,
 		BVLC:  NewBVLC(),
 	}
-	child.Child = child
-	return child.BVLC
+	_result.Child = _result
+	return _result
 }
 
 func CastBVLCWriteBroadcastDistributionTable(structType interface{}) *BVLCWriteBroadcastDistributionTable {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
index e977127..0928b4c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
@@ -88,6 +88,9 @@ func CastNLM(structType interface{}) *NLM {
 	if casted, ok := structType.(*NLM); ok {
 		return casted
 	}
+	if casted, ok := structType.(INLMChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMDisconnectConnectionToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMDisconnectConnectionToNetwork.go
index 93961a4..5de9c86 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMDisconnectConnectionToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMDisconnectConnectionToNetwork.go
@@ -83,13 +83,13 @@ func (m *NLMDisconnectConnectionToNetwork) GetDestinationNetworkAddress() uint16
 ///////////////////////////////////////////////////////////
 
 // NewNLMDisconnectConnectionToNetwork factory function for NLMDisconnectConnectionToNetwork
-func NewNLMDisconnectConnectionToNetwork(destinationNetworkAddress uint16, vendorId *uint16, apduLength uint16) *NLM {
-	child := &NLMDisconnectConnectionToNetwork{
+func NewNLMDisconnectConnectionToNetwork(destinationNetworkAddress uint16, vendorId *uint16, apduLength uint16) *NLMDisconnectConnectionToNetwork {
+	_result := &NLMDisconnectConnectionToNetwork{
 		DestinationNetworkAddress: destinationNetworkAddress,
 		NLM:                       NewNLM(vendorId, apduLength),
 	}
-	child.Child = child
-	return child.NLM
+	_result.Child = _result
+	return _result
 }
 
 func CastNLMDisconnectConnectionToNetwork(structType interface{}) *NLMDisconnectConnectionToNetwork {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMEstablishConnectionToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMEstablishConnectionToNetwork.go
index 9f4d5fb..2b4754a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMEstablishConnectionToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMEstablishConnectionToNetwork.go
@@ -90,14 +90,14 @@ func (m *NLMEstablishConnectionToNetwork) GetTerminationTime() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewNLMEstablishConnectionToNetwork factory function for NLMEstablishConnectionToNetwork
-func NewNLMEstablishConnectionToNetwork(destinationNetworkAddress uint16, terminationTime uint8, vendorId *uint16, apduLength uint16) *NLM {
-	child := &NLMEstablishConnectionToNetwork{
+func NewNLMEstablishConnectionToNetwork(destinationNetworkAddress uint16, terminationTime uint8, vendorId *uint16, apduLength uint16) *NLMEstablishConnectionToNetwork {
+	_result := &NLMEstablishConnectionToNetwork{
 		DestinationNetworkAddress: destinationNetworkAddress,
 		TerminationTime:           terminationTime,
 		NLM:                       NewNLM(vendorId, apduLength),
 	}
-	child.Child = child
-	return child.NLM
+	_result.Child = _result
+	return _result
 }
 
 func CastNLMEstablishConnectionToNetwork(structType interface{}) *NLMEstablishConnectionToNetwork {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
index 529dc9c..0cac51f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
@@ -83,13 +83,13 @@ func (m *NLMIAmRouterToNetwork) GetDestinationNetworkAddress() []uint16 {
 ///////////////////////////////////////////////////////////
 
 // NewNLMIAmRouterToNetwork factory function for NLMIAmRouterToNetwork
-func NewNLMIAmRouterToNetwork(destinationNetworkAddress []uint16, vendorId *uint16, apduLength uint16) *NLM {
-	child := &NLMIAmRouterToNetwork{
+func NewNLMIAmRouterToNetwork(destinationNetworkAddress []uint16, vendorId *uint16, apduLength uint16) *NLMIAmRouterToNetwork {
+	_result := &NLMIAmRouterToNetwork{
 		DestinationNetworkAddress: destinationNetworkAddress,
 		NLM:                       NewNLM(vendorId, apduLength),
 	}
-	child.Child = child
-	return child.NLM
+	_result.Child = _result
+	return _result
 }
 
 func CastNLMIAmRouterToNetwork(structType interface{}) *NLMIAmRouterToNetwork {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMICouldBeRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMICouldBeRouterToNetwork.go
index 219c2d3..ea050a5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMICouldBeRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMICouldBeRouterToNetwork.go
@@ -90,14 +90,14 @@ func (m *NLMICouldBeRouterToNetwork) GetPerformanceIndex() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewNLMICouldBeRouterToNetwork factory function for NLMICouldBeRouterToNetwork
-func NewNLMICouldBeRouterToNetwork(destinationNetworkAddress uint16, performanceIndex uint8, vendorId *uint16, apduLength uint16) *NLM {
-	child := &NLMICouldBeRouterToNetwork{
+func NewNLMICouldBeRouterToNetwork(destinationNetworkAddress uint16, performanceIndex uint8, vendorId *uint16, apduLength uint16) *NLMICouldBeRouterToNetwork {
+	_result := &NLMICouldBeRouterToNetwork{
 		DestinationNetworkAddress: destinationNetworkAddress,
 		PerformanceIndex:          performanceIndex,
 		NLM:                       NewNLM(vendorId, apduLength),
 	}
-	child.Child = child
-	return child.NLM
+	_result.Child = _result
+	return _result
 }
 
 func CastNLMICouldBeRouterToNetwork(structType interface{}) *NLMICouldBeRouterToNetwork {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTable.go
index 493d11c..205b97e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTable.go
@@ -90,14 +90,14 @@ func (m *NLMInitalizeRoutingTable) GetPortMappings() []*NLMInitalizeRoutingTable
 ///////////////////////////////////////////////////////////
 
 // NewNLMInitalizeRoutingTable factory function for NLMInitalizeRoutingTable
-func NewNLMInitalizeRoutingTable(numberOfPorts uint8, portMappings []*NLMInitalizeRoutingTablePortMapping, vendorId *uint16, apduLength uint16) *NLM {
-	child := &NLMInitalizeRoutingTable{
+func NewNLMInitalizeRoutingTable(numberOfPorts uint8, portMappings []*NLMInitalizeRoutingTablePortMapping, vendorId *uint16, apduLength uint16) *NLMInitalizeRoutingTable {
+	_result := &NLMInitalizeRoutingTable{
 		NumberOfPorts: numberOfPorts,
 		PortMappings:  portMappings,
 		NLM:           NewNLM(vendorId, apduLength),
 	}
-	child.Child = child
-	return child.NLM
+	_result.Child = _result
+	return _result
 }
 
 func CastNLMInitalizeRoutingTable(structType interface{}) *NLMInitalizeRoutingTable {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTableAck.go
index b9a4303..945fedf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTableAck.go
@@ -90,14 +90,14 @@ func (m *NLMInitalizeRoutingTableAck) GetPortMappings() []*NLMInitalizeRoutingTa
 ///////////////////////////////////////////////////////////
 
 // NewNLMInitalizeRoutingTableAck factory function for NLMInitalizeRoutingTableAck
-func NewNLMInitalizeRoutingTableAck(numberOfPorts uint8, portMappings []*NLMInitalizeRoutingTablePortMapping, vendorId *uint16, apduLength uint16) *NLM {
-	child := &NLMInitalizeRoutingTableAck{
+func NewNLMInitalizeRoutingTableAck(numberOfPorts uint8, portMappings []*NLMInitalizeRoutingTablePortMapping, vendorId *uint16, apduLength uint16) *NLMInitalizeRoutingTableAck {
+	_result := &NLMInitalizeRoutingTableAck{
 		NumberOfPorts: numberOfPorts,
 		PortMappings:  portMappings,
 		NLM:           NewNLM(vendorId, apduLength),
 	}
-	child.Child = child
-	return child.NLM
+	_result.Child = _result
+	return _result
 }
 
 func CastNLMInitalizeRoutingTableAck(structType interface{}) *NLMInitalizeRoutingTableAck {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetwork.go
index 1010e57..e1685c1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetwork.go
@@ -90,14 +90,14 @@ func (m *NLMRejectRouterToNetwork) GetDestinationNetworkAddress() uint16 {
 ///////////////////////////////////////////////////////////
 
 // NewNLMRejectRouterToNetwork factory function for NLMRejectRouterToNetwork
-func NewNLMRejectRouterToNetwork(rejectReason NLMRejectRouterToNetworkRejectReason, destinationNetworkAddress uint16, vendorId *uint16, apduLength uint16) *NLM {
-	child := &NLMRejectRouterToNetwork{
+func NewNLMRejectRouterToNetwork(rejectReason NLMRejectRouterToNetworkRejectReason, destinationNetworkAddress uint16, vendorId *uint16, apduLength uint16) *NLMRejectRouterToNetwork {
+	_result := &NLMRejectRouterToNetwork{
 		RejectReason:              rejectReason,
 		DestinationNetworkAddress: destinationNetworkAddress,
 		NLM:                       NewNLM(vendorId, apduLength),
 	}
-	child.Child = child
-	return child.NLM
+	_result.Child = _result
+	return _result
 }
 
 func CastNLMRejectRouterToNetwork(structType interface{}) *NLMRejectRouterToNetwork {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterAvailableToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterAvailableToNetwork.go
index 1ef939a..08ce898 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterAvailableToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterAvailableToNetwork.go
@@ -83,13 +83,13 @@ func (m *NLMRouterAvailableToNetwork) GetDestinationNetworkAddress() []uint16 {
 ///////////////////////////////////////////////////////////
 
 // NewNLMRouterAvailableToNetwork factory function for NLMRouterAvailableToNetwork
-func NewNLMRouterAvailableToNetwork(destinationNetworkAddress []uint16, vendorId *uint16, apduLength uint16) *NLM {
-	child := &NLMRouterAvailableToNetwork{
+func NewNLMRouterAvailableToNetwork(destinationNetworkAddress []uint16, vendorId *uint16, apduLength uint16) *NLMRouterAvailableToNetwork {
+	_result := &NLMRouterAvailableToNetwork{
 		DestinationNetworkAddress: destinationNetworkAddress,
 		NLM:                       NewNLM(vendorId, apduLength),
 	}
-	child.Child = child
-	return child.NLM
+	_result.Child = _result
+	return _result
 }
 
 func CastNLMRouterAvailableToNetwork(structType interface{}) *NLMRouterAvailableToNetwork {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterBusyToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterBusyToNetwork.go
index 3a2af2a..44daa4e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterBusyToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterBusyToNetwork.go
@@ -83,13 +83,13 @@ func (m *NLMRouterBusyToNetwork) GetDestinationNetworkAddress() []uint16 {
 ///////////////////////////////////////////////////////////
 
 // NewNLMRouterBusyToNetwork factory function for NLMRouterBusyToNetwork
-func NewNLMRouterBusyToNetwork(destinationNetworkAddress []uint16, vendorId *uint16, apduLength uint16) *NLM {
-	child := &NLMRouterBusyToNetwork{
+func NewNLMRouterBusyToNetwork(destinationNetworkAddress []uint16, vendorId *uint16, apduLength uint16) *NLMRouterBusyToNetwork {
+	_result := &NLMRouterBusyToNetwork{
 		DestinationNetworkAddress: destinationNetworkAddress,
 		NLM:                       NewNLM(vendorId, apduLength),
 	}
-	child.Child = child
-	return child.NLM
+	_result.Child = _result
+	return _result
 }
 
 func CastNLMRouterBusyToNetwork(structType interface{}) *NLMRouterBusyToNetwork {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
index 9bd5716..f3170c2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
@@ -83,13 +83,13 @@ func (m *NLMWhoIsRouterToNetwork) GetDestinationNetworkAddress() []uint16 {
 ///////////////////////////////////////////////////////////
 
 // NewNLMWhoIsRouterToNetwork factory function for NLMWhoIsRouterToNetwork
-func NewNLMWhoIsRouterToNetwork(destinationNetworkAddress []uint16, vendorId *uint16, apduLength uint16) *NLM {
-	child := &NLMWhoIsRouterToNetwork{
+func NewNLMWhoIsRouterToNetwork(destinationNetworkAddress []uint16, vendorId *uint16, apduLength uint16) *NLMWhoIsRouterToNetwork {
+	_result := &NLMWhoIsRouterToNetwork{
 		DestinationNetworkAddress: destinationNetworkAddress,
 		NLM:                       NewNLM(vendorId, apduLength),
 	}
-	child.Child = child
-	return child.NLM
+	_result.Child = _result
+	return _result
 }
 
 func CastNLMWhoIsRouterToNetwork(structType interface{}) *NLMWhoIsRouterToNetwork {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALData.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALData.go
index d22a349..b5e7b0b 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALData.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALData.go
@@ -97,6 +97,9 @@ func CastCALData(structType interface{}) *CALData {
 	if casted, ok := structType.(*CALData); ok {
 		return casted
 	}
+	if casted, ok := structType.(ICALDataChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyAcknowledge.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyAcknowledge.go
index 7739378..09840d6 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyAcknowledge.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyAcknowledge.go
@@ -83,14 +83,14 @@ func (m *CALDataReplyAcknowledge) GetCode() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewCALDataReplyAcknowledge factory function for CALDataReplyAcknowledge
-func NewCALDataReplyAcknowledge(paramNo uint8, code uint8, commandTypeContainer CALCommandTypeContainer) *CALData {
-	child := &CALDataReplyAcknowledge{
+func NewCALDataReplyAcknowledge(paramNo uint8, code uint8, commandTypeContainer CALCommandTypeContainer) *CALDataReplyAcknowledge {
+	_result := &CALDataReplyAcknowledge{
 		ParamNo: paramNo,
 		Code:    code,
 		CALData: NewCALData(commandTypeContainer),
 	}
-	child.Child = child
-	return child.CALData
+	_result.Child = _result
+	return _result
 }
 
 func CastCALDataReplyAcknowledge(structType interface{}) *CALDataReplyAcknowledge {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyReply.go
index c36778f..6d3ab44 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyReply.go
@@ -83,14 +83,14 @@ func (m *CALDataReplyReply) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewCALDataReplyReply factory function for CALDataReplyReply
-func NewCALDataReplyReply(paramNumber uint8, data []byte, commandTypeContainer CALCommandTypeContainer) *CALData {
-	child := &CALDataReplyReply{
+func NewCALDataReplyReply(paramNumber uint8, data []byte, commandTypeContainer CALCommandTypeContainer) *CALDataReplyReply {
+	_result := &CALDataReplyReply{
 		ParamNumber: paramNumber,
 		Data:        data,
 		CALData:     NewCALData(commandTypeContainer),
 	}
-	child.Child = child
-	return child.CALData
+	_result.Child = _result
+	return _result
 }
 
 func CastCALDataReplyReply(structType interface{}) *CALDataReplyReply {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatus.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatus.go
index 2757582..f23d1e5 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatus.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatus.go
@@ -90,15 +90,15 @@ func (m *CALDataReplyStatus) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewCALDataReplyStatus factory function for CALDataReplyStatus
-func NewCALDataReplyStatus(application ApplicationIdContainer, blockStart uint8, data []byte, commandTypeContainer CALCommandTypeContainer) *CALData {
-	child := &CALDataReplyStatus{
+func NewCALDataReplyStatus(application ApplicationIdContainer, blockStart uint8, data []byte, commandTypeContainer CALCommandTypeContainer) *CALDataReplyStatus {
+	_result := &CALDataReplyStatus{
 		Application: application,
 		BlockStart:  blockStart,
 		Data:        data,
 		CALData:     NewCALData(commandTypeContainer),
 	}
-	child.Child = child
-	return child.CALData
+	_result.Child = _result
+	return _result
 }
 
 func CastCALDataReplyStatus(structType interface{}) *CALDataReplyStatus {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatusExtended.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatusExtended.go
index fdd46a0..fd9457b 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatusExtended.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatusExtended.go
@@ -97,16 +97,16 @@ func (m *CALDataReplyStatusExtended) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewCALDataReplyStatusExtended factory function for CALDataReplyStatusExtended
-func NewCALDataReplyStatusExtended(encoding uint8, application ApplicationIdContainer, blockStart uint8, data []byte, commandTypeContainer CALCommandTypeContainer) *CALData {
-	child := &CALDataReplyStatusExtended{
+func NewCALDataReplyStatusExtended(encoding uint8, application ApplicationIdContainer, blockStart uint8, data []byte, commandTypeContainer CALCommandTypeContainer) *CALDataReplyStatusExtended {
+	_result := &CALDataReplyStatusExtended{
 		Encoding:    encoding,
 		Application: application,
 		BlockStart:  blockStart,
 		Data:        data,
 		CALData:     NewCALData(commandTypeContainer),
 	}
-	child.Child = child
-	return child.CALData
+	_result.Child = _result
+	return _result
 }
 
 func CastCALDataReplyStatusExtended(structType interface{}) *CALDataReplyStatusExtended {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestGetStatus.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestGetStatus.go
index 76b96cb..a869739 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestGetStatus.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestGetStatus.go
@@ -83,14 +83,14 @@ func (m *CALDataRequestGetStatus) GetCount() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewCALDataRequestGetStatus factory function for CALDataRequestGetStatus
-func NewCALDataRequestGetStatus(paramNo uint8, count uint8, commandTypeContainer CALCommandTypeContainer) *CALData {
-	child := &CALDataRequestGetStatus{
+func NewCALDataRequestGetStatus(paramNo uint8, count uint8, commandTypeContainer CALCommandTypeContainer) *CALDataRequestGetStatus {
+	_result := &CALDataRequestGetStatus{
 		ParamNo: paramNo,
 		Count:   count,
 		CALData: NewCALData(commandTypeContainer),
 	}
-	child.Child = child
-	return child.CALData
+	_result.Child = _result
+	return _result
 }
 
 func CastCALDataRequestGetStatus(structType interface{}) *CALDataRequestGetStatus {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestIdentify.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestIdentify.go
index 8fbc398..179ed09 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestIdentify.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestIdentify.go
@@ -76,13 +76,13 @@ func (m *CALDataRequestIdentify) GetAttribute() Attribute {
 ///////////////////////////////////////////////////////////
 
 // NewCALDataRequestIdentify factory function for CALDataRequestIdentify
-func NewCALDataRequestIdentify(attribute Attribute, commandTypeContainer CALCommandTypeContainer) *CALData {
-	child := &CALDataRequestIdentify{
+func NewCALDataRequestIdentify(attribute Attribute, commandTypeContainer CALCommandTypeContainer) *CALDataRequestIdentify {
+	_result := &CALDataRequestIdentify{
 		Attribute: attribute,
 		CALData:   NewCALData(commandTypeContainer),
 	}
-	child.Child = child
-	return child.CALData
+	_result.Child = _result
+	return _result
 }
 
 func CastCALDataRequestIdentify(structType interface{}) *CALDataRequestIdentify {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestRecall.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestRecall.go
index 4cbaece..d64a15a 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestRecall.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestRecall.go
@@ -83,14 +83,14 @@ func (m *CALDataRequestRecall) GetCount() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewCALDataRequestRecall factory function for CALDataRequestRecall
-func NewCALDataRequestRecall(paramNo uint8, count uint8, commandTypeContainer CALCommandTypeContainer) *CALData {
-	child := &CALDataRequestRecall{
+func NewCALDataRequestRecall(paramNo uint8, count uint8, commandTypeContainer CALCommandTypeContainer) *CALDataRequestRecall {
+	_result := &CALDataRequestRecall{
 		ParamNo: paramNo,
 		Count:   count,
 		CALData: NewCALData(commandTypeContainer),
 	}
-	child.Child = child
-	return child.CALData
+	_result.Child = _result
+	return _result
 }
 
 func CastCALDataRequestRecall(structType interface{}) *CALDataRequestRecall {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestReset.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestReset.go
index 169ca5d..b5fdfa2 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestReset.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestReset.go
@@ -59,12 +59,12 @@ func (m *CALDataRequestReset) GetParent() *CALData {
 }
 
 // NewCALDataRequestReset factory function for CALDataRequestReset
-func NewCALDataRequestReset(commandTypeContainer CALCommandTypeContainer) *CALData {
-	child := &CALDataRequestReset{
+func NewCALDataRequestReset(commandTypeContainer CALCommandTypeContainer) *CALDataRequestReset {
+	_result := &CALDataRequestReset{
 		CALData: NewCALData(commandTypeContainer),
 	}
-	child.Child = child
-	return child.CALData
+	_result.Child = _result
+	return _result
 }
 
 func CastCALDataRequestReset(structType interface{}) *CALDataRequestReset {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALReply.go
index e14684d..8e0a54c 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALReply.go
@@ -95,6 +95,9 @@ func CastCALReply(structType interface{}) *CALReply {
 	if casted, ok := structType.(*CALReply); ok {
 		return casted
 	}
+	if casted, ok := structType.(ICALReplyChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyLong.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyLong.go
index 3fd8e53..601e89c 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyLong.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyLong.go
@@ -136,8 +136,8 @@ func (m *CALReplyLong) GetIsUnitAddress() bool {
 ///////////////////////////////////////////////////////////
 
 // NewCALReplyLong factory function for CALReplyLong
-func NewCALReplyLong(terminatingByte uint32, unitAddress *UnitAddress, bridgeAddress *BridgeAddress, serialInterfaceAddress *SerialInterfaceAddress, reservedByte *byte, replyNetwork *ReplyNetwork, calType byte, calData *CALData) *CALReply {
-	child := &CALReplyLong{
+func NewCALReplyLong(terminatingByte uint32, unitAddress *UnitAddress, bridgeAddress *BridgeAddress, serialInterfaceAddress *SerialInterfaceAddress, reservedByte *byte, replyNetwork *ReplyNetwork, calType byte, calData *CALData) *CALReplyLong {
+	_result := &CALReplyLong{
 		TerminatingByte:        terminatingByte,
 		UnitAddress:            unitAddress,
 		BridgeAddress:          bridgeAddress,
@@ -146,8 +146,8 @@ func NewCALReplyLong(terminatingByte uint32, unitAddress *UnitAddress, bridgeAdd
 		ReplyNetwork:           replyNetwork,
 		CALReply:               NewCALReply(calType, calData),
 	}
-	child.Child = child
-	return child.CALReply
+	_result.Child = _result
+	return _result
 }
 
 func CastCALReplyLong(structType interface{}) *CALReplyLong {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyReply.go
index 8c41f22..edf5c57 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyReply.go
@@ -76,13 +76,13 @@ func (m *CALReplyReply) GetIsA() *CALReply {
 ///////////////////////////////////////////////////////////
 
 // NewCALReplyReply factory function for CALReplyReply
-func NewCALReplyReply(isA *CALReply, magicByte byte) *Reply {
-	child := &CALReplyReply{
+func NewCALReplyReply(isA *CALReply, magicByte byte) *CALReplyReply {
+	_result := &CALReplyReply{
 		IsA:   isA,
 		Reply: NewReply(magicByte),
 	}
-	child.Child = child
-	return child.Reply
+	_result.Child = _result
+	return _result
 }
 
 func CastCALReplyReply(structType interface{}) *CALReplyReply {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyShort.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyShort.go
index f2c8c77..808094c 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyShort.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyShort.go
@@ -60,12 +60,12 @@ func (m *CALReplyShort) GetParent() *CALReply {
 }
 
 // NewCALReplyShort factory function for CALReplyShort
-func NewCALReplyShort(calType byte, calData *CALData) *CALReply {
-	child := &CALReplyShort{
+func NewCALReplyShort(calType byte, calData *CALData) *CALReplyShort {
+	_result := &CALReplyShort{
 		CALReply: NewCALReply(calType, calData),
 	}
-	child.Child = child
-	return child.CALReply
+	_result.Child = _result
+	return _result
 }
 
 func CastCALReplyShort(structType interface{}) *CALReplyShort {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommand.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommand.go
index 4693848..b62051e 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommand.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommand.go
@@ -104,6 +104,9 @@ func CastCBusCommand(structType interface{}) *CBusCommand {
 	if casted, ok := structType.(*CBusCommand); ok {
 		return casted
 	}
+	if casted, ok := structType.(ICBusCommandChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToMultiPoint.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToMultiPoint.go
index 2720b01..06c5e6f 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToMultiPoint.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToMultiPoint.go
@@ -79,13 +79,13 @@ func (m *CBusCommandPointToMultiPoint) GetCommand() *CBusPointToMultiPointComman
 ///////////////////////////////////////////////////////////
 
 // NewCBusCommandPointToMultiPoint factory function for CBusCommandPointToMultiPoint
-func NewCBusCommandPointToMultiPoint(command *CBusPointToMultiPointCommand, header *CBusHeader, srchk bool) *CBusCommand {
-	child := &CBusCommandPointToMultiPoint{
+func NewCBusCommandPointToMultiPoint(command *CBusPointToMultiPointCommand, header *CBusHeader, srchk bool) *CBusCommandPointToMultiPoint {
+	_result := &CBusCommandPointToMultiPoint{
 		Command:     command,
 		CBusCommand: NewCBusCommand(header, srchk),
 	}
-	child.Child = child
-	return child.CBusCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastCBusCommandPointToMultiPoint(structType interface{}) *CBusCommandPointToMultiPoint {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPoint.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPoint.go
index 7931921..f4231b4 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPoint.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPoint.go
@@ -79,13 +79,13 @@ func (m *CBusCommandPointToPoint) GetCommand() *CBusPointToPointCommand {
 ///////////////////////////////////////////////////////////
 
 // NewCBusCommandPointToPoint factory function for CBusCommandPointToPoint
-func NewCBusCommandPointToPoint(command *CBusPointToPointCommand, header *CBusHeader, srchk bool) *CBusCommand {
-	child := &CBusCommandPointToPoint{
+func NewCBusCommandPointToPoint(command *CBusPointToPointCommand, header *CBusHeader, srchk bool) *CBusCommandPointToPoint {
+	_result := &CBusCommandPointToPoint{
 		Command:     command,
 		CBusCommand: NewCBusCommand(header, srchk),
 	}
-	child.Child = child
-	return child.CBusCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastCBusCommandPointToPoint(structType interface{}) *CBusCommandPointToPoint {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPoint.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPoint.go
index c9f4305..b2289e6 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPoint.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPoint.go
@@ -79,13 +79,13 @@ func (m *CBusCommandPointToPointToMultiPoint) GetCommand() *CBusPointToPointToMu
 ///////////////////////////////////////////////////////////
 
 // NewCBusCommandPointToPointToMultiPoint factory function for CBusCommandPointToPointToMultiPoint
-func NewCBusCommandPointToPointToMultiPoint(command *CBusPointToPointToMultipointCommand, header *CBusHeader, srchk bool) *CBusCommand {
-	child := &CBusCommandPointToPointToMultiPoint{
+func NewCBusCommandPointToPointToMultiPoint(command *CBusPointToPointToMultipointCommand, header *CBusHeader, srchk bool) *CBusCommandPointToPointToMultiPoint {
+	_result := &CBusCommandPointToPointToMultiPoint{
 		Command:     command,
 		CBusCommand: NewCBusCommand(header, srchk),
 	}
-	child.Child = child
-	return child.CBusCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastCBusCommandPointToPointToMultiPoint(structType interface{}) *CBusCommandPointToPointToMultiPoint {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointNormal.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointNormal.go
index 0508a62..e1e50ae 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointNormal.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointNormal.go
@@ -114,8 +114,8 @@ func (m *CBusCommandPointToPointToMultiPointNormal) GetAlpha() *Alpha {
 ///////////////////////////////////////////////////////////
 
 // NewCBusCommandPointToPointToMultiPointNormal factory function for CBusCommandPointToPointToMultiPointNormal
-func NewCBusCommandPointToPointToMultiPointNormal(application ApplicationIdContainer, salData *SALData, crc *Checksum, peekAlpha byte, alpha *Alpha, bridgeAddress *BridgeAddress, networkRoute *NetworkRoute, peekedApplication byte, srchk bool) *CBusPointToPointToMultipointCommand {
-	child := &CBusCommandPointToPointToMultiPointNormal{
+func NewCBusCommandPointToPointToMultiPointNormal(application ApplicationIdContainer, salData *SALData, crc *Checksum, peekAlpha byte, alpha *Alpha, bridgeAddress *BridgeAddress, networkRoute *NetworkRoute, peekedApplication byte, srchk bool) *CBusCommandPointToPointToMultiPointNormal {
+	_result := &CBusCommandPointToPointToMultiPointNormal{
 		Application:                         application,
 		SalData:                             salData,
 		Crc:                                 crc,
@@ -123,8 +123,8 @@ func NewCBusCommandPointToPointToMultiPointNormal(application ApplicationIdConta
 		Alpha:                               alpha,
 		CBusPointToPointToMultipointCommand: NewCBusPointToPointToMultipointCommand(bridgeAddress, networkRoute, peekedApplication, srchk),
 	}
-	child.Child = child
-	return child.CBusPointToPointToMultipointCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastCBusCommandPointToPointToMultiPointNormal(structType interface{}) *CBusCommandPointToPointToMultiPointNormal {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointStatus.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointStatus.go
index 50382b2..f5d13cd 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointStatus.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointStatus.go
@@ -108,16 +108,16 @@ func (m *CBusCommandPointToPointToMultiPointStatus) GetAlpha() *Alpha {
 ///////////////////////////////////////////////////////////
 
 // NewCBusCommandPointToPointToMultiPointStatus factory function for CBusCommandPointToPointToMultiPointStatus
-func NewCBusCommandPointToPointToMultiPointStatus(statusRequest *StatusRequest, crc *Checksum, peekAlpha byte, alpha *Alpha, bridgeAddress *BridgeAddress, networkRoute *NetworkRoute, peekedApplication byte, srchk bool) *CBusPointToPointToMultipointCommand {
-	child := &CBusCommandPointToPointToMultiPointStatus{
+func NewCBusCommandPointToPointToMultiPointStatus(statusRequest *StatusRequest, crc *Checksum, peekAlpha byte, alpha *Alpha, bridgeAddress *BridgeAddress, networkRoute *NetworkRoute, peekedApplication byte, srchk bool) *CBusCommandPointToPointToMultiPointStatus {
+	_result := &CBusCommandPointToPointToMultiPointStatus{
 		StatusRequest:                       statusRequest,
 		Crc:                                 crc,
 		PeekAlpha:                           peekAlpha,
 		Alpha:                               alpha,
 		CBusPointToPointToMultipointCommand: NewCBusPointToPointToMultipointCommand(bridgeAddress, networkRoute, peekedApplication, srchk),
 	}
-	child.Child = child
-	return child.CBusPointToPointToMultipointCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastCBusCommandPointToPointToMultiPointStatus(structType interface{}) *CBusCommandPointToPointToMultiPointStatus {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommand.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommand.go
index 05e75a2..4a26d8b 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommand.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommand.go
@@ -86,6 +86,9 @@ func CastCBusPointToMultiPointCommand(structType interface{}) *CBusPointToMultiP
 	if casted, ok := structType.(*CBusPointToMultiPointCommand); ok {
 		return casted
 	}
+	if casted, ok := structType.(ICBusPointToMultiPointCommandChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandNormal.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandNormal.go
index 2d11578..325c000 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandNormal.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandNormal.go
@@ -113,8 +113,8 @@ func (m *CBusPointToMultiPointCommandNormal) GetAlpha() *Alpha {
 ///////////////////////////////////////////////////////////
 
 // NewCBusPointToMultiPointCommandNormal factory function for CBusPointToMultiPointCommandNormal
-func NewCBusPointToMultiPointCommandNormal(application ApplicationIdContainer, salData *SALData, crc *Checksum, peekAlpha byte, alpha *Alpha, peekedApplication byte, srchk bool) *CBusPointToMultiPointCommand {
-	child := &CBusPointToMultiPointCommandNormal{
+func NewCBusPointToMultiPointCommandNormal(application ApplicationIdContainer, salData *SALData, crc *Checksum, peekAlpha byte, alpha *Alpha, peekedApplication byte, srchk bool) *CBusPointToMultiPointCommandNormal {
+	_result := &CBusPointToMultiPointCommandNormal{
 		Application:                  application,
 		SalData:                      salData,
 		Crc:                          crc,
@@ -122,8 +122,8 @@ func NewCBusPointToMultiPointCommandNormal(application ApplicationIdContainer, s
 		Alpha:                        alpha,
 		CBusPointToMultiPointCommand: NewCBusPointToMultiPointCommand(peekedApplication, srchk),
 	}
-	child.Child = child
-	return child.CBusPointToMultiPointCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastCBusPointToMultiPointCommandNormal(structType interface{}) *CBusPointToMultiPointCommandNormal {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandStatus.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandStatus.go
index 01f6dc2..f7f6a81 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandStatus.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandStatus.go
@@ -106,16 +106,16 @@ func (m *CBusPointToMultiPointCommandStatus) GetAlpha() *Alpha {
 ///////////////////////////////////////////////////////////
 
 // NewCBusPointToMultiPointCommandStatus factory function for CBusPointToMultiPointCommandStatus
-func NewCBusPointToMultiPointCommandStatus(statusRequest *StatusRequest, crc *Checksum, peekAlpha byte, alpha *Alpha, peekedApplication byte, srchk bool) *CBusPointToMultiPointCommand {
-	child := &CBusPointToMultiPointCommandStatus{
+func NewCBusPointToMultiPointCommandStatus(statusRequest *StatusRequest, crc *Checksum, peekAlpha byte, alpha *Alpha, peekedApplication byte, srchk bool) *CBusPointToMultiPointCommandStatus {
+	_result := &CBusPointToMultiPointCommandStatus{
 		StatusRequest:                statusRequest,
 		Crc:                          crc,
 		PeekAlpha:                    peekAlpha,
 		Alpha:                        alpha,
 		CBusPointToMultiPointCommand: NewCBusPointToMultiPointCommand(peekedApplication, srchk),
 	}
-	child.Child = child
-	return child.CBusPointToMultiPointCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastCBusPointToMultiPointCommandStatus(structType interface{}) *CBusPointToMultiPointCommandStatus {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommand.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommand.go
index 0887d4e..54c0169 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommand.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommand.go
@@ -137,6 +137,9 @@ func CastCBusPointToPointCommand(structType interface{}) *CBusPointToPointComman
 	if casted, ok := structType.(*CBusPointToPointCommand); ok {
 		return casted
 	}
+	if casted, ok := structType.(ICBusPointToPointCommandChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandDirect.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandDirect.go
index d99c9fc..4de711a 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandDirect.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandDirect.go
@@ -84,13 +84,13 @@ func (m *CBusPointToPointCommandDirect) GetUnitAddress() *UnitAddress {
 ///////////////////////////////////////////////////////////
 
 // NewCBusPointToPointCommandDirect factory function for CBusPointToPointCommandDirect
-func NewCBusPointToPointCommandDirect(unitAddress *UnitAddress, bridgeAddressCountPeek uint16, calData *CALData, crc *Checksum, peekAlpha byte, alpha *Alpha, srchk bool) *CBusPointToPointCommand {
-	child := &CBusPointToPointCommandDirect{
+func NewCBusPointToPointCommandDirect(unitAddress *UnitAddress, bridgeAddressCountPeek uint16, calData *CALData, crc *Checksum, peekAlpha byte, alpha *Alpha, srchk bool) *CBusPointToPointCommandDirect {
+	_result := &CBusPointToPointCommandDirect{
 		UnitAddress:             unitAddress,
 		CBusPointToPointCommand: NewCBusPointToPointCommand(bridgeAddressCountPeek, calData, crc, peekAlpha, alpha, srchk),
 	}
-	child.Child = child
-	return child.CBusPointToPointCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastCBusPointToPointCommandDirect(structType interface{}) *CBusPointToPointCommandDirect {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandIndirect.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandIndirect.go
index a9bf3d5..294bf6e 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandIndirect.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandIndirect.go
@@ -97,15 +97,15 @@ func (m *CBusPointToPointCommandIndirect) GetUnitAddress() *UnitAddress {
 ///////////////////////////////////////////////////////////
 
 // NewCBusPointToPointCommandIndirect factory function for CBusPointToPointCommandIndirect
-func NewCBusPointToPointCommandIndirect(bridgeAddress *BridgeAddress, networkRoute *NetworkRoute, unitAddress *UnitAddress, bridgeAddressCountPeek uint16, calData *CALData, crc *Checksum, peekAlpha byte, alpha *Alpha, srchk bool) *CBusPointToPointCommand {
-	child := &CBusPointToPointCommandIndirect{
+func NewCBusPointToPointCommandIndirect(bridgeAddress *BridgeAddress, networkRoute *NetworkRoute, unitAddress *UnitAddress, bridgeAddressCountPeek uint16, calData *CALData, crc *Checksum, peekAlpha byte, alpha *Alpha, srchk bool) *CBusPointToPointCommandIndirect {
+	_result := &CBusPointToPointCommandIndirect{
 		BridgeAddress:           bridgeAddress,
 		NetworkRoute:            networkRoute,
 		UnitAddress:             unitAddress,
 		CBusPointToPointCommand: NewCBusPointToPointCommand(bridgeAddressCountPeek, calData, crc, peekAlpha, alpha, srchk),
 	}
-	child.Child = child
-	return child.CBusPointToPointCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastCBusPointToPointCommandIndirect(structType interface{}) *CBusPointToPointCommandIndirect {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointToMultipointCommand.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointToMultipointCommand.go
index d0160b1..4a1d1df 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointToMultipointCommand.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointToMultipointCommand.go
@@ -100,6 +100,9 @@ func CastCBusPointToPointToMultipointCommand(structType interface{}) *CBusPointT
 	if casted, ok := structType.(*CBusPointToPointToMultipointCommand); ok {
 		return casted
 	}
+	if casted, ok := structType.(ICBusPointToPointToMultipointCommandChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/Confirmation.go b/plc4go/internal/plc4go/cbus/readwrite/model/Confirmation.go
index 6974fbb..9be43df 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/Confirmation.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/Confirmation.go
@@ -85,6 +85,9 @@ func CastConfirmation(structType interface{}) *Confirmation {
 	if casted, ok := structType.(*Confirmation); ok {
 		return casted
 	}
+	if casted, ok := structType.(IConfirmationChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationReply.go
index 53b0883..3f17298 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationReply.go
@@ -76,13 +76,13 @@ func (m *ConfirmationReply) GetIsA() *Confirmation {
 ///////////////////////////////////////////////////////////
 
 // NewConfirmationReply factory function for ConfirmationReply
-func NewConfirmationReply(isA *Confirmation, magicByte byte) *Reply {
-	child := &ConfirmationReply{
+func NewConfirmationReply(isA *Confirmation, magicByte byte) *ConfirmationReply {
+	_result := &ConfirmationReply{
 		IsA:   isA,
 		Reply: NewReply(magicByte),
 	}
-	child.Child = child
-	return child.Reply
+	_result.Child = _result
+	return _result
 }
 
 func CastConfirmationReply(structType interface{}) *ConfirmationReply {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationSuccessful.go b/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationSuccessful.go
index ed3eb0d..e2f9d89 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationSuccessful.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationSuccessful.go
@@ -63,12 +63,12 @@ func (m *ConfirmationSuccessful) GetParent() *Confirmation {
 }
 
 // NewConfirmationSuccessful factory function for ConfirmationSuccessful
-func NewConfirmationSuccessful(alpha *Alpha) *Confirmation {
-	child := &ConfirmationSuccessful{
+func NewConfirmationSuccessful(alpha *Alpha) *ConfirmationSuccessful {
+	_result := &ConfirmationSuccessful{
 		Confirmation: NewConfirmation(alpha),
 	}
-	child.Child = child
-	return child.Confirmation
+	_result.Child = _result
+	return _result
 }
 
 func CastConfirmationSuccessful(structType interface{}) *ConfirmationSuccessful {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/ExclamationMarkReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/ExclamationMarkReply.go
index dc722d3..7615c07 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/ExclamationMarkReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/ExclamationMarkReply.go
@@ -76,13 +76,13 @@ func (m *ExclamationMarkReply) GetIsA() *ExclamationMark {
 ///////////////////////////////////////////////////////////
 
 // NewExclamationMarkReply factory function for ExclamationMarkReply
-func NewExclamationMarkReply(isA *ExclamationMark, magicByte byte) *Reply {
-	child := &ExclamationMarkReply{
+func NewExclamationMarkReply(isA *ExclamationMark, magicByte byte) *ExclamationMarkReply {
+	_result := &ExclamationMarkReply{
 		IsA:   isA,
 		Reply: NewReply(magicByte),
 	}
-	child.Child = child
-	return child.Reply
+	_result.Child = _result
+	return _result
 }
 
 func CastExclamationMarkReply(structType interface{}) *ExclamationMarkReply {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommand.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommand.go
index 0fb8a68..f519559 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommand.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommand.go
@@ -69,6 +69,9 @@ func CastIdentifyReplyCommand(structType interface{}) *IdentifyReplyCommand {
 	if casted, ok := structType.(*IdentifyReplyCommand); ok {
 		return casted
 	}
+	if casted, ok := structType.(IIdentifyReplyCommandChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandCurrentSenseLevels.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandCurrentSenseLevels.go
index c4a9611..8814a7e 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandCurrentSenseLevels.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandCurrentSenseLevels.go
@@ -61,12 +61,12 @@ func (m *IdentifyReplyCommandCurrentSenseLevels) GetParent() *IdentifyReplyComma
 }
 
 // NewIdentifyReplyCommandCurrentSenseLevels factory function for IdentifyReplyCommandCurrentSenseLevels
-func NewIdentifyReplyCommandCurrentSenseLevels() *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandCurrentSenseLevels{
+func NewIdentifyReplyCommandCurrentSenseLevels() *IdentifyReplyCommandCurrentSenseLevels {
+	_result := &IdentifyReplyCommandCurrentSenseLevels{
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandCurrentSenseLevels(structType interface{}) *IdentifyReplyCommandCurrentSenseLevels {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDSIStatus.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDSIStatus.go
index 8994649..a4014e8 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDSIStatus.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDSIStatus.go
@@ -141,8 +141,8 @@ func (m *IdentifyReplyCommandDSIStatus) GetDimmingUCRevisionNumber() byte {
 ///////////////////////////////////////////////////////////
 
 // NewIdentifyReplyCommandDSIStatus factory function for IdentifyReplyCommandDSIStatus
-func NewIdentifyReplyCommandDSIStatus(channelStatus1 ChannelStatus, channelStatus2 ChannelStatus, channelStatus3 ChannelStatus, channelStatus4 ChannelStatus, channelStatus5 ChannelStatus, channelStatus6 ChannelStatus, channelStatus7 ChannelStatus, channelStatus8 ChannelStatus, unitStatus UnitStatus, dimmingUCRevisionNumber byte) *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandDSIStatus{
+func NewIdentifyReplyCommandDSIStatus(channelStatus1 ChannelStatus, channelStatus2 ChannelStatus, channelStatus3 ChannelStatus, channelStatus4 ChannelStatus, channelStatus5 ChannelStatus, channelStatus6 ChannelStatus, channelStatus7 ChannelStatus, channelStatus8 ChannelStatus, unitStatus UnitStatus, dimmingUCRevisionNumber byte) *IdentifyReplyCommandDSIStatus {
+	_result := &IdentifyReplyCommandDSIStatus{
 		ChannelStatus1:          channelStatus1,
 		ChannelStatus2:          channelStatus2,
 		ChannelStatus3:          channelStatus3,
@@ -155,8 +155,8 @@ func NewIdentifyReplyCommandDSIStatus(channelStatus1 ChannelStatus, channelStatu
 		DimmingUCRevisionNumber: dimmingUCRevisionNumber,
 		IdentifyReplyCommand:    NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandDSIStatus(structType interface{}) *IdentifyReplyCommandDSIStatus {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDelays.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDelays.go
index e8760e6..fd7a176 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDelays.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDelays.go
@@ -61,12 +61,12 @@ func (m *IdentifyReplyCommandDelays) GetParent() *IdentifyReplyCommand {
 }
 
 // NewIdentifyReplyCommandDelays factory function for IdentifyReplyCommandDelays
-func NewIdentifyReplyCommandDelays() *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandDelays{
+func NewIdentifyReplyCommandDelays() *IdentifyReplyCommandDelays {
+	_result := &IdentifyReplyCommandDelays{
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandDelays(structType interface{}) *IdentifyReplyCommandDelays {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandExtendedDiagnosticSummary.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandExtendedDiagnosticSummary.go
index a9ab5e8..944eed9 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandExtendedDiagnosticSummary.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandExtendedDiagnosticSummary.go
@@ -206,8 +206,8 @@ func (m *IdentifyReplyCommandExtendedDiagnosticSummary) GetInstallationMMIError(
 ///////////////////////////////////////////////////////////
 
 // NewIdentifyReplyCommandExtendedDiagnosticSummary factory function for IdentifyReplyCommandExtendedDiagnosticSummary
-func NewIdentifyReplyCommandExtendedDiagnosticSummary(lowApplication ApplicationIdContainer, highApplication ApplicationIdContainer, area byte, crc uint16, serialNumber uint32, networkVoltage byte, outputUnit bool, enableChecksumAlarm bool, networkVoltageMarginal bool, networkVoltageLow bool, unitInLearnMode bool, microPowerReset bool, internalStackOverflow bool, commsTxError bool, microReset bool, EEDataError bool, EEChecksumError bool, EEWriteError bool, installationMMIError bool) *Ide [...]
-	child := &IdentifyReplyCommandExtendedDiagnosticSummary{
+func NewIdentifyReplyCommandExtendedDiagnosticSummary(lowApplication ApplicationIdContainer, highApplication ApplicationIdContainer, area byte, crc uint16, serialNumber uint32, networkVoltage byte, outputUnit bool, enableChecksumAlarm bool, networkVoltageMarginal bool, networkVoltageLow bool, unitInLearnMode bool, microPowerReset bool, internalStackOverflow bool, commsTxError bool, microReset bool, EEDataError bool, EEChecksumError bool, EEWriteError bool, installationMMIError bool) *Ide [...]
+	_result := &IdentifyReplyCommandExtendedDiagnosticSummary{
 		LowApplication:         lowApplication,
 		HighApplication:        highApplication,
 		Area:                   area,
@@ -229,8 +229,8 @@ func NewIdentifyReplyCommandExtendedDiagnosticSummary(lowApplication Application
 		InstallationMMIError:   installationMMIError,
 		IdentifyReplyCommand:   NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandExtendedDiagnosticSummary(structType interface{}) *IdentifyReplyCommandExtendedDiagnosticSummary {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareSummary.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareSummary.go
index ffd562a..b101daf 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareSummary.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareSummary.go
@@ -92,15 +92,15 @@ func (m *IdentifyReplyCommandFirmwareSummary) GetVersion() string {
 ///////////////////////////////////////////////////////////
 
 // NewIdentifyReplyCommandFirmwareSummary factory function for IdentifyReplyCommandFirmwareSummary
-func NewIdentifyReplyCommandFirmwareSummary(firmwareVersion string, unitServiceType byte, version string) *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandFirmwareSummary{
+func NewIdentifyReplyCommandFirmwareSummary(firmwareVersion string, unitServiceType byte, version string) *IdentifyReplyCommandFirmwareSummary {
+	_result := &IdentifyReplyCommandFirmwareSummary{
 		FirmwareVersion:      firmwareVersion,
 		UnitServiceType:      unitServiceType,
 		Version:              version,
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandFirmwareSummary(structType interface{}) *IdentifyReplyCommandFirmwareSummary {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareVersion.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareVersion.go
index 9e4bc8d..919caad 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareVersion.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareVersion.go
@@ -78,13 +78,13 @@ func (m *IdentifyReplyCommandFirmwareVersion) GetFirmwareVersion() string {
 ///////////////////////////////////////////////////////////
 
 // NewIdentifyReplyCommandFirmwareVersion factory function for IdentifyReplyCommandFirmwareVersion
-func NewIdentifyReplyCommandFirmwareVersion(firmwareVersion string) *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandFirmwareVersion{
+func NewIdentifyReplyCommandFirmwareVersion(firmwareVersion string) *IdentifyReplyCommandFirmwareVersion {
+	_result := &IdentifyReplyCommandFirmwareVersion{
 		FirmwareVersion:      firmwareVersion,
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandFirmwareVersion(structType interface{}) *IdentifyReplyCommandFirmwareVersion {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVPhysicalAddresses.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVPhysicalAddresses.go
index 55377fe..ed9b761 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVPhysicalAddresses.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVPhysicalAddresses.go
@@ -78,13 +78,13 @@ func (m *IdentifyReplyCommandGAVPhysicalAddresses) GetValues() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewIdentifyReplyCommandGAVPhysicalAddresses factory function for IdentifyReplyCommandGAVPhysicalAddresses
-func NewIdentifyReplyCommandGAVPhysicalAddresses(values []byte) *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandGAVPhysicalAddresses{
+func NewIdentifyReplyCommandGAVPhysicalAddresses(values []byte) *IdentifyReplyCommandGAVPhysicalAddresses {
+	_result := &IdentifyReplyCommandGAVPhysicalAddresses{
 		Values:               values,
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandGAVPhysicalAddresses(structType interface{}) *IdentifyReplyCommandGAVPhysicalAddresses {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesCurrent.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesCurrent.go
index 93f8d12..c7381ff 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesCurrent.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesCurrent.go
@@ -78,13 +78,13 @@ func (m *IdentifyReplyCommandGAVValuesCurrent) GetValues() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewIdentifyReplyCommandGAVValuesCurrent factory function for IdentifyReplyCommandGAVValuesCurrent
-func NewIdentifyReplyCommandGAVValuesCurrent(values []byte) *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandGAVValuesCurrent{
+func NewIdentifyReplyCommandGAVValuesCurrent(values []byte) *IdentifyReplyCommandGAVValuesCurrent {
+	_result := &IdentifyReplyCommandGAVValuesCurrent{
 		Values:               values,
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandGAVValuesCurrent(structType interface{}) *IdentifyReplyCommandGAVValuesCurrent {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesStored.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesStored.go
index 787ce95..c93a6d8 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesStored.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesStored.go
@@ -78,13 +78,13 @@ func (m *IdentifyReplyCommandGAVValuesStored) GetValues() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewIdentifyReplyCommandGAVValuesStored factory function for IdentifyReplyCommandGAVValuesStored
-func NewIdentifyReplyCommandGAVValuesStored(values []byte) *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandGAVValuesStored{
+func NewIdentifyReplyCommandGAVValuesStored(values []byte) *IdentifyReplyCommandGAVValuesStored {
+	_result := &IdentifyReplyCommandGAVValuesStored{
 		Values:               values,
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandGAVValuesStored(structType interface{}) *IdentifyReplyCommandGAVValuesStored {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandLogicalAssignment.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandLogicalAssignment.go
index 2bbc682..7b6a1b6 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandLogicalAssignment.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandLogicalAssignment.go
@@ -61,12 +61,12 @@ func (m *IdentifyReplyCommandLogicalAssignment) GetParent() *IdentifyReplyComman
 }
 
 // NewIdentifyReplyCommandLogicalAssignment factory function for IdentifyReplyCommandLogicalAssignment
-func NewIdentifyReplyCommandLogicalAssignment() *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandLogicalAssignment{
+func NewIdentifyReplyCommandLogicalAssignment() *IdentifyReplyCommandLogicalAssignment {
+	_result := &IdentifyReplyCommandLogicalAssignment{
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandLogicalAssignment(structType interface{}) *IdentifyReplyCommandLogicalAssignment {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandManufacturer.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandManufacturer.go
index bef84b8..2ab216a 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandManufacturer.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandManufacturer.go
@@ -78,13 +78,13 @@ func (m *IdentifyReplyCommandManufacturer) GetManufacturerName() string {
 ///////////////////////////////////////////////////////////
 
 // NewIdentifyReplyCommandManufacturer factory function for IdentifyReplyCommandManufacturer
-func NewIdentifyReplyCommandManufacturer(manufacturerName string) *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandManufacturer{
+func NewIdentifyReplyCommandManufacturer(manufacturerName string) *IdentifyReplyCommandManufacturer {
+	_result := &IdentifyReplyCommandManufacturer{
 		ManufacturerName:     manufacturerName,
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandManufacturer(structType interface{}) *IdentifyReplyCommandManufacturer {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMaximumLevels.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMaximumLevels.go
index 7c25dff..42fe892 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMaximumLevels.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMaximumLevels.go
@@ -61,12 +61,12 @@ func (m *IdentifyReplyCommandMaximumLevels) GetParent() *IdentifyReplyCommand {
 }
 
 // NewIdentifyReplyCommandMaximumLevels factory function for IdentifyReplyCommandMaximumLevels
-func NewIdentifyReplyCommandMaximumLevels() *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandMaximumLevels{
+func NewIdentifyReplyCommandMaximumLevels() *IdentifyReplyCommandMaximumLevels {
+	_result := &IdentifyReplyCommandMaximumLevels{
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandMaximumLevels(structType interface{}) *IdentifyReplyCommandMaximumLevels {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMinimumLevels.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMinimumLevels.go
index 810810e..1e8c638 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMinimumLevels.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMinimumLevels.go
@@ -61,12 +61,12 @@ func (m *IdentifyReplyCommandMinimumLevels) GetParent() *IdentifyReplyCommand {
 }
 
 // NewIdentifyReplyCommandMinimumLevels factory function for IdentifyReplyCommandMinimumLevels
-func NewIdentifyReplyCommandMinimumLevels() *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandMinimumLevels{
+func NewIdentifyReplyCommandMinimumLevels() *IdentifyReplyCommandMinimumLevels {
+	_result := &IdentifyReplyCommandMinimumLevels{
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandMinimumLevels(structType interface{}) *IdentifyReplyCommandMinimumLevels {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkTerminalLevels.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkTerminalLevels.go
index 3587662..39090c9 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkTerminalLevels.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkTerminalLevels.go
@@ -61,12 +61,12 @@ func (m *IdentifyReplyCommandNetworkTerminalLevels) GetParent() *IdentifyReplyCo
 }
 
 // NewIdentifyReplyCommandNetworkTerminalLevels factory function for IdentifyReplyCommandNetworkTerminalLevels
-func NewIdentifyReplyCommandNetworkTerminalLevels() *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandNetworkTerminalLevels{
+func NewIdentifyReplyCommandNetworkTerminalLevels() *IdentifyReplyCommandNetworkTerminalLevels {
+	_result := &IdentifyReplyCommandNetworkTerminalLevels{
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandNetworkTerminalLevels(structType interface{}) *IdentifyReplyCommandNetworkTerminalLevels {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkVoltage.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkVoltage.go
index 70f2f6f..2137624 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkVoltage.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkVoltage.go
@@ -90,14 +90,14 @@ func (m *IdentifyReplyCommandNetworkVoltage) GetVoltsDecimalPlace() string {
 ///////////////////////////////////////////////////////////
 
 // NewIdentifyReplyCommandNetworkVoltage factory function for IdentifyReplyCommandNetworkVoltage
-func NewIdentifyReplyCommandNetworkVoltage(volts string, voltsDecimalPlace string) *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandNetworkVoltage{
+func NewIdentifyReplyCommandNetworkVoltage(volts string, voltsDecimalPlace string) *IdentifyReplyCommandNetworkVoltage {
+	_result := &IdentifyReplyCommandNetworkVoltage{
 		Volts:                volts,
 		VoltsDecimalPlace:    voltsDecimalPlace,
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandNetworkVoltage(structType interface{}) *IdentifyReplyCommandNetworkVoltage {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandOutputUnitSummary.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandOutputUnitSummary.go
index 1b162a8..e2eb0ef 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandOutputUnitSummary.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandOutputUnitSummary.go
@@ -61,12 +61,12 @@ func (m *IdentifyReplyCommandOutputUnitSummary) GetParent() *IdentifyReplyComman
 }
 
 // NewIdentifyReplyCommandOutputUnitSummary factory function for IdentifyReplyCommandOutputUnitSummary
-func NewIdentifyReplyCommandOutputUnitSummary() *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandOutputUnitSummary{
+func NewIdentifyReplyCommandOutputUnitSummary() *IdentifyReplyCommandOutputUnitSummary {
+	_result := &IdentifyReplyCommandOutputUnitSummary{
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandOutputUnitSummary(structType interface{}) *IdentifyReplyCommandOutputUnitSummary {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandTerminalLevels.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandTerminalLevels.go
index fe97732..b96e6e1 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandTerminalLevels.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandTerminalLevels.go
@@ -61,12 +61,12 @@ func (m *IdentifyReplyCommandTerminalLevels) GetParent() *IdentifyReplyCommand {
 }
 
 // NewIdentifyReplyCommandTerminalLevels factory function for IdentifyReplyCommandTerminalLevels
-func NewIdentifyReplyCommandTerminalLevels() *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandTerminalLevels{
+func NewIdentifyReplyCommandTerminalLevels() *IdentifyReplyCommandTerminalLevels {
+	_result := &IdentifyReplyCommandTerminalLevels{
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandTerminalLevels(structType interface{}) *IdentifyReplyCommandTerminalLevels {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandType.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandType.go
index ccf6008..085849d 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandType.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandType.go
@@ -78,13 +78,13 @@ func (m *IdentifyReplyCommandType) GetUnitType() string {
 ///////////////////////////////////////////////////////////
 
 // NewIdentifyReplyCommandType factory function for IdentifyReplyCommandType
-func NewIdentifyReplyCommandType(unitType string) *IdentifyReplyCommand {
-	child := &IdentifyReplyCommandType{
+func NewIdentifyReplyCommandType(unitType string) *IdentifyReplyCommandType {
+	_result := &IdentifyReplyCommandType{
 		UnitType:             unitType,
 		IdentifyReplyCommand: NewIdentifyReplyCommand(),
 	}
-	child.Child = child
-	return child.IdentifyReplyCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastIdentifyReplyCommandType(structType interface{}) *IdentifyReplyCommandType {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSAL.go b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSAL.go
index bb6e464..0682bb1 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSAL.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSAL.go
@@ -96,6 +96,9 @@ func CastMonitoredSAL(structType interface{}) *MonitoredSAL {
 	if casted, ok := structType.(*MonitoredSAL); ok {
 		return casted
 	}
+	if casted, ok := structType.(IMonitoredSALChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALLongFormSmartMode.go b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALLongFormSmartMode.go
index ce69903..39c99b3 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALLongFormSmartMode.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALLongFormSmartMode.go
@@ -136,8 +136,8 @@ func (m *MonitoredSALLongFormSmartMode) GetIsUnitAddress() bool {
 ///////////////////////////////////////////////////////////
 
 // NewMonitoredSALLongFormSmartMode factory function for MonitoredSALLongFormSmartMode
-func NewMonitoredSALLongFormSmartMode(terminatingByte uint32, unitAddress *UnitAddress, bridgeAddress *BridgeAddress, serialInterfaceAddress *SerialInterfaceAddress, reservedByte *byte, replyNetwork *ReplyNetwork, salType byte, salData *SALData) *MonitoredSAL {
-	child := &MonitoredSALLongFormSmartMode{
+func NewMonitoredSALLongFormSmartMode(terminatingByte uint32, unitAddress *UnitAddress, bridgeAddress *BridgeAddress, serialInterfaceAddress *SerialInterfaceAddress, reservedByte *byte, replyNetwork *ReplyNetwork, salType byte, salData *SALData) *MonitoredSALLongFormSmartMode {
+	_result := &MonitoredSALLongFormSmartMode{
 		TerminatingByte:        terminatingByte,
 		UnitAddress:            unitAddress,
 		BridgeAddress:          bridgeAddress,
@@ -146,8 +146,8 @@ func NewMonitoredSALLongFormSmartMode(terminatingByte uint32, unitAddress *UnitA
 		ReplyNetwork:           replyNetwork,
 		MonitoredSAL:           NewMonitoredSAL(salType, salData),
 	}
-	child.Child = child
-	return child.MonitoredSAL
+	_result.Child = _result
+	return _result
 }
 
 func CastMonitoredSALLongFormSmartMode(structType interface{}) *MonitoredSALLongFormSmartMode {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALReply.go
index 9d2530f..acccb5f 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALReply.go
@@ -76,13 +76,13 @@ func (m *MonitoredSALReply) GetIsA() *MonitoredSAL {
 ///////////////////////////////////////////////////////////
 
 // NewMonitoredSALReply factory function for MonitoredSALReply
-func NewMonitoredSALReply(isA *MonitoredSAL, magicByte byte) *Reply {
-	child := &MonitoredSALReply{
+func NewMonitoredSALReply(isA *MonitoredSAL, magicByte byte) *MonitoredSALReply {
+	_result := &MonitoredSALReply{
 		IsA:   isA,
 		Reply: NewReply(magicByte),
 	}
-	child.Child = child
-	return child.Reply
+	_result.Child = _result
+	return _result
 }
 
 func CastMonitoredSALReply(structType interface{}) *MonitoredSALReply {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALShortFormBasicMode.go b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALShortFormBasicMode.go
index da6962e..6d8bcf9 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALShortFormBasicMode.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALShortFormBasicMode.go
@@ -106,8 +106,8 @@ func (m *MonitoredSALShortFormBasicMode) GetApplication() ApplicationIdContainer
 ///////////////////////////////////////////////////////////
 
 // NewMonitoredSALShortFormBasicMode factory function for MonitoredSALShortFormBasicMode
-func NewMonitoredSALShortFormBasicMode(counts byte, bridgeCount *BridgeCount, networkNumber *NetworkNumber, noCounts *byte, application ApplicationIdContainer, salType byte, salData *SALData) *MonitoredSAL {
-	child := &MonitoredSALShortFormBasicMode{
+func NewMonitoredSALShortFormBasicMode(counts byte, bridgeCount *BridgeCount, networkNumber *NetworkNumber, noCounts *byte, application ApplicationIdContainer, salType byte, salData *SALData) *MonitoredSALShortFormBasicMode {
+	_result := &MonitoredSALShortFormBasicMode{
 		Counts:        counts,
 		BridgeCount:   bridgeCount,
 		NetworkNumber: networkNumber,
@@ -115,8 +115,8 @@ func NewMonitoredSALShortFormBasicMode(counts byte, bridgeCount *BridgeCount, ne
 		Application:   application,
 		MonitoredSAL:  NewMonitoredSAL(salType, salData),
 	}
-	child.Child = child
-	return child.MonitoredSAL
+	_result.Child = _result
+	return _result
 }
 
 func CastMonitoredSALShortFormBasicMode(structType interface{}) *MonitoredSALShortFormBasicMode {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedCorruption.go b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedCorruption.go
index 1fc2578..928df91 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedCorruption.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedCorruption.go
@@ -63,12 +63,12 @@ func (m *NotTransmittedCorruption) GetParent() *Confirmation {
 }
 
 // NewNotTransmittedCorruption factory function for NotTransmittedCorruption
-func NewNotTransmittedCorruption(alpha *Alpha) *Confirmation {
-	child := &NotTransmittedCorruption{
+func NewNotTransmittedCorruption(alpha *Alpha) *NotTransmittedCorruption {
+	_result := &NotTransmittedCorruption{
 		Confirmation: NewConfirmation(alpha),
 	}
-	child.Child = child
-	return child.Confirmation
+	_result.Child = _result
+	return _result
 }
 
 func CastNotTransmittedCorruption(structType interface{}) *NotTransmittedCorruption {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedSyncLoss.go b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedSyncLoss.go
index 1206ead..72ee9ce 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedSyncLoss.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedSyncLoss.go
@@ -63,12 +63,12 @@ func (m *NotTransmittedSyncLoss) GetParent() *Confirmation {
 }
 
 // NewNotTransmittedSyncLoss factory function for NotTransmittedSyncLoss
-func NewNotTransmittedSyncLoss(alpha *Alpha) *Confirmation {
-	child := &NotTransmittedSyncLoss{
+func NewNotTransmittedSyncLoss(alpha *Alpha) *NotTransmittedSyncLoss {
+	_result := &NotTransmittedSyncLoss{
 		Confirmation: NewConfirmation(alpha),
 	}
-	child.Child = child
-	return child.Confirmation
+	_result.Child = _result
+	return _result
 }
 
 func CastNotTransmittedSyncLoss(structType interface{}) *NotTransmittedSyncLoss {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedToManyReTransmissions.go b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedToManyReTransmissions.go
index 70c5fc9..aa30fda 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedToManyReTransmissions.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedToManyReTransmissions.go
@@ -63,12 +63,12 @@ func (m *NotTransmittedToManyReTransmissions) GetParent() *Confirmation {
 }
 
 // NewNotTransmittedToManyReTransmissions factory function for NotTransmittedToManyReTransmissions
-func NewNotTransmittedToManyReTransmissions(alpha *Alpha) *Confirmation {
-	child := &NotTransmittedToManyReTransmissions{
+func NewNotTransmittedToManyReTransmissions(alpha *Alpha) *NotTransmittedToManyReTransmissions {
+	_result := &NotTransmittedToManyReTransmissions{
 		Confirmation: NewConfirmation(alpha),
 	}
-	child.Child = child
-	return child.Confirmation
+	_result.Child = _result
+	return _result
 }
 
 func CastNotTransmittedToManyReTransmissions(structType interface{}) *NotTransmittedToManyReTransmissions {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedTooLong.go b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedTooLong.go
index b28db52..b6e3362 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedTooLong.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedTooLong.go
@@ -63,12 +63,12 @@ func (m *NotTransmittedTooLong) GetParent() *Confirmation {
 }
 
 // NewNotTransmittedTooLong factory function for NotTransmittedTooLong
-func NewNotTransmittedTooLong(alpha *Alpha) *Confirmation {
-	child := &NotTransmittedTooLong{
+func NewNotTransmittedTooLong(alpha *Alpha) *NotTransmittedTooLong {
+	_result := &NotTransmittedTooLong{
 		Confirmation: NewConfirmation(alpha),
 	}
-	child.Child = child
-	return child.Confirmation
+	_result.Child = _result
+	return _result
 }
 
 func CastNotTransmittedTooLong(structType interface{}) *NotTransmittedTooLong {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/ParameterChangeReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/ParameterChangeReply.go
index 7cfe0c3..874b598 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/ParameterChangeReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/ParameterChangeReply.go
@@ -76,13 +76,13 @@ func (m *ParameterChangeReply) GetIsA() *ParameterChange {
 ///////////////////////////////////////////////////////////
 
 // NewParameterChangeReply factory function for ParameterChangeReply
-func NewParameterChangeReply(isA *ParameterChange, magicByte byte) *Reply {
-	child := &ParameterChangeReply{
+func NewParameterChangeReply(isA *ParameterChange, magicByte byte) *ParameterChangeReply {
+	_result := &ParameterChangeReply{
 		IsA:   isA,
 		Reply: NewReply(magicByte),
 	}
-	child.Child = child
-	return child.Reply
+	_result.Child = _result
+	return _result
 }
 
 func CastParameterChangeReply(structType interface{}) *ParameterChangeReply {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/PowerUpReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/PowerUpReply.go
index 2edea72..7a221fb 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/PowerUpReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/PowerUpReply.go
@@ -76,13 +76,13 @@ func (m *PowerUpReply) GetIsA() *PowerUp {
 ///////////////////////////////////////////////////////////
 
 // NewPowerUpReply factory function for PowerUpReply
-func NewPowerUpReply(isA *PowerUp, magicByte byte) *Reply {
-	child := &PowerUpReply{
+func NewPowerUpReply(isA *PowerUp, magicByte byte) *PowerUpReply {
+	_result := &PowerUpReply{
 		IsA:   isA,
 		Reply: NewReply(magicByte),
 	}
-	child.Child = child
-	return child.Reply
+	_result.Child = _result
+	return _result
 }
 
 func CastPowerUpReply(structType interface{}) *PowerUpReply {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/Reply.go b/plc4go/internal/plc4go/cbus/readwrite/model/Reply.go
index 2c48198..e2059da 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/Reply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/Reply.go
@@ -83,6 +83,9 @@ func CastReply(structType interface{}) *Reply {
 	if casted, ok := structType.(*Reply); ok {
 		return casted
 	}
+	if casted, ok := structType.(IReplyChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/SALData.go b/plc4go/internal/plc4go/cbus/readwrite/model/SALData.go
index 0004f06..22b39e8 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/SALData.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/SALData.go
@@ -97,6 +97,9 @@ func CastSALData(structType interface{}) *SALData {
 	if casted, ok := structType.(*SALData); ok {
 		return casted
 	}
+	if casted, ok := structType.(ISALDataChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOff.go b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOff.go
index 17d3d00..c6d0de0 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOff.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOff.go
@@ -76,13 +76,13 @@ func (m *SALDataOff) GetGroup() byte {
 ///////////////////////////////////////////////////////////
 
 // NewSALDataOff factory function for SALDataOff
-func NewSALDataOff(group byte, commandTypeContainer SALCommandTypeContainer) *SALData {
-	child := &SALDataOff{
+func NewSALDataOff(group byte, commandTypeContainer SALCommandTypeContainer) *SALDataOff {
+	_result := &SALDataOff{
 		Group:   group,
 		SALData: NewSALData(commandTypeContainer),
 	}
-	child.Child = child
-	return child.SALData
+	_result.Child = _result
+	return _result
 }
 
 func CastSALDataOff(structType interface{}) *SALDataOff {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOn.go b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOn.go
index ccd7713..56669bb 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOn.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOn.go
@@ -76,13 +76,13 @@ func (m *SALDataOn) GetGroup() byte {
 ///////////////////////////////////////////////////////////
 
 // NewSALDataOn factory function for SALDataOn
-func NewSALDataOn(group byte, commandTypeContainer SALCommandTypeContainer) *SALData {
-	child := &SALDataOn{
+func NewSALDataOn(group byte, commandTypeContainer SALCommandTypeContainer) *SALDataOn {
+	_result := &SALDataOn{
 		Group:   group,
 		SALData: NewSALData(commandTypeContainer),
 	}
-	child.Child = child
-	return child.SALData
+	_result.Child = _result
+	return _result
 }
 
 func CastSALDataOn(structType interface{}) *SALDataOn {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataRampToLevel.go b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataRampToLevel.go
index 74e969e..9b1ba51 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataRampToLevel.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataRampToLevel.go
@@ -83,14 +83,14 @@ func (m *SALDataRampToLevel) GetLevel() byte {
 ///////////////////////////////////////////////////////////
 
 // NewSALDataRampToLevel factory function for SALDataRampToLevel
-func NewSALDataRampToLevel(group byte, level byte, commandTypeContainer SALCommandTypeContainer) *SALData {
-	child := &SALDataRampToLevel{
+func NewSALDataRampToLevel(group byte, level byte, commandTypeContainer SALCommandTypeContainer) *SALDataRampToLevel {
+	_result := &SALDataRampToLevel{
 		Group:   group,
 		Level:   level,
 		SALData: NewSALData(commandTypeContainer),
 	}
-	child.Child = child
-	return child.SALData
+	_result.Child = _result
+	return _result
 }
 
 func CastSALDataRampToLevel(structType interface{}) *SALDataRampToLevel {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataTerminateRamp.go b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataTerminateRamp.go
index 16321e2..b4856f1 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataTerminateRamp.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataTerminateRamp.go
@@ -76,13 +76,13 @@ func (m *SALDataTerminateRamp) GetGroup() byte {
 ///////////////////////////////////////////////////////////
 
 // NewSALDataTerminateRamp factory function for SALDataTerminateRamp
-func NewSALDataTerminateRamp(group byte, commandTypeContainer SALCommandTypeContainer) *SALData {
-	child := &SALDataTerminateRamp{
+func NewSALDataTerminateRamp(group byte, commandTypeContainer SALCommandTypeContainer) *SALDataTerminateRamp {
+	_result := &SALDataTerminateRamp{
 		Group:   group,
 		SALData: NewSALData(commandTypeContainer),
 	}
-	child.Child = child
-	return child.SALData
+	_result.Child = _result
+	return _result
 }
 
 func CastSALDataTerminateRamp(structType interface{}) *SALDataTerminateRamp {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequest.go b/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequest.go
index 5d68cfc..90dd895 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequest.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequest.go
@@ -83,6 +83,9 @@ func CastStatusRequest(structType interface{}) *StatusRequest {
 	if casted, ok := structType.(*StatusRequest); ok {
 		return casted
 	}
+	if casted, ok := structType.(IStatusRequestChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestBinaryState.go b/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestBinaryState.go
index fffba19..7ec7cbf 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestBinaryState.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestBinaryState.go
@@ -77,13 +77,13 @@ func (m *StatusRequestBinaryState) GetApplication() byte {
 ///////////////////////////////////////////////////////////
 
 // NewStatusRequestBinaryState factory function for StatusRequestBinaryState
-func NewStatusRequestBinaryState(application byte, statusType byte) *StatusRequest {
-	child := &StatusRequestBinaryState{
+func NewStatusRequestBinaryState(application byte, statusType byte) *StatusRequestBinaryState {
+	_result := &StatusRequestBinaryState{
 		Application:   application,
 		StatusRequest: NewStatusRequest(statusType),
 	}
-	child.Child = child
-	return child.StatusRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastStatusRequestBinaryState(structType interface{}) *StatusRequestBinaryState {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestLevel.go b/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestLevel.go
index ee2fc88..3827134 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestLevel.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestLevel.go
@@ -84,14 +84,14 @@ func (m *StatusRequestLevel) GetStartingGroupAddressLabel() byte {
 ///////////////////////////////////////////////////////////
 
 // NewStatusRequestLevel factory function for StatusRequestLevel
-func NewStatusRequestLevel(application byte, startingGroupAddressLabel byte, statusType byte) *StatusRequest {
-	child := &StatusRequestLevel{
+func NewStatusRequestLevel(application byte, startingGroupAddressLabel byte, statusType byte) *StatusRequestLevel {
+	_result := &StatusRequestLevel{
 		Application:               application,
 		StartingGroupAddressLabel: startingGroupAddressLabel,
 		StatusRequest:             NewStatusRequest(statusType),
 	}
-	child.Child = child
-	return child.StatusRequest
+	_result.Child = _result
+	return _result
 }
 
 func CastStatusRequestLevel(structType interface{}) *StatusRequestLevel {
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1Command.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1Command.go
index 42892bd..3fc2669 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1Command.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1Command.go
@@ -92,6 +92,9 @@ func CastDF1Command(structType interface{}) *DF1Command {
 	if casted, ok := structType.(*DF1Command); ok {
 		return casted
 	}
+	if casted, ok := structType.(IDF1CommandChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1Symbol.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1Symbol.go
index b307bfc..dba2263 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1Symbol.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1Symbol.go
@@ -73,6 +73,9 @@ func CastDF1Symbol(structType interface{}) *DF1Symbol {
 	if casted, ok := structType.(*DF1Symbol); ok {
 		return casted
 	}
+	if casted, ok := structType.(IDF1SymbolChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrame.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrame.go
index 7b26f28..26a804e 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrame.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrame.go
@@ -97,15 +97,15 @@ func (m *DF1SymbolMessageFrame) GetCommand() *DF1Command {
 ///////////////////////////////////////////////////////////
 
 // NewDF1SymbolMessageFrame factory function for DF1SymbolMessageFrame
-func NewDF1SymbolMessageFrame(destinationAddress uint8, sourceAddress uint8, command *DF1Command) *DF1Symbol {
-	child := &DF1SymbolMessageFrame{
+func NewDF1SymbolMessageFrame(destinationAddress uint8, sourceAddress uint8, command *DF1Command) *DF1SymbolMessageFrame {
+	_result := &DF1SymbolMessageFrame{
 		DestinationAddress: destinationAddress,
 		SourceAddress:      sourceAddress,
 		Command:            command,
 		DF1Symbol:          NewDF1Symbol(),
 	}
-	child.Child = child
-	return child.DF1Symbol
+	_result.Child = _result
+	return _result
 }
 
 func CastDF1SymbolMessageFrame(structType interface{}) *DF1SymbolMessageFrame {
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameACK.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameACK.go
index 6d7748d..a291771 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameACK.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameACK.go
@@ -61,12 +61,12 @@ func (m *DF1SymbolMessageFrameACK) GetParent() *DF1Symbol {
 }
 
 // NewDF1SymbolMessageFrameACK factory function for DF1SymbolMessageFrameACK
-func NewDF1SymbolMessageFrameACK() *DF1Symbol {
-	child := &DF1SymbolMessageFrameACK{
+func NewDF1SymbolMessageFrameACK() *DF1SymbolMessageFrameACK {
+	_result := &DF1SymbolMessageFrameACK{
 		DF1Symbol: NewDF1Symbol(),
 	}
-	child.Child = child
-	return child.DF1Symbol
+	_result.Child = _result
+	return _result
 }
 
 func CastDF1SymbolMessageFrameACK(structType interface{}) *DF1SymbolMessageFrameACK {
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameNAK.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameNAK.go
index 9186432..25ada0b 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameNAK.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameNAK.go
@@ -61,12 +61,12 @@ func (m *DF1SymbolMessageFrameNAK) GetParent() *DF1Symbol {
 }
 
 // NewDF1SymbolMessageFrameNAK factory function for DF1SymbolMessageFrameNAK
-func NewDF1SymbolMessageFrameNAK() *DF1Symbol {
-	child := &DF1SymbolMessageFrameNAK{
+func NewDF1SymbolMessageFrameNAK() *DF1SymbolMessageFrameNAK {
+	_result := &DF1SymbolMessageFrameNAK{
 		DF1Symbol: NewDF1Symbol(),
 	}
-	child.Child = child
-	return child.DF1Symbol
+	_result.Child = _result
+	return _result
 }
 
 func CastDF1SymbolMessageFrameNAK(structType interface{}) *DF1SymbolMessageFrameNAK {
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadRequest.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadRequest.go
index 155d708..9332ea4 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadRequest.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadRequest.go
@@ -88,14 +88,14 @@ func (m *DF1UnprotectedReadRequest) GetSize() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewDF1UnprotectedReadRequest factory function for DF1UnprotectedReadRequest
-func NewDF1UnprotectedReadRequest(address uint16, size uint8, status uint8, transactionCounter uint16) *DF1Command {
-	child := &DF1UnprotectedReadRequest{
+func NewDF1UnprotectedReadRequest(address uint16, size uint8, status uint8, transactionCounter uint16) *DF1UnprotectedReadRequest {
+	_result := &DF1UnprotectedReadRequest{
 		Address:    address,
 		Size:       size,
 		DF1Command: NewDF1Command(status, transactionCounter),
 	}
-	child.Child = child
-	return child.DF1Command
+	_result.Child = _result
+	return _result
 }
 
 func CastDF1UnprotectedReadRequest(structType interface{}) *DF1UnprotectedReadRequest {
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadResponse.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadResponse.go
index 1ff0af3..72ca6fe 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadResponse.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadResponse.go
@@ -80,13 +80,13 @@ func (m *DF1UnprotectedReadResponse) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewDF1UnprotectedReadResponse factory function for DF1UnprotectedReadResponse
-func NewDF1UnprotectedReadResponse(data []byte, status uint8, transactionCounter uint16) *DF1Command {
-	child := &DF1UnprotectedReadResponse{
+func NewDF1UnprotectedReadResponse(data []byte, status uint8, transactionCounter uint16) *DF1UnprotectedReadResponse {
+	_result := &DF1UnprotectedReadResponse{
 		Data:       data,
 		DF1Command: NewDF1Command(status, transactionCounter),
 	}
-	child.Child = child
-	return child.DF1Command
+	_result.Child = _result
+	return _result
 }
 
 func CastDF1UnprotectedReadResponse(structType interface{}) *DF1UnprotectedReadResponse {
diff --git a/plc4go/internal/plc4go/eip/Reader.go b/plc4go/internal/plc4go/eip/Reader.go
index 114a063..43faabb 100644
--- a/plc4go/internal/plc4go/eip/Reader.go
+++ b/plc4go/internal/plc4go/eip/Reader.go
@@ -72,7 +72,7 @@ func (m *Reader) Read(readRequest model.PlcReadRequest) <-chan model.PlcReadRequ
 				}
 				return
 			}
-			request := readWriteModel.NewCipReadRequest(getRequestSize(tag), ansi, elements, 0)
+			request := readWriteModel.NewCipReadRequest(getRequestSize(tag), ansi, elements, 0).GetParent()
 			requestItems[i] = request
 		}
 		if len(requestItems) > 1 {
@@ -94,11 +94,11 @@ func (m *Reader) Read(readRequest model.PlcReadRequest) <-chan model.PlcReadRequ
 			pkt := readWriteModel.NewCipRRData(
 				readWriteModel.NewCipExchange(
 					readWriteModel.NewCipUnconnectedRequest(
-						readWriteModel.NewMultipleServiceRequest(data, 0),
+						readWriteModel.NewMultipleServiceRequest(data, 0).GetParent(),
 						m.configuration.backplane,
 						m.configuration.slot,
 						0,
-					),
+					).GetParent(),
 					0,
 				),
 				*m.sessionHandle,
@@ -184,7 +184,7 @@ func (m *Reader) Read(readRequest model.PlcReadRequest) <-chan model.PlcReadRequ
 						m.configuration.backplane,
 						m.configuration.slot,
 						0,
-					),
+					).GetParent(),
 					0,
 				),
 				*m.sessionHandle,
diff --git a/plc4go/internal/plc4go/eip/Writer.go b/plc4go/internal/plc4go/eip/Writer.go
index 633b3c7..0a3a49d 100644
--- a/plc4go/internal/plc4go/eip/Writer.go
+++ b/plc4go/internal/plc4go/eip/Writer.go
@@ -93,7 +93,7 @@ func (m Writer) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWriteR
 				}
 				return
 			}
-			items[i] = readWriteModel.NewCipWriteRequest(requestPathSize, ansi, field.GetType(), elements, data, 0)
+			items[i] = readWriteModel.NewCipWriteRequest(requestPathSize, ansi, field.GetType(), elements, data, 0).GetParent()
 		}
 
 		if len(items) == 1 {
@@ -106,7 +106,7 @@ func (m Writer) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWriteR
 						m.configuration.backplane,
 						m.configuration.slot,
 						0,
-					),
+					).GetParent(),
 					0,
 				),
 				*m.sessionHandle,
@@ -199,11 +199,11 @@ func (m Writer) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWriteR
 			pkt := readWriteModel.NewCipRRData(
 				readWriteModel.NewCipExchange(
 					readWriteModel.NewCipUnconnectedRequest(
-						readWriteModel.NewMultipleServiceRequest(data, 0),
+						readWriteModel.NewMultipleServiceRequest(data, 0).GetParent(),
 						m.configuration.backplane,
 						m.configuration.slot,
 						0,
-					),
+					).GetParent(),
 					0,
 				),
 				*m.sessionHandle,
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipRRData.go b/plc4go/internal/plc4go/eip/readwrite/model/CipRRData.go
index 5423cfc..75a3e9a 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipRRData.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipRRData.go
@@ -87,13 +87,13 @@ func (m *CipRRData) GetExchange() *CipExchange {
 ///////////////////////////////////////////////////////////
 
 // NewCipRRData factory function for CipRRData
-func NewCipRRData(exchange *CipExchange, sessionHandle uint32, status uint32, senderContext []uint8, options uint32, len uint16) *EipPacket {
-	child := &CipRRData{
+func NewCipRRData(exchange *CipExchange, sessionHandle uint32, status uint32, senderContext []uint8, options uint32, len uint16) *CipRRData {
+	_result := &CipRRData{
 		Exchange:  exchange,
 		EipPacket: NewEipPacket(sessionHandle, status, senderContext, options),
 	}
-	child.Child = child
-	return child.EipPacket
+	_result.Child = _result
+	return _result
 }
 
 func CastCipRRData(structType interface{}) *CipRRData {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipReadRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/CipReadRequest.go
index 882aae7..0477388 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipReadRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipReadRequest.go
@@ -95,15 +95,15 @@ func (m *CipReadRequest) GetElementNb() uint16 {
 ///////////////////////////////////////////////////////////
 
 // NewCipReadRequest factory function for CipReadRequest
-func NewCipReadRequest(requestPathSize int8, tag []byte, elementNb uint16, serviceLen uint16) *CipService {
-	child := &CipReadRequest{
+func NewCipReadRequest(requestPathSize int8, tag []byte, elementNb uint16, serviceLen uint16) *CipReadRequest {
+	_result := &CipReadRequest{
 		RequestPathSize: requestPathSize,
 		Tag:             tag,
 		ElementNb:       elementNb,
 		CipService:      NewCipService(serviceLen),
 	}
-	child.Child = child
-	return child.CipService
+	_result.Child = _result
+	return _result
 }
 
 func CastCipReadRequest(structType interface{}) *CipReadRequest {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipReadResponse.go b/plc4go/internal/plc4go/eip/readwrite/model/CipReadResponse.go
index 2218a6f..485c236 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipReadResponse.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipReadResponse.go
@@ -103,16 +103,16 @@ func (m *CipReadResponse) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewCipReadResponse factory function for CipReadResponse
-func NewCipReadResponse(status uint8, extStatus uint8, dataType CIPDataTypeCode, data []byte, serviceLen uint16) *CipService {
-	child := &CipReadResponse{
+func NewCipReadResponse(status uint8, extStatus uint8, dataType CIPDataTypeCode, data []byte, serviceLen uint16) *CipReadResponse {
+	_result := &CipReadResponse{
 		Status:     status,
 		ExtStatus:  extStatus,
 		DataType:   dataType,
 		Data:       data,
 		CipService: NewCipService(serviceLen),
 	}
-	child.Child = child
-	return child.CipService
+	_result.Child = _result
+	return _result
 }
 
 func CastCipReadResponse(structType interface{}) *CipReadResponse {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipService.go b/plc4go/internal/plc4go/eip/readwrite/model/CipService.go
index 5f24f0b..e8cd9f7 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipService.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipService.go
@@ -72,6 +72,9 @@ func CastCipService(structType interface{}) *CipService {
 	if casted, ok := structType.(*CipService); ok {
 		return casted
 	}
+	if casted, ok := structType.(ICipServiceChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipUnconnectedRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/CipUnconnectedRequest.go
index dfd0fa0..5a5e7e0 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipUnconnectedRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipUnconnectedRequest.go
@@ -100,15 +100,15 @@ func (m *CipUnconnectedRequest) GetSlot() int8 {
 ///////////////////////////////////////////////////////////
 
 // NewCipUnconnectedRequest factory function for CipUnconnectedRequest
-func NewCipUnconnectedRequest(unconnectedService *CipService, backPlane int8, slot int8, serviceLen uint16) *CipService {
-	child := &CipUnconnectedRequest{
+func NewCipUnconnectedRequest(unconnectedService *CipService, backPlane int8, slot int8, serviceLen uint16) *CipUnconnectedRequest {
+	_result := &CipUnconnectedRequest{
 		UnconnectedService: unconnectedService,
 		BackPlane:          backPlane,
 		Slot:               slot,
 		CipService:         NewCipService(serviceLen),
 	}
-	child.Child = child
-	return child.CipService
+	_result.Child = _result
+	return _result
 }
 
 func CastCipUnconnectedRequest(structType interface{}) *CipUnconnectedRequest {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipWriteRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/CipWriteRequest.go
index 00c1553..95a7706 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipWriteRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipWriteRequest.go
@@ -109,8 +109,8 @@ func (m *CipWriteRequest) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewCipWriteRequest factory function for CipWriteRequest
-func NewCipWriteRequest(requestPathSize int8, tag []byte, dataType CIPDataTypeCode, elementNb uint16, data []byte, serviceLen uint16) *CipService {
-	child := &CipWriteRequest{
+func NewCipWriteRequest(requestPathSize int8, tag []byte, dataType CIPDataTypeCode, elementNb uint16, data []byte, serviceLen uint16) *CipWriteRequest {
+	_result := &CipWriteRequest{
 		RequestPathSize: requestPathSize,
 		Tag:             tag,
 		DataType:        dataType,
@@ -118,8 +118,8 @@ func NewCipWriteRequest(requestPathSize int8, tag []byte, dataType CIPDataTypeCo
 		Data:            data,
 		CipService:      NewCipService(serviceLen),
 	}
-	child.Child = child
-	return child.CipService
+	_result.Child = _result
+	return _result
 }
 
 func CastCipWriteRequest(structType interface{}) *CipWriteRequest {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipWriteResponse.go b/plc4go/internal/plc4go/eip/readwrite/model/CipWriteResponse.go
index 1762973..6f358ef 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipWriteResponse.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipWriteResponse.go
@@ -89,14 +89,14 @@ func (m *CipWriteResponse) GetExtStatus() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewCipWriteResponse factory function for CipWriteResponse
-func NewCipWriteResponse(status uint8, extStatus uint8, serviceLen uint16) *CipService {
-	child := &CipWriteResponse{
+func NewCipWriteResponse(status uint8, extStatus uint8, serviceLen uint16) *CipWriteResponse {
+	_result := &CipWriteResponse{
 		Status:     status,
 		ExtStatus:  extStatus,
 		CipService: NewCipService(serviceLen),
 	}
-	child.Child = child
-	return child.CipService
+	_result.Child = _result
+	return _result
 }
 
 func CastCipWriteResponse(structType interface{}) *CipWriteResponse {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/EipConnectionRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/EipConnectionRequest.go
index 18a1551..6fc7573 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/EipConnectionRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/EipConnectionRequest.go
@@ -72,12 +72,12 @@ func (m *EipConnectionRequest) GetParent() *EipPacket {
 }
 
 // NewEipConnectionRequest factory function for EipConnectionRequest
-func NewEipConnectionRequest(sessionHandle uint32, status uint32, senderContext []uint8, options uint32) *EipPacket {
-	child := &EipConnectionRequest{
+func NewEipConnectionRequest(sessionHandle uint32, status uint32, senderContext []uint8, options uint32) *EipConnectionRequest {
+	_result := &EipConnectionRequest{
 		EipPacket: NewEipPacket(sessionHandle, status, senderContext, options),
 	}
-	child.Child = child
-	return child.EipPacket
+	_result.Child = _result
+	return _result
 }
 
 func CastEipConnectionRequest(structType interface{}) *EipConnectionRequest {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/EipDisconnectRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/EipDisconnectRequest.go
index dfb377d..28a9b90 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/EipDisconnectRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/EipDisconnectRequest.go
@@ -66,12 +66,12 @@ func (m *EipDisconnectRequest) GetParent() *EipPacket {
 }
 
 // NewEipDisconnectRequest factory function for EipDisconnectRequest
-func NewEipDisconnectRequest(sessionHandle uint32, status uint32, senderContext []uint8, options uint32) *EipPacket {
-	child := &EipDisconnectRequest{
+func NewEipDisconnectRequest(sessionHandle uint32, status uint32, senderContext []uint8, options uint32) *EipDisconnectRequest {
+	_result := &EipDisconnectRequest{
 		EipPacket: NewEipPacket(sessionHandle, status, senderContext, options),
 	}
-	child.Child = child
-	return child.EipPacket
+	_result.Child = _result
+	return _result
 }
 
 func CastEipDisconnectRequest(structType interface{}) *EipDisconnectRequest {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/EipPacket.go b/plc4go/internal/plc4go/eip/readwrite/model/EipPacket.go
index aeda675..d561bd8 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/EipPacket.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/EipPacket.go
@@ -106,6 +106,9 @@ func CastEipPacket(structType interface{}) *EipPacket {
 	if casted, ok := structType.(*EipPacket); ok {
 		return casted
 	}
+	if casted, ok := structType.(IEipPacketChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceRequest.go
index 6c4ade2..67aba9c 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceRequest.go
@@ -86,13 +86,13 @@ func (m *MultipleServiceRequest) GetData() *Services {
 ///////////////////////////////////////////////////////////
 
 // NewMultipleServiceRequest factory function for MultipleServiceRequest
-func NewMultipleServiceRequest(data *Services, serviceLen uint16) *CipService {
-	child := &MultipleServiceRequest{
+func NewMultipleServiceRequest(data *Services, serviceLen uint16) *MultipleServiceRequest {
+	_result := &MultipleServiceRequest{
 		Data:       data,
 		CipService: NewCipService(serviceLen),
 	}
-	child.Child = child
-	return child.CipService
+	_result.Child = _result
+	return _result
 }
 
 func CastMultipleServiceRequest(structType interface{}) *MultipleServiceRequest {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceResponse.go b/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceResponse.go
index 1ec3ed4..e037963 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceResponse.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceResponse.go
@@ -110,8 +110,8 @@ func (m *MultipleServiceResponse) GetServicesData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewMultipleServiceResponse factory function for MultipleServiceResponse
-func NewMultipleServiceResponse(status uint8, extStatus uint8, serviceNb uint16, offsets []uint16, servicesData []byte, serviceLen uint16) *CipService {
-	child := &MultipleServiceResponse{
+func NewMultipleServiceResponse(status uint8, extStatus uint8, serviceNb uint16, offsets []uint16, servicesData []byte, serviceLen uint16) *MultipleServiceResponse {
+	_result := &MultipleServiceResponse{
 		Status:       status,
 		ExtStatus:    extStatus,
 		ServiceNb:    serviceNb,
@@ -119,8 +119,8 @@ func NewMultipleServiceResponse(status uint8, extStatus uint8, serviceNb uint16,
 		ServicesData: servicesData,
 		CipService:   NewCipService(serviceLen),
 	}
-	child.Child = child
-	return child.CipService
+	_result.Child = _result
+	return _result
 }
 
 func CastMultipleServiceResponse(structType interface{}) *MultipleServiceResponse {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommand.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommand.go
index d95a358..993bfe4 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommand.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommand.go
@@ -72,6 +72,9 @@ func CastFirmataCommand(structType interface{}) *FirmataCommand {
 	if casted, ok := structType.(*FirmataCommand); ok {
 		return casted
 	}
+	if casted, ok := structType.(IFirmataCommandChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandProtocolVersion.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandProtocolVersion.go
index e9f32ce..fe6d23f 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandProtocolVersion.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandProtocolVersion.go
@@ -88,14 +88,14 @@ func (m *FirmataCommandProtocolVersion) GetMinorVersion() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewFirmataCommandProtocolVersion factory function for FirmataCommandProtocolVersion
-func NewFirmataCommandProtocolVersion(majorVersion uint8, minorVersion uint8, response bool) *FirmataCommand {
-	child := &FirmataCommandProtocolVersion{
+func NewFirmataCommandProtocolVersion(majorVersion uint8, minorVersion uint8, response bool) *FirmataCommandProtocolVersion {
+	_result := &FirmataCommandProtocolVersion{
 		MajorVersion:   majorVersion,
 		MinorVersion:   minorVersion,
 		FirmataCommand: NewFirmataCommand(response),
 	}
-	child.Child = child
-	return child.FirmataCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastFirmataCommandProtocolVersion(structType interface{}) *FirmataCommandProtocolVersion {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetDigitalPinValue.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetDigitalPinValue.go
index ee7a580..692a529 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetDigitalPinValue.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetDigitalPinValue.go
@@ -89,14 +89,14 @@ func (m *FirmataCommandSetDigitalPinValue) GetOn() bool {
 ///////////////////////////////////////////////////////////
 
 // NewFirmataCommandSetDigitalPinValue factory function for FirmataCommandSetDigitalPinValue
-func NewFirmataCommandSetDigitalPinValue(pin uint8, on bool, response bool) *FirmataCommand {
-	child := &FirmataCommandSetDigitalPinValue{
+func NewFirmataCommandSetDigitalPinValue(pin uint8, on bool, response bool) *FirmataCommandSetDigitalPinValue {
+	_result := &FirmataCommandSetDigitalPinValue{
 		Pin:            pin,
 		On:             on,
 		FirmataCommand: NewFirmataCommand(response),
 	}
-	child.Child = child
-	return child.FirmataCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastFirmataCommandSetDigitalPinValue(structType interface{}) *FirmataCommandSetDigitalPinValue {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetPinMode.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetPinMode.go
index 8c8e271..e563442 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetPinMode.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetPinMode.go
@@ -88,14 +88,14 @@ func (m *FirmataCommandSetPinMode) GetMode() PinMode {
 ///////////////////////////////////////////////////////////
 
 // NewFirmataCommandSetPinMode factory function for FirmataCommandSetPinMode
-func NewFirmataCommandSetPinMode(pin uint8, mode PinMode, response bool) *FirmataCommand {
-	child := &FirmataCommandSetPinMode{
+func NewFirmataCommandSetPinMode(pin uint8, mode PinMode, response bool) *FirmataCommandSetPinMode {
+	_result := &FirmataCommandSetPinMode{
 		Pin:            pin,
 		Mode:           mode,
 		FirmataCommand: NewFirmataCommand(response),
 	}
-	child.Child = child
-	return child.FirmataCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastFirmataCommandSetPinMode(structType interface{}) *FirmataCommandSetPinMode {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSysex.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSysex.go
index 7c59b9d..292db8d 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSysex.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSysex.go
@@ -82,13 +82,13 @@ func (m *FirmataCommandSysex) GetCommand() *SysexCommand {
 ///////////////////////////////////////////////////////////
 
 // NewFirmataCommandSysex factory function for FirmataCommandSysex
-func NewFirmataCommandSysex(command *SysexCommand, response bool) *FirmataCommand {
-	child := &FirmataCommandSysex{
+func NewFirmataCommandSysex(command *SysexCommand, response bool) *FirmataCommandSysex {
+	_result := &FirmataCommandSysex{
 		Command:        command,
 		FirmataCommand: NewFirmataCommand(response),
 	}
-	child.Child = child
-	return child.FirmataCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastFirmataCommandSysex(structType interface{}) *FirmataCommandSysex {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSystemReset.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSystemReset.go
index fe0f58d..a2ddbbe 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSystemReset.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSystemReset.go
@@ -64,12 +64,12 @@ func (m *FirmataCommandSystemReset) GetParent() *FirmataCommand {
 }
 
 // NewFirmataCommandSystemReset factory function for FirmataCommandSystemReset
-func NewFirmataCommandSystemReset(response bool) *FirmataCommand {
-	child := &FirmataCommandSystemReset{
+func NewFirmataCommandSystemReset(response bool) *FirmataCommandSystemReset {
+	_result := &FirmataCommandSystemReset{
 		FirmataCommand: NewFirmataCommand(response),
 	}
-	child.Child = child
-	return child.FirmataCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastFirmataCommandSystemReset(structType interface{}) *FirmataCommandSystemReset {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessage.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessage.go
index ac9aba9..3f0eea6 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessage.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessage.go
@@ -72,6 +72,9 @@ func CastFirmataMessage(structType interface{}) *FirmataMessage {
 	if casted, ok := structType.(*FirmataMessage); ok {
 		return casted
 	}
+	if casted, ok := structType.(IFirmataMessageChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageAnalogIO.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageAnalogIO.go
index de341cc..ad10348 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageAnalogIO.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageAnalogIO.go
@@ -88,14 +88,14 @@ func (m *FirmataMessageAnalogIO) GetData() []int8 {
 ///////////////////////////////////////////////////////////
 
 // NewFirmataMessageAnalogIO factory function for FirmataMessageAnalogIO
-func NewFirmataMessageAnalogIO(pin uint8, data []int8, response bool) *FirmataMessage {
-	child := &FirmataMessageAnalogIO{
+func NewFirmataMessageAnalogIO(pin uint8, data []int8, response bool) *FirmataMessageAnalogIO {
+	_result := &FirmataMessageAnalogIO{
 		Pin:            pin,
 		Data:           data,
 		FirmataMessage: NewFirmataMessage(response),
 	}
-	child.Child = child
-	return child.FirmataMessage
+	_result.Child = _result
+	return _result
 }
 
 func CastFirmataMessageAnalogIO(structType interface{}) *FirmataMessageAnalogIO {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageCommand.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageCommand.go
index 6e377a7..407ae90 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageCommand.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageCommand.go
@@ -81,13 +81,13 @@ func (m *FirmataMessageCommand) GetCommand() *FirmataCommand {
 ///////////////////////////////////////////////////////////
 
 // NewFirmataMessageCommand factory function for FirmataMessageCommand
-func NewFirmataMessageCommand(command *FirmataCommand, response bool) *FirmataMessage {
-	child := &FirmataMessageCommand{
+func NewFirmataMessageCommand(command *FirmataCommand, response bool) *FirmataMessageCommand {
+	_result := &FirmataMessageCommand{
 		Command:        command,
 		FirmataMessage: NewFirmataMessage(response),
 	}
-	child.Child = child
-	return child.FirmataMessage
+	_result.Child = _result
+	return _result
 }
 
 func CastFirmataMessageCommand(structType interface{}) *FirmataMessageCommand {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageDigitalIO.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageDigitalIO.go
index 9aa386d..e120fee 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageDigitalIO.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageDigitalIO.go
@@ -88,14 +88,14 @@ func (m *FirmataMessageDigitalIO) GetData() []int8 {
 ///////////////////////////////////////////////////////////
 
 // NewFirmataMessageDigitalIO factory function for FirmataMessageDigitalIO
-func NewFirmataMessageDigitalIO(pinBlock uint8, data []int8, response bool) *FirmataMessage {
-	child := &FirmataMessageDigitalIO{
+func NewFirmataMessageDigitalIO(pinBlock uint8, data []int8, response bool) *FirmataMessageDigitalIO {
+	_result := &FirmataMessageDigitalIO{
 		PinBlock:       pinBlock,
 		Data:           data,
 		FirmataMessage: NewFirmataMessage(response),
 	}
-	child.Child = child
-	return child.FirmataMessage
+	_result.Child = _result
+	return _result
 }
 
 func CastFirmataMessageDigitalIO(structType interface{}) *FirmataMessageDigitalIO {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeAnalogPinValue.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeAnalogPinValue.go
index 11450fe..de5de1b 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeAnalogPinValue.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeAnalogPinValue.go
@@ -89,14 +89,14 @@ func (m *FirmataMessageSubscribeAnalogPinValue) GetEnable() bool {
 ///////////////////////////////////////////////////////////
 
 // NewFirmataMessageSubscribeAnalogPinValue factory function for FirmataMessageSubscribeAnalogPinValue
-func NewFirmataMessageSubscribeAnalogPinValue(pin uint8, enable bool, response bool) *FirmataMessage {
-	child := &FirmataMessageSubscribeAnalogPinValue{
+func NewFirmataMessageSubscribeAnalogPinValue(pin uint8, enable bool, response bool) *FirmataMessageSubscribeAnalogPinValue {
+	_result := &FirmataMessageSubscribeAnalogPinValue{
 		Pin:            pin,
 		Enable:         enable,
 		FirmataMessage: NewFirmataMessage(response),
 	}
-	child.Child = child
-	return child.FirmataMessage
+	_result.Child = _result
+	return _result
 }
 
 func CastFirmataMessageSubscribeAnalogPinValue(structType interface{}) *FirmataMessageSubscribeAnalogPinValue {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeDigitalPinValue.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeDigitalPinValue.go
index cfcd157..6c04205 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeDigitalPinValue.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeDigitalPinValue.go
@@ -89,14 +89,14 @@ func (m *FirmataMessageSubscribeDigitalPinValue) GetEnable() bool {
 ///////////////////////////////////////////////////////////
 
 // NewFirmataMessageSubscribeDigitalPinValue factory function for FirmataMessageSubscribeDigitalPinValue
-func NewFirmataMessageSubscribeDigitalPinValue(pin uint8, enable bool, response bool) *FirmataMessage {
-	child := &FirmataMessageSubscribeDigitalPinValue{
+func NewFirmataMessageSubscribeDigitalPinValue(pin uint8, enable bool, response bool) *FirmataMessageSubscribeDigitalPinValue {
+	_result := &FirmataMessageSubscribeDigitalPinValue{
 		Pin:            pin,
 		Enable:         enable,
 		FirmataMessage: NewFirmataMessage(response),
 	}
-	child.Child = child
-	return child.FirmataMessage
+	_result.Child = _result
+	return _result
 }
 
 func CastFirmataMessageSubscribeDigitalPinValue(structType interface{}) *FirmataMessageSubscribeDigitalPinValue {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommand.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommand.go
index faa4dc9..5ce558c 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommand.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommand.go
@@ -71,6 +71,9 @@ func CastSysexCommand(structType interface{}) *SysexCommand {
 	if casted, ok := structType.(*SysexCommand); ok {
 		return casted
 	}
+	if casted, ok := structType.(ISysexCommandChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryRequest.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryRequest.go
index 8832992..9ffb5ba 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryRequest.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryRequest.go
@@ -65,12 +65,12 @@ func (m *SysexCommandAnalogMappingQueryRequest) GetParent() *SysexCommand {
 }
 
 // NewSysexCommandAnalogMappingQueryRequest factory function for SysexCommandAnalogMappingQueryRequest
-func NewSysexCommandAnalogMappingQueryRequest() *SysexCommand {
-	child := &SysexCommandAnalogMappingQueryRequest{
+func NewSysexCommandAnalogMappingQueryRequest() *SysexCommandAnalogMappingQueryRequest {
+	_result := &SysexCommandAnalogMappingQueryRequest{
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandAnalogMappingQueryRequest(structType interface{}) *SysexCommandAnalogMappingQueryRequest {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryResponse.go
index 3ad2acb..253546d 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryResponse.go
@@ -82,13 +82,13 @@ func (m *SysexCommandAnalogMappingQueryResponse) GetPin() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewSysexCommandAnalogMappingQueryResponse factory function for SysexCommandAnalogMappingQueryResponse
-func NewSysexCommandAnalogMappingQueryResponse(pin uint8) *SysexCommand {
-	child := &SysexCommandAnalogMappingQueryResponse{
+func NewSysexCommandAnalogMappingQueryResponse(pin uint8) *SysexCommandAnalogMappingQueryResponse {
+	_result := &SysexCommandAnalogMappingQueryResponse{
 		Pin:          pin,
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandAnalogMappingQueryResponse(structType interface{}) *SysexCommandAnalogMappingQueryResponse {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingResponse.go
index 4a8b5f9..f0dc705 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingResponse.go
@@ -65,12 +65,12 @@ func (m *SysexCommandAnalogMappingResponse) GetParent() *SysexCommand {
 }
 
 // NewSysexCommandAnalogMappingResponse factory function for SysexCommandAnalogMappingResponse
-func NewSysexCommandAnalogMappingResponse() *SysexCommand {
-	child := &SysexCommandAnalogMappingResponse{
+func NewSysexCommandAnalogMappingResponse() *SysexCommandAnalogMappingResponse {
+	_result := &SysexCommandAnalogMappingResponse{
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandAnalogMappingResponse(structType interface{}) *SysexCommandAnalogMappingResponse {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityQuery.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityQuery.go
index 0b8a84d..268e120 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityQuery.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityQuery.go
@@ -65,12 +65,12 @@ func (m *SysexCommandCapabilityQuery) GetParent() *SysexCommand {
 }
 
 // NewSysexCommandCapabilityQuery factory function for SysexCommandCapabilityQuery
-func NewSysexCommandCapabilityQuery() *SysexCommand {
-	child := &SysexCommandCapabilityQuery{
+func NewSysexCommandCapabilityQuery() *SysexCommandCapabilityQuery {
+	_result := &SysexCommandCapabilityQuery{
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandCapabilityQuery(structType interface{}) *SysexCommandCapabilityQuery {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityResponse.go
index 59a8a95..ebd080e 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityResponse.go
@@ -65,12 +65,12 @@ func (m *SysexCommandCapabilityResponse) GetParent() *SysexCommand {
 }
 
 // NewSysexCommandCapabilityResponse factory function for SysexCommandCapabilityResponse
-func NewSysexCommandCapabilityResponse() *SysexCommand {
-	child := &SysexCommandCapabilityResponse{
+func NewSysexCommandCapabilityResponse() *SysexCommandCapabilityResponse {
+	_result := &SysexCommandCapabilityResponse{
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandCapabilityResponse(structType interface{}) *SysexCommandCapabilityResponse {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedAnalog.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedAnalog.go
index e25168c..8f9fdea 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedAnalog.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedAnalog.go
@@ -65,12 +65,12 @@ func (m *SysexCommandExtendedAnalog) GetParent() *SysexCommand {
 }
 
 // NewSysexCommandExtendedAnalog factory function for SysexCommandExtendedAnalog
-func NewSysexCommandExtendedAnalog() *SysexCommand {
-	child := &SysexCommandExtendedAnalog{
+func NewSysexCommandExtendedAnalog() *SysexCommandExtendedAnalog {
+	_result := &SysexCommandExtendedAnalog{
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandExtendedAnalog(structType interface{}) *SysexCommandExtendedAnalog {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedId.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedId.go
index 43a6ffa..2663622 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedId.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedId.go
@@ -82,13 +82,13 @@ func (m *SysexCommandExtendedId) GetId() []int8 {
 ///////////////////////////////////////////////////////////
 
 // NewSysexCommandExtendedId factory function for SysexCommandExtendedId
-func NewSysexCommandExtendedId(id []int8) *SysexCommand {
-	child := &SysexCommandExtendedId{
+func NewSysexCommandExtendedId(id []int8) *SysexCommandExtendedId {
+	_result := &SysexCommandExtendedId{
 		Id:           id,
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandExtendedId(structType interface{}) *SysexCommandExtendedId {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateQuery.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateQuery.go
index 93c2104..f048464 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateQuery.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateQuery.go
@@ -82,13 +82,13 @@ func (m *SysexCommandPinStateQuery) GetPin() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewSysexCommandPinStateQuery factory function for SysexCommandPinStateQuery
-func NewSysexCommandPinStateQuery(pin uint8) *SysexCommand {
-	child := &SysexCommandPinStateQuery{
+func NewSysexCommandPinStateQuery(pin uint8) *SysexCommandPinStateQuery {
+	_result := &SysexCommandPinStateQuery{
 		Pin:          pin,
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandPinStateQuery(structType interface{}) *SysexCommandPinStateQuery {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateResponse.go
index 09bfeaa..4ab34d7 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateResponse.go
@@ -96,15 +96,15 @@ func (m *SysexCommandPinStateResponse) GetPinState() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewSysexCommandPinStateResponse factory function for SysexCommandPinStateResponse
-func NewSysexCommandPinStateResponse(pin uint8, pinMode uint8, pinState uint8) *SysexCommand {
-	child := &SysexCommandPinStateResponse{
+func NewSysexCommandPinStateResponse(pin uint8, pinMode uint8, pinState uint8) *SysexCommandPinStateResponse {
+	_result := &SysexCommandPinStateResponse{
 		Pin:          pin,
 		PinMode:      pinMode,
 		PinState:     pinState,
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandPinStateResponse(structType interface{}) *SysexCommandPinStateResponse {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareRequest.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareRequest.go
index e72f7a0..8ea13bf 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareRequest.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareRequest.go
@@ -65,12 +65,12 @@ func (m *SysexCommandReportFirmwareRequest) GetParent() *SysexCommand {
 }
 
 // NewSysexCommandReportFirmwareRequest factory function for SysexCommandReportFirmwareRequest
-func NewSysexCommandReportFirmwareRequest() *SysexCommand {
-	child := &SysexCommandReportFirmwareRequest{
+func NewSysexCommandReportFirmwareRequest() *SysexCommandReportFirmwareRequest {
+	_result := &SysexCommandReportFirmwareRequest{
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandReportFirmwareRequest(structType interface{}) *SysexCommandReportFirmwareRequest {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareResponse.go
index ad64c1b..28f02ee 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareResponse.go
@@ -96,15 +96,15 @@ func (m *SysexCommandReportFirmwareResponse) GetFileName() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewSysexCommandReportFirmwareResponse factory function for SysexCommandReportFirmwareResponse
-func NewSysexCommandReportFirmwareResponse(majorVersion uint8, minorVersion uint8, fileName []byte) *SysexCommand {
-	child := &SysexCommandReportFirmwareResponse{
+func NewSysexCommandReportFirmwareResponse(majorVersion uint8, minorVersion uint8, fileName []byte) *SysexCommandReportFirmwareResponse {
+	_result := &SysexCommandReportFirmwareResponse{
 		MajorVersion: majorVersion,
 		MinorVersion: minorVersion,
 		FileName:     fileName,
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandReportFirmwareResponse(structType interface{}) *SysexCommandReportFirmwareResponse {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSamplingInterval.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSamplingInterval.go
index 2dbdc78..6be3fa7 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSamplingInterval.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSamplingInterval.go
@@ -65,12 +65,12 @@ func (m *SysexCommandSamplingInterval) GetParent() *SysexCommand {
 }
 
 // NewSysexCommandSamplingInterval factory function for SysexCommandSamplingInterval
-func NewSysexCommandSamplingInterval() *SysexCommand {
-	child := &SysexCommandSamplingInterval{
+func NewSysexCommandSamplingInterval() *SysexCommandSamplingInterval {
+	_result := &SysexCommandSamplingInterval{
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandSamplingInterval(structType interface{}) *SysexCommandSamplingInterval {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandStringData.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandStringData.go
index 6d107fc..dbf4d5d 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandStringData.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandStringData.go
@@ -65,12 +65,12 @@ func (m *SysexCommandStringData) GetParent() *SysexCommand {
 }
 
 // NewSysexCommandStringData factory function for SysexCommandStringData
-func NewSysexCommandStringData() *SysexCommand {
-	child := &SysexCommandStringData{
+func NewSysexCommandStringData() *SysexCommandStringData {
+	_result := &SysexCommandStringData{
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandStringData(structType interface{}) *SysexCommandStringData {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexNonRealtime.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexNonRealtime.go
index 5035170..8ebffd6 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexNonRealtime.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexNonRealtime.go
@@ -65,12 +65,12 @@ func (m *SysexCommandSysexNonRealtime) GetParent() *SysexCommand {
 }
 
 // NewSysexCommandSysexNonRealtime factory function for SysexCommandSysexNonRealtime
-func NewSysexCommandSysexNonRealtime() *SysexCommand {
-	child := &SysexCommandSysexNonRealtime{
+func NewSysexCommandSysexNonRealtime() *SysexCommandSysexNonRealtime {
+	_result := &SysexCommandSysexNonRealtime{
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandSysexNonRealtime(structType interface{}) *SysexCommandSysexNonRealtime {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexRealtime.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexRealtime.go
index e2b1de6..b099aeb 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexRealtime.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexRealtime.go
@@ -65,12 +65,12 @@ func (m *SysexCommandSysexRealtime) GetParent() *SysexCommand {
 }
 
 // NewSysexCommandSysexRealtime factory function for SysexCommandSysexRealtime
-func NewSysexCommandSysexRealtime() *SysexCommand {
-	child := &SysexCommandSysexRealtime{
+func NewSysexCommandSysexRealtime() *SysexCommandSysexRealtime {
+	_result := &SysexCommandSysexRealtime{
 		SysexCommand: NewSysexCommand(),
 	}
-	child.Child = child
-	return child.SysexCommand
+	_result.Child = _result
+	return _result
 }
 
 func CastSysexCommandSysexRealtime(structType interface{}) *SysexCommandSysexRealtime {
diff --git a/plc4go/internal/plc4go/knxnetip/ConnectionInternalOperations.go b/plc4go/internal/plc4go/knxnetip/ConnectionInternalOperations.go
index 20b68d0..478fdd6 100644
--- a/plc4go/internal/plc4go/knxnetip/ConnectionInternalOperations.go
+++ b/plc4go/internal/plc4go/knxnetip/ConnectionInternalOperations.go
@@ -108,7 +108,7 @@ func (m *Connection) sendGatewayConnectionRequest() (*driverModel.ConnectionResp
 	connectionRequest := driverModel.NewConnectionRequest(
 		driverModel.NewHPAIDiscoveryEndpoint(driverModel.HostProtocolCode_IPV4_UDP, localAddr, uint16(localAddress.Port)),
 		driverModel.NewHPAIDataEndpoint(driverModel.HostProtocolCode_IPV4_UDP, localAddr, uint16(localAddress.Port)),
-		driverModel.NewConnectionRequestInformationTunnelConnection(driverModel.KnxLayer_TUNNEL_LINK_LAYER),
+		driverModel.NewConnectionRequestInformationTunnelConnection(driverModel.KnxLayer_TUNNEL_LINK_LAYER).GetParent(),
 	)
 
 	result := make(chan *driverModel.ConnectionResponse)
@@ -254,15 +254,15 @@ func (m *Connection) sendGroupAddressReadRequest(groupAddress []byte) (*driverMo
 				6,
 				0,
 				m.ClientKnxAddress, groupAddress,
-				driverModel.NewApduDataContainer(driverModel.NewApduDataGroupValueRead(0), false, 0, 0),
+				driverModel.NewApduDataContainer(driverModel.NewApduDataGroupValueRead(0).GetParent(), false, 0, 0).GetParent(),
 				true,
 				true,
 				driverModel.CEMIPriority_LOW,
 				false,
 				false,
-			),
+			).GetParent(),
 			0,
-		),
+		).GetParent(),
 		0,
 	)
 
@@ -339,15 +339,15 @@ func (m *Connection) sendDeviceConnectionRequest(targetAddress driverModel.KnxAd
 				6,
 				uint8(0),
 				driverModel.NewKnxAddress(0, 0, 0), KnxAddressToByteArray(targetAddress),
-				driverModel.NewApduControlContainer(driverModel.NewApduControlConnect(), false, 0, 0),
+				driverModel.NewApduControlContainer(driverModel.NewApduControlConnect().GetParent(), false, 0, 0).GetParent(),
 				true,
 				true,
 				driverModel.CEMIPriority_SYSTEM,
 				false,
 				false,
-			),
+			).GetParent(),
 			0,
-		),
+		).GetParent(),
 		0,
 	)
 
@@ -431,15 +431,15 @@ func (m *Connection) sendDeviceDisconnectionRequest(targetAddress driverModel.Kn
 				6,
 				uint8(0),
 				driverModel.NewKnxAddress(0, 0, 0), KnxAddressToByteArray(targetAddress),
-				driverModel.NewApduControlContainer(driverModel.NewApduControlDisconnect(), false, 0, 0),
+				driverModel.NewApduControlContainer(driverModel.NewApduControlDisconnect().GetParent(), false, 0, 0).GetParent(),
 				true,
 				true,
 				driverModel.CEMIPriority_SYSTEM,
 				false,
 				false,
-			),
+			).GetParent(),
 			0,
-		),
+		).GetParent(),
 		0,
 	)
 
@@ -535,21 +535,21 @@ func (m *Connection) sendDeviceAuthentication(targetAddress driverModel.KnxAddre
 				driverModel.NewKnxAddress(0, 0, 0), KnxAddressToByteArray(targetAddress),
 				driverModel.NewApduDataContainer(
 					driverModel.NewApduDataOther(
-						driverModel.NewApduDataExtAuthorizeRequest(authenticationLevel, utils.ByteArrayToUint8Array(buildingKey), 0),
+						driverModel.NewApduDataExtAuthorizeRequest(authenticationLevel, utils.ByteArrayToUint8Array(buildingKey), 0).GetParent(),
 						0,
-					),
+					).GetParent(),
 					true,
 					counter,
 					0,
-				),
+				).GetParent(),
 				true,
 				true,
 				driverModel.CEMIPriority_SYSTEM,
 				false,
 				false,
-			),
+			).GetParent(),
 			0,
-		),
+		).GetParent(),
 		0,
 	)
 
@@ -657,15 +657,16 @@ func (m *Connection) sendDeviceDeviceDescriptorReadRequest(targetAddress driverM
 				driverModel.NewKnxAddress(0, 0, 0),
 				KnxAddressToByteArray(targetAddress),
 				driverModel.NewApduDataContainer(
-					driverModel.NewApduDataDeviceDescriptorRead(0, 0), true, counter, 0),
+					driverModel.NewApduDataDeviceDescriptorRead(0, 0).GetParent(), true, counter, 0,
+				).GetParent(),
 				true,
 				true,
 				driverModel.CEMIPriority_LOW,
 				false,
 				false,
-			),
+			).GetParent(),
 			0,
-		),
+		).GetParent(),
 		0,
 	)
 
@@ -765,21 +766,21 @@ func (m *Connection) sendDevicePropertyReadRequest(targetAddress driverModel.Knx
 				KnxAddressToByteArray(targetAddress),
 				driverModel.NewApduDataContainer(
 					driverModel.NewApduDataOther(
-						driverModel.NewApduDataExtPropertyValueRead(objectId, propertyId, numElements, propertyIndex, 0),
+						driverModel.NewApduDataExtPropertyValueRead(objectId, propertyId, numElements, propertyIndex, 0).GetParent(),
 						0,
-					),
+					).GetParent(),
 					true,
 					counter,
 					0,
-				),
+				).GetParent(),
 				true,
 				true,
 				driverModel.CEMIPriority_LOW,
 				false,
 				false,
-			),
+			).GetParent(),
 			0,
-		),
+		).GetParent(),
 		0,
 	)
 
@@ -884,21 +885,21 @@ func (m *Connection) sendDevicePropertyDescriptionReadRequest(targetAddress driv
 				KnxAddressToByteArray(targetAddress),
 				driverModel.NewApduDataContainer(
 					driverModel.NewApduDataOther(
-						driverModel.NewApduDataExtPropertyDescriptionRead(objectId, propertyId, 1, 0),
+						driverModel.NewApduDataExtPropertyDescriptionRead(objectId, propertyId, 1, 0).GetParent(),
 						0,
-					),
+					).GetParent(),
 					true,
 					counter,
 					0,
-				),
+				).GetParent(),
 				true,
 				true,
 				driverModel.CEMIPriority_LOW,
 				false,
 				false,
-			),
+			).GetParent(),
 			0,
-		),
+		).GetParent(),
 		0,
 	)
 
@@ -1003,19 +1004,19 @@ func (m *Connection) sendDeviceMemoryReadRequest(targetAddress driverModel.KnxAd
 				driverModel.NewKnxAddress(0, 0, 0),
 				KnxAddressToByteArray(targetAddress),
 				driverModel.NewApduDataContainer(
-					driverModel.NewApduDataMemoryRead(numBytes, address, 0),
+					driverModel.NewApduDataMemoryRead(numBytes, address, 0).GetParent(),
 					true,
 					counter,
 					0,
-				),
+				).GetParent(),
 				true,
 				true,
 				driverModel.CEMIPriority_LOW,
 				false,
 				false,
-			),
+			).GetParent(),
 			0,
-		),
+		).GetParent(),
 		0,
 	)
 
@@ -1110,15 +1111,15 @@ func (m *Connection) sendDeviceAck(targetAddress driverModel.KnxAddress, counter
 				6,
 				uint8(0),
 				driverModel.NewKnxAddress(0, 0, 0), KnxAddressToByteArray(targetAddress),
-				driverModel.NewApduControlContainer(driverModel.NewApduControlAck(), true, counter, 0),
+				driverModel.NewApduControlContainer(driverModel.NewApduControlAck().GetParent(), true, counter, 0).GetParent(),
 				true,
 				true,
 				driverModel.CEMIPriority_SYSTEM,
 				false,
 				false,
-			),
+			).GetParent(),
 			0,
-		),
+		).GetParent(),
 		0,
 	)
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go
index 191ead6..21e3cf0 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go
@@ -95,6 +95,9 @@ func CastApdu(structType interface{}) *Apdu {
 	if casted, ok := structType.(*Apdu); ok {
 		return casted
 	}
+	if casted, ok := structType.(IApduChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControl.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControl.go
index 1f24454..6466ab2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControl.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControl.go
@@ -69,6 +69,9 @@ func CastApduControl(structType interface{}) *ApduControl {
 	if casted, ok := structType.(*ApduControl); ok {
 		return casted
 	}
+	if casted, ok := structType.(IApduControlChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlAck.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlAck.go
index 7a689c5..7098457 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlAck.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlAck.go
@@ -61,12 +61,12 @@ func (m *ApduControlAck) GetParent() *ApduControl {
 }
 
 // NewApduControlAck factory function for ApduControlAck
-func NewApduControlAck() *ApduControl {
-	child := &ApduControlAck{
+func NewApduControlAck() *ApduControlAck {
+	_result := &ApduControlAck{
 		ApduControl: NewApduControl(),
 	}
-	child.Child = child
-	return child.ApduControl
+	_result.Child = _result
+	return _result
 }
 
 func CastApduControlAck(structType interface{}) *ApduControlAck {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlConnect.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlConnect.go
index 90c21d4..066ff5e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlConnect.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlConnect.go
@@ -61,12 +61,12 @@ func (m *ApduControlConnect) GetParent() *ApduControl {
 }
 
 // NewApduControlConnect factory function for ApduControlConnect
-func NewApduControlConnect() *ApduControl {
-	child := &ApduControlConnect{
+func NewApduControlConnect() *ApduControlConnect {
+	_result := &ApduControlConnect{
 		ApduControl: NewApduControl(),
 	}
-	child.Child = child
-	return child.ApduControl
+	_result.Child = _result
+	return _result
 }
 
 func CastApduControlConnect(structType interface{}) *ApduControlConnect {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go
index a7a99fd..58d69d9 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go
@@ -84,13 +84,13 @@ func (m *ApduControlContainer) GetControlApdu() *ApduControl {
 ///////////////////////////////////////////////////////////
 
 // NewApduControlContainer factory function for ApduControlContainer
-func NewApduControlContainer(controlApdu *ApduControl, numbered bool, counter uint8, dataLength uint8) *Apdu {
-	child := &ApduControlContainer{
+func NewApduControlContainer(controlApdu *ApduControl, numbered bool, counter uint8, dataLength uint8) *ApduControlContainer {
+	_result := &ApduControlContainer{
 		ControlApdu: controlApdu,
 		Apdu:        NewApdu(numbered, counter, dataLength),
 	}
-	child.Child = child
-	return child.Apdu
+	_result.Child = _result
+	return _result
 }
 
 func CastApduControlContainer(structType interface{}) *ApduControlContainer {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlDisconnect.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlDisconnect.go
index debed83..6e96a37 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlDisconnect.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlDisconnect.go
@@ -61,12 +61,12 @@ func (m *ApduControlDisconnect) GetParent() *ApduControl {
 }
 
 // NewApduControlDisconnect factory function for ApduControlDisconnect
-func NewApduControlDisconnect() *ApduControl {
-	child := &ApduControlDisconnect{
+func NewApduControlDisconnect() *ApduControlDisconnect {
+	_result := &ApduControlDisconnect{
 		ApduControl: NewApduControl(),
 	}
-	child.Child = child
-	return child.ApduControl
+	_result.Child = _result
+	return _result
 }
 
 func CastApduControlDisconnect(structType interface{}) *ApduControlDisconnect {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlNack.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlNack.go
index 5a6ae00..12e9c2d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlNack.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlNack.go
@@ -61,12 +61,12 @@ func (m *ApduControlNack) GetParent() *ApduControl {
 }
 
 // NewApduControlNack factory function for ApduControlNack
-func NewApduControlNack() *ApduControl {
-	child := &ApduControlNack{
+func NewApduControlNack() *ApduControlNack {
+	_result := &ApduControlNack{
 		ApduControl: NewApduControl(),
 	}
-	child.Child = child
-	return child.ApduControl
+	_result.Child = _result
+	return _result
 }
 
 func CastApduControlNack(structType interface{}) *ApduControlNack {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
index 0a1b34f..56c8fb4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
@@ -72,6 +72,9 @@ func CastApduData(structType interface{}) *ApduData {
 	if casted, ok := structType.(*ApduData); ok {
 		return casted
 	}
+	if casted, ok := structType.(IApduDataChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go
index 0b676fe..7aaeb98 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go
@@ -64,12 +64,12 @@ func (m *ApduDataAdcRead) GetParent() *ApduData {
 }
 
 // NewApduDataAdcRead factory function for ApduDataAdcRead
-func NewApduDataAdcRead(dataLength uint8) *ApduData {
-	child := &ApduDataAdcRead{
+func NewApduDataAdcRead(dataLength uint8) *ApduDataAdcRead {
+	_result := &ApduDataAdcRead{
 		ApduData: NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataAdcRead(structType interface{}) *ApduDataAdcRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcResponse.go
index b3525d8..74b9483 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcResponse.go
@@ -64,12 +64,12 @@ func (m *ApduDataAdcResponse) GetParent() *ApduData {
 }
 
 // NewApduDataAdcResponse factory function for ApduDataAdcResponse
-func NewApduDataAdcResponse(dataLength uint8) *ApduData {
-	child := &ApduDataAdcResponse{
+func NewApduDataAdcResponse(dataLength uint8) *ApduDataAdcResponse {
+	_result := &ApduDataAdcResponse{
 		ApduData: NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataAdcResponse(structType interface{}) *ApduDataAdcResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataContainer.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataContainer.go
index e6cf65e..0d11c89 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataContainer.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataContainer.go
@@ -84,13 +84,13 @@ func (m *ApduDataContainer) GetDataApdu() *ApduData {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataContainer factory function for ApduDataContainer
-func NewApduDataContainer(dataApdu *ApduData, numbered bool, counter uint8, dataLength uint8) *Apdu {
-	child := &ApduDataContainer{
+func NewApduDataContainer(dataApdu *ApduData, numbered bool, counter uint8, dataLength uint8) *ApduDataContainer {
+	_result := &ApduDataContainer{
 		DataApdu: dataApdu,
 		Apdu:     NewApdu(numbered, counter, dataLength),
 	}
-	child.Child = child
-	return child.Apdu
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataContainer(structType interface{}) *ApduDataContainer {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go
index 10239ab..b83637f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go
@@ -81,13 +81,13 @@ func (m *ApduDataDeviceDescriptorRead) GetDescriptorType() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataDeviceDescriptorRead factory function for ApduDataDeviceDescriptorRead
-func NewApduDataDeviceDescriptorRead(descriptorType uint8, dataLength uint8) *ApduData {
-	child := &ApduDataDeviceDescriptorRead{
+func NewApduDataDeviceDescriptorRead(descriptorType uint8, dataLength uint8) *ApduDataDeviceDescriptorRead {
+	_result := &ApduDataDeviceDescriptorRead{
 		DescriptorType: descriptorType,
 		ApduData:       NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataDeviceDescriptorRead(structType interface{}) *ApduDataDeviceDescriptorRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
index c1ebcbd..5d885be 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
@@ -88,14 +88,14 @@ func (m *ApduDataDeviceDescriptorResponse) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataDeviceDescriptorResponse factory function for ApduDataDeviceDescriptorResponse
-func NewApduDataDeviceDescriptorResponse(descriptorType uint8, data []byte, dataLength uint8) *ApduData {
-	child := &ApduDataDeviceDescriptorResponse{
+func NewApduDataDeviceDescriptorResponse(descriptorType uint8, data []byte, dataLength uint8) *ApduDataDeviceDescriptorResponse {
+	_result := &ApduDataDeviceDescriptorResponse{
 		DescriptorType: descriptorType,
 		Data:           data,
 		ApduData:       NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataDeviceDescriptorResponse(structType interface{}) *ApduDataDeviceDescriptorResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go
index f07b690..50497f1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go
@@ -72,6 +72,9 @@ func CastApduDataExt(structType interface{}) *ApduDataExt {
 	if casted, ok := structType.(*ApduDataExt); ok {
 		return casted
 	}
+	if casted, ok := structType.(IApduDataExtChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
index 503bd55..9f623f7 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
@@ -88,14 +88,14 @@ func (m *ApduDataExtAuthorizeRequest) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataExtAuthorizeRequest factory function for ApduDataExtAuthorizeRequest
-func NewApduDataExtAuthorizeRequest(level uint8, data []byte, length uint8) *ApduDataExt {
-	child := &ApduDataExtAuthorizeRequest{
+func NewApduDataExtAuthorizeRequest(level uint8, data []byte, length uint8) *ApduDataExtAuthorizeRequest {
+	_result := &ApduDataExtAuthorizeRequest{
 		Level:       level,
 		Data:        data,
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtAuthorizeRequest(structType interface{}) *ApduDataExtAuthorizeRequest {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeResponse.go
index cc9c6fa..9693e9d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeResponse.go
@@ -81,13 +81,13 @@ func (m *ApduDataExtAuthorizeResponse) GetLevel() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataExtAuthorizeResponse factory function for ApduDataExtAuthorizeResponse
-func NewApduDataExtAuthorizeResponse(level uint8, length uint8) *ApduDataExt {
-	child := &ApduDataExtAuthorizeResponse{
+func NewApduDataExtAuthorizeResponse(level uint8, length uint8) *ApduDataExtAuthorizeResponse {
+	_result := &ApduDataExtAuthorizeResponse{
 		Level:       level,
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtAuthorizeResponse(structType interface{}) *ApduDataExtAuthorizeResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressRead.go
index e7a4fc6..8dc1d29 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressRead.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtDomainAddressRead) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtDomainAddressRead factory function for ApduDataExtDomainAddressRead
-func NewApduDataExtDomainAddressRead(length uint8) *ApduDataExt {
-	child := &ApduDataExtDomainAddressRead{
+func NewApduDataExtDomainAddressRead(length uint8) *ApduDataExtDomainAddressRead {
+	_result := &ApduDataExtDomainAddressRead{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtDomainAddressRead(structType interface{}) *ApduDataExtDomainAddressRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressResponse.go
index 9fec7b6..aa561a8 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressResponse.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtDomainAddressResponse) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtDomainAddressResponse factory function for ApduDataExtDomainAddressResponse
-func NewApduDataExtDomainAddressResponse(length uint8) *ApduDataExt {
-	child := &ApduDataExtDomainAddressResponse{
+func NewApduDataExtDomainAddressResponse(length uint8) *ApduDataExtDomainAddressResponse {
+	_result := &ApduDataExtDomainAddressResponse{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtDomainAddressResponse(structType interface{}) *ApduDataExtDomainAddressResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSelectiveRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSelectiveRead.go
index 379ae21..c9d3a1b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSelectiveRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSelectiveRead.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtDomainAddressSelectiveRead) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtDomainAddressSelectiveRead factory function for ApduDataExtDomainAddressSelectiveRead
-func NewApduDataExtDomainAddressSelectiveRead(length uint8) *ApduDataExt {
-	child := &ApduDataExtDomainAddressSelectiveRead{
+func NewApduDataExtDomainAddressSelectiveRead(length uint8) *ApduDataExtDomainAddressSelectiveRead {
+	_result := &ApduDataExtDomainAddressSelectiveRead{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtDomainAddressSelectiveRead(structType interface{}) *ApduDataExtDomainAddressSelectiveRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberRead.go
index aede196..2ad644e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberRead.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtDomainAddressSerialNumberRead) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtDomainAddressSerialNumberRead factory function for ApduDataExtDomainAddressSerialNumberRead
-func NewApduDataExtDomainAddressSerialNumberRead(length uint8) *ApduDataExt {
-	child := &ApduDataExtDomainAddressSerialNumberRead{
+func NewApduDataExtDomainAddressSerialNumberRead(length uint8) *ApduDataExtDomainAddressSerialNumberRead {
+	_result := &ApduDataExtDomainAddressSerialNumberRead{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtDomainAddressSerialNumberRead(structType interface{}) *ApduDataExtDomainAddressSerialNumberRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberResponse.go
index 3ec0f9d..44c5229 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberResponse.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtDomainAddressSerialNumberResponse) GetParent() *ApduDataExt
 }
 
 // NewApduDataExtDomainAddressSerialNumberResponse factory function for ApduDataExtDomainAddressSerialNumberResponse
-func NewApduDataExtDomainAddressSerialNumberResponse(length uint8) *ApduDataExt {
-	child := &ApduDataExtDomainAddressSerialNumberResponse{
+func NewApduDataExtDomainAddressSerialNumberResponse(length uint8) *ApduDataExtDomainAddressSerialNumberResponse {
+	_result := &ApduDataExtDomainAddressSerialNumberResponse{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtDomainAddressSerialNumberResponse(structType interface{}) *ApduDataExtDomainAddressSerialNumberResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberWrite.go
index daaef77..d97d2c4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberWrite.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtDomainAddressSerialNumberWrite) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtDomainAddressSerialNumberWrite factory function for ApduDataExtDomainAddressSerialNumberWrite
-func NewApduDataExtDomainAddressSerialNumberWrite(length uint8) *ApduDataExt {
-	child := &ApduDataExtDomainAddressSerialNumberWrite{
+func NewApduDataExtDomainAddressSerialNumberWrite(length uint8) *ApduDataExtDomainAddressSerialNumberWrite {
+	_result := &ApduDataExtDomainAddressSerialNumberWrite{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtDomainAddressSerialNumberWrite(structType interface{}) *ApduDataExtDomainAddressSerialNumberWrite {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressWrite.go
index 50604b6..e2f639f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressWrite.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtDomainAddressWrite) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtDomainAddressWrite factory function for ApduDataExtDomainAddressWrite
-func NewApduDataExtDomainAddressWrite(length uint8) *ApduDataExt {
-	child := &ApduDataExtDomainAddressWrite{
+func NewApduDataExtDomainAddressWrite(length uint8) *ApduDataExtDomainAddressWrite {
+	_result := &ApduDataExtDomainAddressWrite{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtDomainAddressWrite(structType interface{}) *ApduDataExtDomainAddressWrite {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtFileStreamInfoReport.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtFileStreamInfoReport.go
index 2c72177..61a1992 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtFileStreamInfoReport.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtFileStreamInfoReport.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtFileStreamInfoReport) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtFileStreamInfoReport factory function for ApduDataExtFileStreamInfoReport
-func NewApduDataExtFileStreamInfoReport(length uint8) *ApduDataExt {
-	child := &ApduDataExtFileStreamInfoReport{
+func NewApduDataExtFileStreamInfoReport(length uint8) *ApduDataExtFileStreamInfoReport {
+	_result := &ApduDataExtFileStreamInfoReport{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtFileStreamInfoReport(structType interface{}) *ApduDataExtFileStreamInfoReport {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueInfoReport.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueInfoReport.go
index 7829f27..ccf6c00 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueInfoReport.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueInfoReport.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtGroupPropertyValueInfoReport) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtGroupPropertyValueInfoReport factory function for ApduDataExtGroupPropertyValueInfoReport
-func NewApduDataExtGroupPropertyValueInfoReport(length uint8) *ApduDataExt {
-	child := &ApduDataExtGroupPropertyValueInfoReport{
+func NewApduDataExtGroupPropertyValueInfoReport(length uint8) *ApduDataExtGroupPropertyValueInfoReport {
+	_result := &ApduDataExtGroupPropertyValueInfoReport{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtGroupPropertyValueInfoReport(structType interface{}) *ApduDataExtGroupPropertyValueInfoReport {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueRead.go
index b9b19c3..90c9dd5 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueRead.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtGroupPropertyValueRead) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtGroupPropertyValueRead factory function for ApduDataExtGroupPropertyValueRead
-func NewApduDataExtGroupPropertyValueRead(length uint8) *ApduDataExt {
-	child := &ApduDataExtGroupPropertyValueRead{
+func NewApduDataExtGroupPropertyValueRead(length uint8) *ApduDataExtGroupPropertyValueRead {
+	_result := &ApduDataExtGroupPropertyValueRead{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtGroupPropertyValueRead(structType interface{}) *ApduDataExtGroupPropertyValueRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueResponse.go
index b93503d..662e94a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueResponse.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtGroupPropertyValueResponse) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtGroupPropertyValueResponse factory function for ApduDataExtGroupPropertyValueResponse
-func NewApduDataExtGroupPropertyValueResponse(length uint8) *ApduDataExt {
-	child := &ApduDataExtGroupPropertyValueResponse{
+func NewApduDataExtGroupPropertyValueResponse(length uint8) *ApduDataExtGroupPropertyValueResponse {
+	_result := &ApduDataExtGroupPropertyValueResponse{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtGroupPropertyValueResponse(structType interface{}) *ApduDataExtGroupPropertyValueResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueWrite.go
index 108d12a..8a28c08 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueWrite.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtGroupPropertyValueWrite) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtGroupPropertyValueWrite factory function for ApduDataExtGroupPropertyValueWrite
-func NewApduDataExtGroupPropertyValueWrite(length uint8) *ApduDataExt {
-	child := &ApduDataExtGroupPropertyValueWrite{
+func NewApduDataExtGroupPropertyValueWrite(length uint8) *ApduDataExtGroupPropertyValueWrite {
+	_result := &ApduDataExtGroupPropertyValueWrite{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtGroupPropertyValueWrite(structType interface{}) *ApduDataExtGroupPropertyValueWrite {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberRead.go
index 4cbd049..5eace05 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberRead.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtIndividualAddressSerialNumberRead) GetParent() *ApduDataExt
 }
 
 // NewApduDataExtIndividualAddressSerialNumberRead factory function for ApduDataExtIndividualAddressSerialNumberRead
-func NewApduDataExtIndividualAddressSerialNumberRead(length uint8) *ApduDataExt {
-	child := &ApduDataExtIndividualAddressSerialNumberRead{
+func NewApduDataExtIndividualAddressSerialNumberRead(length uint8) *ApduDataExtIndividualAddressSerialNumberRead {
+	_result := &ApduDataExtIndividualAddressSerialNumberRead{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtIndividualAddressSerialNumberRead(structType interface{}) *ApduDataExtIndividualAddressSerialNumberRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberResponse.go
index 4f4a4ee..b17c955 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberResponse.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtIndividualAddressSerialNumberResponse) GetParent() *ApduData
 }
 
 // NewApduDataExtIndividualAddressSerialNumberResponse factory function for ApduDataExtIndividualAddressSerialNumberResponse
-func NewApduDataExtIndividualAddressSerialNumberResponse(length uint8) *ApduDataExt {
-	child := &ApduDataExtIndividualAddressSerialNumberResponse{
+func NewApduDataExtIndividualAddressSerialNumberResponse(length uint8) *ApduDataExtIndividualAddressSerialNumberResponse {
+	_result := &ApduDataExtIndividualAddressSerialNumberResponse{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtIndividualAddressSerialNumberResponse(structType interface{}) *ApduDataExtIndividualAddressSerialNumberResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberWrite.go
index de2dea4..1a4819b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberWrite.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtIndividualAddressSerialNumberWrite) GetParent() *ApduDataExt
 }
 
 // NewApduDataExtIndividualAddressSerialNumberWrite factory function for ApduDataExtIndividualAddressSerialNumberWrite
-func NewApduDataExtIndividualAddressSerialNumberWrite(length uint8) *ApduDataExt {
-	child := &ApduDataExtIndividualAddressSerialNumberWrite{
+func NewApduDataExtIndividualAddressSerialNumberWrite(length uint8) *ApduDataExtIndividualAddressSerialNumberWrite {
+	_result := &ApduDataExtIndividualAddressSerialNumberWrite{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtIndividualAddressSerialNumberWrite(structType interface{}) *ApduDataExtIndividualAddressSerialNumberWrite {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyResponse.go
index 25e313e..a10a9a8 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyResponse.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtKeyResponse) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtKeyResponse factory function for ApduDataExtKeyResponse
-func NewApduDataExtKeyResponse(length uint8) *ApduDataExt {
-	child := &ApduDataExtKeyResponse{
+func NewApduDataExtKeyResponse(length uint8) *ApduDataExtKeyResponse {
+	_result := &ApduDataExtKeyResponse{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtKeyResponse(structType interface{}) *ApduDataExtKeyResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyWrite.go
index 4ec0ed3..6eb18da 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyWrite.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtKeyWrite) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtKeyWrite factory function for ApduDataExtKeyWrite
-func NewApduDataExtKeyWrite(length uint8) *ApduDataExt {
-	child := &ApduDataExtKeyWrite{
+func NewApduDataExtKeyWrite(length uint8) *ApduDataExtKeyWrite {
+	_result := &ApduDataExtKeyWrite{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtKeyWrite(structType interface{}) *ApduDataExtKeyWrite {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkRead.go
index 7e0300f..eae7dff 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkRead.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtLinkRead) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtLinkRead factory function for ApduDataExtLinkRead
-func NewApduDataExtLinkRead(length uint8) *ApduDataExt {
-	child := &ApduDataExtLinkRead{
+func NewApduDataExtLinkRead(length uint8) *ApduDataExtLinkRead {
+	_result := &ApduDataExtLinkRead{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtLinkRead(structType interface{}) *ApduDataExtLinkRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkResponse.go
index dd396d4..26b4377 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkResponse.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtLinkResponse) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtLinkResponse factory function for ApduDataExtLinkResponse
-func NewApduDataExtLinkResponse(length uint8) *ApduDataExt {
-	child := &ApduDataExtLinkResponse{
+func NewApduDataExtLinkResponse(length uint8) *ApduDataExtLinkResponse {
+	_result := &ApduDataExtLinkResponse{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtLinkResponse(structType interface{}) *ApduDataExtLinkResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkWrite.go
index e8ccbc5..c02e9ec 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkWrite.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtLinkWrite) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtLinkWrite factory function for ApduDataExtLinkWrite
-func NewApduDataExtLinkWrite(length uint8) *ApduDataExt {
-	child := &ApduDataExtLinkWrite{
+func NewApduDataExtLinkWrite(length uint8) *ApduDataExtLinkWrite {
+	_result := &ApduDataExtLinkWrite{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtLinkWrite(structType interface{}) *ApduDataExtLinkWrite {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtMemoryBitWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtMemoryBitWrite.go
index e17466d..d21fb3d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtMemoryBitWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtMemoryBitWrite.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtMemoryBitWrite) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtMemoryBitWrite factory function for ApduDataExtMemoryBitWrite
-func NewApduDataExtMemoryBitWrite(length uint8) *ApduDataExt {
-	child := &ApduDataExtMemoryBitWrite{
+func NewApduDataExtMemoryBitWrite(length uint8) *ApduDataExtMemoryBitWrite {
+	_result := &ApduDataExtMemoryBitWrite{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtMemoryBitWrite(structType interface{}) *ApduDataExtMemoryBitWrite {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterRead.go
index f7ea468..1c66007 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterRead.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtNetworkParameterRead) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtNetworkParameterRead factory function for ApduDataExtNetworkParameterRead
-func NewApduDataExtNetworkParameterRead(length uint8) *ApduDataExt {
-	child := &ApduDataExtNetworkParameterRead{
+func NewApduDataExtNetworkParameterRead(length uint8) *ApduDataExtNetworkParameterRead {
+	_result := &ApduDataExtNetworkParameterRead{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtNetworkParameterRead(structType interface{}) *ApduDataExtNetworkParameterRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterResponse.go
index a377442..02aaf81 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterResponse.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtNetworkParameterResponse) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtNetworkParameterResponse factory function for ApduDataExtNetworkParameterResponse
-func NewApduDataExtNetworkParameterResponse(length uint8) *ApduDataExt {
-	child := &ApduDataExtNetworkParameterResponse{
+func NewApduDataExtNetworkParameterResponse(length uint8) *ApduDataExtNetworkParameterResponse {
+	_result := &ApduDataExtNetworkParameterResponse{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtNetworkParameterResponse(structType interface{}) *ApduDataExtNetworkParameterResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterWrite.go
index 7606464..da217fa 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterWrite.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtNetworkParameterWrite) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtNetworkParameterWrite factory function for ApduDataExtNetworkParameterWrite
-func NewApduDataExtNetworkParameterWrite(length uint8) *ApduDataExt {
-	child := &ApduDataExtNetworkParameterWrite{
+func NewApduDataExtNetworkParameterWrite(length uint8) *ApduDataExtNetworkParameterWrite {
+	_result := &ApduDataExtNetworkParameterWrite{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtNetworkParameterWrite(structType interface{}) *ApduDataExtNetworkParameterWrite {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtOpenRoutingTableRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtOpenRoutingTableRequest.go
index e4ecb69..2bfc5e4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtOpenRoutingTableRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtOpenRoutingTableRequest.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtOpenRoutingTableRequest) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtOpenRoutingTableRequest factory function for ApduDataExtOpenRoutingTableRequest
-func NewApduDataExtOpenRoutingTableRequest(length uint8) *ApduDataExt {
-	child := &ApduDataExtOpenRoutingTableRequest{
+func NewApduDataExtOpenRoutingTableRequest(length uint8) *ApduDataExtOpenRoutingTableRequest {
+	_result := &ApduDataExtOpenRoutingTableRequest{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtOpenRoutingTableRequest(structType interface{}) *ApduDataExtOpenRoutingTableRequest {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionRead.go
index 69c71a2..a2972e7 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionRead.go
@@ -95,15 +95,15 @@ func (m *ApduDataExtPropertyDescriptionRead) GetIndex() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataExtPropertyDescriptionRead factory function for ApduDataExtPropertyDescriptionRead
-func NewApduDataExtPropertyDescriptionRead(objectIndex uint8, propertyId uint8, index uint8, length uint8) *ApduDataExt {
-	child := &ApduDataExtPropertyDescriptionRead{
+func NewApduDataExtPropertyDescriptionRead(objectIndex uint8, propertyId uint8, index uint8, length uint8) *ApduDataExtPropertyDescriptionRead {
+	_result := &ApduDataExtPropertyDescriptionRead{
 		ObjectIndex: objectIndex,
 		PropertyId:  propertyId,
 		Index:       index,
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtPropertyDescriptionRead(structType interface{}) *ApduDataExtPropertyDescriptionRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionResponse.go
index 51bb333..c9ee83d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionResponse.go
@@ -131,8 +131,8 @@ func (m *ApduDataExtPropertyDescriptionResponse) GetWriteLevel() AccessLevel {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataExtPropertyDescriptionResponse factory function for ApduDataExtPropertyDescriptionResponse
-func NewApduDataExtPropertyDescriptionResponse(objectIndex uint8, propertyId uint8, index uint8, writeEnabled bool, propertyDataType KnxPropertyDataType, maxNrOfElements uint16, readLevel AccessLevel, writeLevel AccessLevel, length uint8) *ApduDataExt {
-	child := &ApduDataExtPropertyDescriptionResponse{
+func NewApduDataExtPropertyDescriptionResponse(objectIndex uint8, propertyId uint8, index uint8, writeEnabled bool, propertyDataType KnxPropertyDataType, maxNrOfElements uint16, readLevel AccessLevel, writeLevel AccessLevel, length uint8) *ApduDataExtPropertyDescriptionResponse {
+	_result := &ApduDataExtPropertyDescriptionResponse{
 		ObjectIndex:      objectIndex,
 		PropertyId:       propertyId,
 		Index:            index,
@@ -143,8 +143,8 @@ func NewApduDataExtPropertyDescriptionResponse(objectIndex uint8, propertyId uin
 		WriteLevel:       writeLevel,
 		ApduDataExt:      NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtPropertyDescriptionResponse(structType interface{}) *ApduDataExtPropertyDescriptionResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueRead.go
index f5228ea..f96ea72 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueRead.go
@@ -102,16 +102,16 @@ func (m *ApduDataExtPropertyValueRead) GetIndex() uint16 {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataExtPropertyValueRead factory function for ApduDataExtPropertyValueRead
-func NewApduDataExtPropertyValueRead(objectIndex uint8, propertyId uint8, count uint8, index uint16, length uint8) *ApduDataExt {
-	child := &ApduDataExtPropertyValueRead{
+func NewApduDataExtPropertyValueRead(objectIndex uint8, propertyId uint8, count uint8, index uint16, length uint8) *ApduDataExtPropertyValueRead {
+	_result := &ApduDataExtPropertyValueRead{
 		ObjectIndex: objectIndex,
 		PropertyId:  propertyId,
 		Count:       count,
 		Index:       index,
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtPropertyValueRead(structType interface{}) *ApduDataExtPropertyValueRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
index 32f2a77..8e58282 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
@@ -109,8 +109,8 @@ func (m *ApduDataExtPropertyValueResponse) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataExtPropertyValueResponse factory function for ApduDataExtPropertyValueResponse
-func NewApduDataExtPropertyValueResponse(objectIndex uint8, propertyId uint8, count uint8, index uint16, data []byte, length uint8) *ApduDataExt {
-	child := &ApduDataExtPropertyValueResponse{
+func NewApduDataExtPropertyValueResponse(objectIndex uint8, propertyId uint8, count uint8, index uint16, data []byte, length uint8) *ApduDataExtPropertyValueResponse {
+	_result := &ApduDataExtPropertyValueResponse{
 		ObjectIndex: objectIndex,
 		PropertyId:  propertyId,
 		Count:       count,
@@ -118,8 +118,8 @@ func NewApduDataExtPropertyValueResponse(objectIndex uint8, propertyId uint8, co
 		Data:        data,
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtPropertyValueResponse(structType interface{}) *ApduDataExtPropertyValueResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
index f97dd26..4dd5e51 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
@@ -109,8 +109,8 @@ func (m *ApduDataExtPropertyValueWrite) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataExtPropertyValueWrite factory function for ApduDataExtPropertyValueWrite
-func NewApduDataExtPropertyValueWrite(objectIndex uint8, propertyId uint8, count uint8, index uint16, data []byte, length uint8) *ApduDataExt {
-	child := &ApduDataExtPropertyValueWrite{
+func NewApduDataExtPropertyValueWrite(objectIndex uint8, propertyId uint8, count uint8, index uint16, data []byte, length uint8) *ApduDataExtPropertyValueWrite {
+	_result := &ApduDataExtPropertyValueWrite{
 		ObjectIndex: objectIndex,
 		PropertyId:  propertyId,
 		Count:       count,
@@ -118,8 +118,8 @@ func NewApduDataExtPropertyValueWrite(objectIndex uint8, propertyId uint8, count
 		Data:        data,
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtPropertyValueWrite(structType interface{}) *ApduDataExtPropertyValueWrite {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryRequest.go
index 4a6e917..af43c62 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryRequest.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtReadRouterMemoryRequest) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtReadRouterMemoryRequest factory function for ApduDataExtReadRouterMemoryRequest
-func NewApduDataExtReadRouterMemoryRequest(length uint8) *ApduDataExt {
-	child := &ApduDataExtReadRouterMemoryRequest{
+func NewApduDataExtReadRouterMemoryRequest(length uint8) *ApduDataExtReadRouterMemoryRequest {
+	_result := &ApduDataExtReadRouterMemoryRequest{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtReadRouterMemoryRequest(structType interface{}) *ApduDataExtReadRouterMemoryRequest {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryResponse.go
index c513719..91b4f3d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryResponse.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtReadRouterMemoryResponse) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtReadRouterMemoryResponse factory function for ApduDataExtReadRouterMemoryResponse
-func NewApduDataExtReadRouterMemoryResponse(length uint8) *ApduDataExt {
-	child := &ApduDataExtReadRouterMemoryResponse{
+func NewApduDataExtReadRouterMemoryResponse(length uint8) *ApduDataExtReadRouterMemoryResponse {
+	_result := &ApduDataExtReadRouterMemoryResponse{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtReadRouterMemoryResponse(structType interface{}) *ApduDataExtReadRouterMemoryResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusRequest.go
index 9398674..6cd3fd6 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusRequest.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtReadRouterStatusRequest) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtReadRouterStatusRequest factory function for ApduDataExtReadRouterStatusRequest
-func NewApduDataExtReadRouterStatusRequest(length uint8) *ApduDataExt {
-	child := &ApduDataExtReadRouterStatusRequest{
+func NewApduDataExtReadRouterStatusRequest(length uint8) *ApduDataExtReadRouterStatusRequest {
+	_result := &ApduDataExtReadRouterStatusRequest{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtReadRouterStatusRequest(structType interface{}) *ApduDataExtReadRouterStatusRequest {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusResponse.go
index 17eeac0..5ea4441 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusResponse.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtReadRouterStatusResponse) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtReadRouterStatusResponse factory function for ApduDataExtReadRouterStatusResponse
-func NewApduDataExtReadRouterStatusResponse(length uint8) *ApduDataExt {
-	child := &ApduDataExtReadRouterStatusResponse{
+func NewApduDataExtReadRouterStatusResponse(length uint8) *ApduDataExtReadRouterStatusResponse {
+	_result := &ApduDataExtReadRouterStatusResponse{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtReadRouterStatusResponse(structType interface{}) *ApduDataExtReadRouterStatusResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableRequest.go
index 40ab9c1..e473c53 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableRequest.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtReadRoutingTableRequest) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtReadRoutingTableRequest factory function for ApduDataExtReadRoutingTableRequest
-func NewApduDataExtReadRoutingTableRequest(length uint8) *ApduDataExt {
-	child := &ApduDataExtReadRoutingTableRequest{
+func NewApduDataExtReadRoutingTableRequest(length uint8) *ApduDataExtReadRoutingTableRequest {
+	_result := &ApduDataExtReadRoutingTableRequest{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtReadRoutingTableRequest(structType interface{}) *ApduDataExtReadRoutingTableRequest {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableResponse.go
index 0b40830..7671836 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableResponse.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtReadRoutingTableResponse) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtReadRoutingTableResponse factory function for ApduDataExtReadRoutingTableResponse
-func NewApduDataExtReadRoutingTableResponse(length uint8) *ApduDataExt {
-	child := &ApduDataExtReadRoutingTableResponse{
+func NewApduDataExtReadRoutingTableResponse(length uint8) *ApduDataExtReadRoutingTableResponse {
+	_result := &ApduDataExtReadRoutingTableResponse{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtReadRoutingTableResponse(structType interface{}) *ApduDataExtReadRoutingTableResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterMemoryRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterMemoryRequest.go
index e8c7353..ea0e5f1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterMemoryRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterMemoryRequest.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtWriteRouterMemoryRequest) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtWriteRouterMemoryRequest factory function for ApduDataExtWriteRouterMemoryRequest
-func NewApduDataExtWriteRouterMemoryRequest(length uint8) *ApduDataExt {
-	child := &ApduDataExtWriteRouterMemoryRequest{
+func NewApduDataExtWriteRouterMemoryRequest(length uint8) *ApduDataExtWriteRouterMemoryRequest {
+	_result := &ApduDataExtWriteRouterMemoryRequest{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtWriteRouterMemoryRequest(structType interface{}) *ApduDataExtWriteRouterMemoryRequest {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterStatusRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterStatusRequest.go
index 5dde742..4e3b8f6 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterStatusRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterStatusRequest.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtWriteRouterStatusRequest) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtWriteRouterStatusRequest factory function for ApduDataExtWriteRouterStatusRequest
-func NewApduDataExtWriteRouterStatusRequest(length uint8) *ApduDataExt {
-	child := &ApduDataExtWriteRouterStatusRequest{
+func NewApduDataExtWriteRouterStatusRequest(length uint8) *ApduDataExtWriteRouterStatusRequest {
+	_result := &ApduDataExtWriteRouterStatusRequest{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtWriteRouterStatusRequest(structType interface{}) *ApduDataExtWriteRouterStatusRequest {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRoutingTableRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRoutingTableRequest.go
index c0e1bbe..73525ae 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRoutingTableRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRoutingTableRequest.go
@@ -64,12 +64,12 @@ func (m *ApduDataExtWriteRoutingTableRequest) GetParent() *ApduDataExt {
 }
 
 // NewApduDataExtWriteRoutingTableRequest factory function for ApduDataExtWriteRoutingTableRequest
-func NewApduDataExtWriteRoutingTableRequest(length uint8) *ApduDataExt {
-	child := &ApduDataExtWriteRoutingTableRequest{
+func NewApduDataExtWriteRoutingTableRequest(length uint8) *ApduDataExtWriteRoutingTableRequest {
+	_result := &ApduDataExtWriteRoutingTableRequest{
 		ApduDataExt: NewApduDataExt(length),
 	}
-	child.Child = child
-	return child.ApduDataExt
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataExtWriteRoutingTableRequest(structType interface{}) *ApduDataExtWriteRoutingTableRequest {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueRead.go
index b2b77f7..7b3942c 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueRead.go
@@ -66,12 +66,12 @@ func (m *ApduDataGroupValueRead) GetParent() *ApduData {
 }
 
 // NewApduDataGroupValueRead factory function for ApduDataGroupValueRead
-func NewApduDataGroupValueRead(dataLength uint8) *ApduData {
-	child := &ApduDataGroupValueRead{
+func NewApduDataGroupValueRead(dataLength uint8) *ApduDataGroupValueRead {
+	_result := &ApduDataGroupValueRead{
 		ApduData: NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataGroupValueRead(structType interface{}) *ApduDataGroupValueRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go
index 57ccd2c..c4844c3 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go
@@ -88,14 +88,14 @@ func (m *ApduDataGroupValueResponse) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataGroupValueResponse factory function for ApduDataGroupValueResponse
-func NewApduDataGroupValueResponse(dataFirstByte int8, data []byte, dataLength uint8) *ApduData {
-	child := &ApduDataGroupValueResponse{
+func NewApduDataGroupValueResponse(dataFirstByte int8, data []byte, dataLength uint8) *ApduDataGroupValueResponse {
+	_result := &ApduDataGroupValueResponse{
 		DataFirstByte: dataFirstByte,
 		Data:          data,
 		ApduData:      NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataGroupValueResponse(structType interface{}) *ApduDataGroupValueResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go
index b960760..ea76418 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go
@@ -88,14 +88,14 @@ func (m *ApduDataGroupValueWrite) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataGroupValueWrite factory function for ApduDataGroupValueWrite
-func NewApduDataGroupValueWrite(dataFirstByte int8, data []byte, dataLength uint8) *ApduData {
-	child := &ApduDataGroupValueWrite{
+func NewApduDataGroupValueWrite(dataFirstByte int8, data []byte, dataLength uint8) *ApduDataGroupValueWrite {
+	_result := &ApduDataGroupValueWrite{
 		DataFirstByte: dataFirstByte,
 		Data:          data,
 		ApduData:      NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataGroupValueWrite(structType interface{}) *ApduDataGroupValueWrite {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressRead.go
index aaea487..31ed63f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressRead.go
@@ -64,12 +64,12 @@ func (m *ApduDataIndividualAddressRead) GetParent() *ApduData {
 }
 
 // NewApduDataIndividualAddressRead factory function for ApduDataIndividualAddressRead
-func NewApduDataIndividualAddressRead(dataLength uint8) *ApduData {
-	child := &ApduDataIndividualAddressRead{
+func NewApduDataIndividualAddressRead(dataLength uint8) *ApduDataIndividualAddressRead {
+	_result := &ApduDataIndividualAddressRead{
 		ApduData: NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataIndividualAddressRead(structType interface{}) *ApduDataIndividualAddressRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressResponse.go
index 564e4ea..0796e1e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressResponse.go
@@ -64,12 +64,12 @@ func (m *ApduDataIndividualAddressResponse) GetParent() *ApduData {
 }
 
 // NewApduDataIndividualAddressResponse factory function for ApduDataIndividualAddressResponse
-func NewApduDataIndividualAddressResponse(dataLength uint8) *ApduData {
-	child := &ApduDataIndividualAddressResponse{
+func NewApduDataIndividualAddressResponse(dataLength uint8) *ApduDataIndividualAddressResponse {
+	_result := &ApduDataIndividualAddressResponse{
 		ApduData: NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataIndividualAddressResponse(structType interface{}) *ApduDataIndividualAddressResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressWrite.go
index 98793e3..a767f03 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressWrite.go
@@ -64,12 +64,12 @@ func (m *ApduDataIndividualAddressWrite) GetParent() *ApduData {
 }
 
 // NewApduDataIndividualAddressWrite factory function for ApduDataIndividualAddressWrite
-func NewApduDataIndividualAddressWrite(dataLength uint8) *ApduData {
-	child := &ApduDataIndividualAddressWrite{
+func NewApduDataIndividualAddressWrite(dataLength uint8) *ApduDataIndividualAddressWrite {
+	_result := &ApduDataIndividualAddressWrite{
 		ApduData: NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataIndividualAddressWrite(structType interface{}) *ApduDataIndividualAddressWrite {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryRead.go
index ddea88f..cdfc7f6 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryRead.go
@@ -88,14 +88,14 @@ func (m *ApduDataMemoryRead) GetAddress() uint16 {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataMemoryRead factory function for ApduDataMemoryRead
-func NewApduDataMemoryRead(numBytes uint8, address uint16, dataLength uint8) *ApduData {
-	child := &ApduDataMemoryRead{
+func NewApduDataMemoryRead(numBytes uint8, address uint16, dataLength uint8) *ApduDataMemoryRead {
+	_result := &ApduDataMemoryRead{
 		NumBytes: numBytes,
 		Address:  address,
 		ApduData: NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataMemoryRead(structType interface{}) *ApduDataMemoryRead {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go
index 9020cc3..4fca695 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go
@@ -88,14 +88,14 @@ func (m *ApduDataMemoryResponse) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataMemoryResponse factory function for ApduDataMemoryResponse
-func NewApduDataMemoryResponse(address uint16, data []byte, dataLength uint8) *ApduData {
-	child := &ApduDataMemoryResponse{
+func NewApduDataMemoryResponse(address uint16, data []byte, dataLength uint8) *ApduDataMemoryResponse {
+	_result := &ApduDataMemoryResponse{
 		Address:  address,
 		Data:     data,
 		ApduData: NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataMemoryResponse(structType interface{}) *ApduDataMemoryResponse {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryWrite.go
index 581dced..8028ce2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryWrite.go
@@ -64,12 +64,12 @@ func (m *ApduDataMemoryWrite) GetParent() *ApduData {
 }
 
 // NewApduDataMemoryWrite factory function for ApduDataMemoryWrite
-func NewApduDataMemoryWrite(dataLength uint8) *ApduData {
-	child := &ApduDataMemoryWrite{
+func NewApduDataMemoryWrite(dataLength uint8) *ApduDataMemoryWrite {
+	_result := &ApduDataMemoryWrite{
 		ApduData: NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataMemoryWrite(structType interface{}) *ApduDataMemoryWrite {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataOther.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataOther.go
index b235101..8798186 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataOther.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataOther.go
@@ -81,13 +81,13 @@ func (m *ApduDataOther) GetExtendedApdu() *ApduDataExt {
 ///////////////////////////////////////////////////////////
 
 // NewApduDataOther factory function for ApduDataOther
-func NewApduDataOther(extendedApdu *ApduDataExt, dataLength uint8) *ApduData {
-	child := &ApduDataOther{
+func NewApduDataOther(extendedApdu *ApduDataExt, dataLength uint8) *ApduDataOther {
+	_result := &ApduDataOther{
 		ExtendedApdu: extendedApdu,
 		ApduData:     NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataOther(structType interface{}) *ApduDataOther {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataRestart.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataRestart.go
index 6c1d3b1..11ace95 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataRestart.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataRestart.go
@@ -64,12 +64,12 @@ func (m *ApduDataRestart) GetParent() *ApduData {
 }
 
 // NewApduDataRestart factory function for ApduDataRestart
-func NewApduDataRestart(dataLength uint8) *ApduData {
-	child := &ApduDataRestart{
+func NewApduDataRestart(dataLength uint8) *ApduDataRestart {
+	_result := &ApduDataRestart{
 		ApduData: NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataRestart(structType interface{}) *ApduDataRestart {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataUserMessage.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataUserMessage.go
index 87783be..1a9a28c 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataUserMessage.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataUserMessage.go
@@ -64,12 +64,12 @@ func (m *ApduDataUserMessage) GetParent() *ApduData {
 }
 
 // NewApduDataUserMessage factory function for ApduDataUserMessage
-func NewApduDataUserMessage(dataLength uint8) *ApduData {
-	child := &ApduDataUserMessage{
+func NewApduDataUserMessage(dataLength uint8) *ApduDataUserMessage {
+	_result := &ApduDataUserMessage{
 		ApduData: NewApduData(dataLength),
 	}
-	child.Child = child
-	return child.ApduData
+	_result.Child = _result
+	return _result
 }
 
 func CastApduDataUserMessage(structType interface{}) *ApduDataUserMessage {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
index 232457c..eb0e367 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
@@ -72,6 +72,9 @@ func CastCEMI(structType interface{}) *CEMI {
 	if casted, ok := structType.(*CEMI); ok {
 		return casted
 	}
+	if casted, ok := structType.(ICEMIChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
index 2666491..4c313dd 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
@@ -69,6 +69,9 @@ func CastCEMIAdditionalInformation(structType interface{}) *CEMIAdditionalInform
 	if casted, ok := structType.(*CEMIAdditionalInformation); ok {
 		return casted
 	}
+	if casted, ok := structType.(ICEMIAdditionalInformationChild); ok {
+		return casted.GetParent()
+	}
 	return nil
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
index a460dc0..13cd9dc 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
@@ -118,8 +118,8 @@ func (m *CEMIAdditionalInformationBusmonitorInfo) GetSequenceNumber() uint8 {
 ///////////////////////////////////////////////////////////
 
 // NewCEMIAdditionalInformationBusmonitorInfo factory function for CEMIAdditionalInformationBusmonitorInfo
-func NewCEMIAdditionalInformationBusmonitorInfo(frameErrorFlag bool, bitErrorFlag bool, parityErrorFlag bool, unknownFlag bool, lostFlag bool, sequenceNumber uint8) *CEMIAdditionalInformation {
-	child := &CEMIAdditionalInformationBusmonitorInfo{
+func NewCEMIAdditionalInformationBusmonitorInfo(frameErrorFlag bool, bitErrorFlag bool, parityErrorFlag bool, unknownFlag bool, lostFlag bool, sequenceNumber uint8) *CEMIAdditionalInformationBusmonitorInfo {
+	_result := &CEMIAdditionalInformationBusmonitorInfo{
 		FrameErrorFlag:            frameErrorFlag,
 		BitErrorFlag:              bitErrorFlag,
 		ParityErrorFlag:           parityErrorFlag,
@@ -128,8 +128,8 @@ func NewCEMIAdditionalInformationBusmonitorInfo(frameErrorFlag bool, bitErrorFla
 		SequenceNumber:            sequenceNumber,
 		CEMIAdditionalInformation: NewCEMIAdditionalInformation(),
 	}
-	child.Child = child
-	return child.CEMIAdditionalInformation
+	_result.Child = _result
+	return _result
 }
 
 func CastCEMIAdditionalInformationBusmonitorInfo(structType interface{}) *CEMIAdditionalInformationBusmonitorInfo {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
index b8d606b..26b30a1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
@@ -83,13 +83,13 @@ func (m *CEMIAdditionalInformationRelativeTimestamp) GetRelativeTimestamp() *Rel
 ///////////////////////////////////////////////////////////
 
 // NewCEMIAdditionalInformationRelativeTimestamp factory function for CEMIAdditionalInformationRelativeTimestamp
-func NewCEMIAdditionalInformationRelativeTimestamp(relativeTimestamp *RelativeTimestamp) *CEMIAdditionalInformation {
-	child := &CEMIAdditionalInformationRelativeTimestamp{
+func NewCEMIAdditionalInformationRelativeTimestamp(relativeTimestamp *RelativeTimestamp) *CEMIAdditionalInformationRelativeTimestamp {
+	_result := &CEMIAdditionalInformationRelativeTimestamp{
 		RelativeTimestamp:         relativeTimestamp,
 		CEMIAdditionalInformation: NewCEMIAdditionalInformation(),
 	}
-	child.Child = child
-	return child.CEMIAdditionalInformation
+	_result.Child = _result
+	return _result
 }
 
 func CastCEMIAdditionalInformationRelativeTimestamp(structType interface{}) *CEMIAdditionalInformationRelativeTimestamp {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTable.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTable.go
index 68c617c..b109ee8 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTable.go
... 3850 lines suppressed ...