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/07 17:17:45 UTC

[plc4x] branch develop updated: refactor(plc4go/codegen): flipped parse 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 ca65d6c  refactor(plc4go/codegen): flipped parse functions of child to return the actual child
ca65d6c is described below

commit ca65d6cc66e4d67b5bebca035a0151de2be548aa
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Mar 7 18:17:37 2022 +0100

    refactor(plc4go/codegen): flipped parse functions of child to return the actual child
---
 .../resources/templates/go/model-template.go.ftlh  | 16 ++--
 .../src/main/resources/protocols/test/test.mspec   | 25 +-----
 .../model/CIPEncapsulationConnectionRequest.go     |  4 +-
 .../model/CIPEncapsulationConnectionResponse.go    |  4 +-
 .../readwrite/model/CIPEncapsulationPacket.go      | 18 +++--
 .../readwrite/model/CIPEncapsulationReadRequest.go |  4 +-
 .../model/CIPEncapsulationReadResponse.go          |  4 +-
 .../readwrite/model/DF1CommandRequestMessage.go    |  4 +-
 ...mandResponseMessageProtectedTypedLogicalRead.go |  4 +-
 .../abeth/readwrite/model/DF1RequestCommand.go     | 12 ++-
 .../abeth/readwrite/model/DF1RequestMessage.go     | 12 ++-
 .../model/DF1RequestProtectedTypedLogicalRead.go   |  4 +-
 .../abeth/readwrite/model/DF1ResponseMessage.go    | 12 ++-
 .../model/AdsAddDeviceNotificationRequest.go       |  4 +-
 .../model/AdsAddDeviceNotificationResponse.go      |  4 +-
 .../internal/plc4go/ads/readwrite/model/AdsData.go | 50 ++++++------
 .../model/AdsDeleteDeviceNotificationRequest.go    |  4 +-
 .../model/AdsDeleteDeviceNotificationResponse.go   |  4 +-
 .../model/AdsDeviceNotificationRequest.go          |  4 +-
 .../model/AdsDeviceNotificationResponse.go         |  4 +-
 .../ads/readwrite/model/AdsInvalidRequest.go       |  4 +-
 .../ads/readwrite/model/AdsInvalidResponse.go      |  4 +-
 .../ads/readwrite/model/AdsMultiRequestItem.go     | 16 ++--
 .../ads/readwrite/model/AdsMultiRequestItemRead.go |  4 +-
 .../model/AdsMultiRequestItemReadWrite.go          |  4 +-
 .../readwrite/model/AdsMultiRequestItemWrite.go    |  4 +-
 .../readwrite/model/AdsReadDeviceInfoRequest.go    |  4 +-
 .../readwrite/model/AdsReadDeviceInfoResponse.go   |  4 +-
 .../plc4go/ads/readwrite/model/AdsReadRequest.go   |  4 +-
 .../plc4go/ads/readwrite/model/AdsReadResponse.go  |  4 +-
 .../ads/readwrite/model/AdsReadStateRequest.go     |  4 +-
 .../ads/readwrite/model/AdsReadStateResponse.go    |  4 +-
 .../ads/readwrite/model/AdsReadWriteRequest.go     |  4 +-
 .../ads/readwrite/model/AdsReadWriteResponse.go    |  4 +-
 .../ads/readwrite/model/AdsWriteControlRequest.go  |  4 +-
 .../ads/readwrite/model/AdsWriteControlResponse.go |  4 +-
 .../plc4go/ads/readwrite/model/AdsWriteRequest.go  |  4 +-
 .../plc4go/ads/readwrite/model/AdsWriteResponse.go |  4 +-
 .../plc4go/bacnetip/readwrite/model/APDU.go        | 28 ++++---
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   |  4 +-
 .../bacnetip/readwrite/model/APDUComplexAck.go     |  4 +-
 .../readwrite/model/APDUConfirmedRequest.go        |  4 +-
 .../plc4go/bacnetip/readwrite/model/APDUError.go   |  4 +-
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  |  4 +-
 .../bacnetip/readwrite/model/APDUSegmentAck.go     |  4 +-
 .../bacnetip/readwrite/model/APDUSimpleAck.go      |  4 +-
 .../readwrite/model/APDUUnconfirmedRequest.go      |  4 +-
 .../plc4go/bacnetip/readwrite/model/APDUUnknown.go |  4 +-
 .../readwrite/model/BACnetApplicationTag.go        | 36 +++++----
 .../model/BACnetApplicationTagBitString.go         |  4 +-
 .../readwrite/model/BACnetApplicationTagBoolean.go |  4 +-
 .../model/BACnetApplicationTagCharacterString.go   |  4 +-
 .../readwrite/model/BACnetApplicationTagDate.go    |  4 +-
 .../readwrite/model/BACnetApplicationTagDouble.go  |  4 +-
 .../model/BACnetApplicationTagEnumerated.go        |  4 +-
 .../readwrite/model/BACnetApplicationTagNull.go    |  4 +-
 .../model/BACnetApplicationTagObjectIdentifier.go  |  4 +-
 .../model/BACnetApplicationTagOctetString.go       |  4 +-
 .../readwrite/model/BACnetApplicationTagReal.go    |  4 +-
 .../model/BACnetApplicationTagSignedInteger.go     |  4 +-
 .../readwrite/model/BACnetApplicationTagTime.go    |  4 +-
 .../model/BACnetApplicationTagUnsignedInteger.go   |  4 +-
 .../bacnetip/readwrite/model/BACnetClosingTag.go   |  4 +-
 .../readwrite/model/BACnetConfirmedServiceACK.go   | 40 +++++-----
 .../BACnetConfirmedServiceACKAtomicReadFile.go     |  4 +-
 .../BACnetConfirmedServiceACKAtomicWriteFile.go    |  4 +-
 ...tConfirmedServiceACKConfirmedPrivateTransfer.go |  4 +-
 .../model/BACnetConfirmedServiceACKCreateObject.go |  4 +-
 .../BACnetConfirmedServiceACKGetAlarmSummary.go    |  4 +-
 ...ACnetConfirmedServiceACKGetEnrollmentSummary.go |  4 +-
 ...BACnetConfirmedServiceACKGetEventInformation.go |  4 +-
 .../model/BACnetConfirmedServiceACKReadProperty.go |  4 +-
 ...ACnetConfirmedServiceACKReadPropertyMultiple.go |  4 +-
 .../model/BACnetConfirmedServiceACKReadRange.go    |  4 +-
 ...BACnetConfirmedServiceACKRemovedAuthenticate.go |  4 +-
 ...rmedServiceACKRemovedReadPropertyConditional.go |  4 +-
 .../model/BACnetConfirmedServiceACKVTData.go       |  4 +-
 .../model/BACnetConfirmedServiceACKVTOpen.go       |  4 +-
 .../model/BACnetConfirmedServiceAddListElement.go  |  4 +-
 .../model/BACnetConfirmedServiceRequest.go         | 74 +++++++++--------
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |  4 +-
 .../BACnetConfirmedServiceRequestAddListElement.go |  4 +-
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |  4 +-
 ...tConfirmedServiceRequestAtomicReadFileRecord.go |  4 +-
 ...tConfirmedServiceRequestAtomicReadFileStream.go |  4 +-
 ...edServiceRequestAtomicReadFileStreamOrRecord.go | 14 ++--
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |  4 +-
 ...firmedServiceRequestConfirmedCOVNotification.go |  4 +-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |  4 +-
 ...rmedServiceRequestConfirmedEventNotification.go |  4 +-
 ...firmedServiceRequestConfirmedPrivateTransfer.go |  4 +-
 ...tConfirmedServiceRequestConfirmedTextMessage.go |  4 +-
 ...ACnetConfirmedServiceRequestConfirmedUnknown.go |  4 +-
 .../BACnetConfirmedServiceRequestCreateObject.go   |  4 +-
 .../BACnetConfirmedServiceRequestDeleteObject.go   |  4 +-
 ...rmedServiceRequestDeviceCommunicationControl.go |  4 +-
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |  4 +-
 ...etConfirmedServiceRequestGetEventInformation.go |  4 +-
 ...etConfirmedServiceRequestLifeSafetyOperation.go |  4 +-
 .../BACnetConfirmedServiceRequestReadProperty.go   |  4 +-
 ...tConfirmedServiceRequestReadPropertyMultiple.go |  4 +-
 .../BACnetConfirmedServiceRequestReadRange.go      |  4 +-
 ...netConfirmedServiceRequestReinitializeDevice.go |  4 +-
 ...CnetConfirmedServiceRequestRemoveListElement.go |  4 +-
 ...etConfirmedServiceRequestRemovedAuthenticate.go |  4 +-
 ...ServiceRequestRemovedReadPropertyConditional.go |  4 +-
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |  4 +-
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |  4 +-
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |  4 +-
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |  4 +-
 .../model/BACnetConfirmedServiceRequestVTClose.go  |  4 +-
 .../model/BACnetConfirmedServiceRequestVTData.go   |  4 +-
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |  4 +-
 .../BACnetConfirmedServiceRequestWriteProperty.go  |  4 +-
 ...ConfirmedServiceRequestWritePropertyMultiple.go |  4 +-
 .../readwrite/model/BACnetConstructedData.go       | 18 +++--
 .../model/BACnetConstructedDataCommand.go          |  4 +-
 .../model/BACnetConstructedDataEventTimestamps.go  |  4 +-
 .../model/BACnetConstructedDataLifeSafetyZone.go   |  4 +-
 .../model/BACnetConstructedDataUnspecified.go      |  4 +-
 .../bacnetip/readwrite/model/BACnetContextTag.go   | 50 ++++++------
 .../readwrite/model/BACnetContextTagBitString.go   |  4 +-
 .../readwrite/model/BACnetContextTagBoolean.go     |  4 +-
 .../model/BACnetContextTagCharacterString.go       |  4 +-
 .../readwrite/model/BACnetContextTagDate.go        |  4 +-
 .../readwrite/model/BACnetContextTagDeviceState.go |  4 +-
 .../readwrite/model/BACnetContextTagDouble.go      |  4 +-
 .../readwrite/model/BACnetContextTagEmpty.go       |  4 +-
 .../readwrite/model/BACnetContextTagEnumerated.go  |  4 +-
 .../readwrite/model/BACnetContextTagEventState.go  |  4 +-
 .../readwrite/model/BACnetContextTagEventType.go   |  4 +-
 .../readwrite/model/BACnetContextTagNotifyType.go  |  4 +-
 .../model/BACnetContextTagObjectIdentifier.go      |  4 +-
 .../readwrite/model/BACnetContextTagOctetString.go |  4 +-
 .../model/BACnetContextTagPropertyIdentifier.go    |  4 +-
 .../readwrite/model/BACnetContextTagReal.go        |  4 +-
 .../model/BACnetContextTagSignedInteger.go         |  4 +-
 .../readwrite/model/BACnetContextTagTime.go        |  4 +-
 .../model/BACnetContextTagUnsignedInteger.go       |  4 +-
 .../plc4go/bacnetip/readwrite/model/BACnetError.go | 52 ++++++------
 .../readwrite/model/BACnetErrorAcknowledgeAlarm.go |  4 +-
 .../readwrite/model/BACnetErrorAtomicReadFile.go   |  4 +-
 .../readwrite/model/BACnetErrorAtomicWriteFile.go  |  4 +-
 .../model/BACnetErrorConfirmedEventNotification.go |  4 +-
 .../model/BACnetErrorConfirmedPrivateTransfer.go   |  4 +-
 .../readwrite/model/BACnetErrorCreateObject.go     |  4 +-
 .../BACnetErrorDeviceCommunicationProtocol.go      |  4 +-
 .../readwrite/model/BACnetErrorGetAlarmSummary.go  |  4 +-
 .../model/BACnetErrorGetEnrollmentSummary.go       |  4 +-
 .../model/BACnetErrorGetEventInformation.go        |  4 +-
 .../readwrite/model/BACnetErrorPasswordFailure.go  |  4 +-
 .../readwrite/model/BACnetErrorReadProperty.go     |  4 +-
 .../model/BACnetErrorReadPropertyMultiple.go       |  4 +-
 .../readwrite/model/BACnetErrorReadRange.go        |  4 +-
 .../model/BACnetErrorRemovedAuthenticate.go        |  4 +-
 .../BACnetErrorRemovedReadPropertyConditional.go   |  4 +-
 .../bacnetip/readwrite/model/BACnetErrorUnknown.go |  4 +-
 .../bacnetip/readwrite/model/BACnetErrorVTData.go  |  4 +-
 .../bacnetip/readwrite/model/BACnetErrorVTOpen.go  |  4 +-
 .../readwrite/model/BACnetErrorWriteProperty.go    |  4 +-
 .../model/BACnetNotificationParameters.go          | 28 ++++---
 .../BACnetNotificationParametersBufferReady.go     |  4 +-
 ...ACnetNotificationParametersChangeOfBitString.go |  4 +-
 .../BACnetNotificationParametersChangeOfState.go   |  4 +-
 .../BACnetNotificationParametersChangeOfValue.go   |  4 +-
 ...tNotificationParametersChangeOfValueNewValue.go | 14 ++--
 ...onParametersChangeOfValueNewValueChangedBits.go |  4 +-
 ...nParametersChangeOfValueNewValueChangedValue.go |  4 +-
 ...BACnetNotificationParametersComplexEventType.go |  4 +-
 .../model/BACnetNotificationParametersExtended.go  |  4 +-
 .../BACnetNotificationParametersFloatingLimit.go   |  4 +-
 .../BACnetNotificationParametersOutOfRange.go      |  4 +-
 .../BACnetNotificationParametersUnsignedRange.go   |  4 +-
 .../bacnetip/readwrite/model/BACnetOpeningTag.go   |  4 +-
 .../readwrite/model/BACnetPropertyStates.go        | 16 ++--
 .../readwrite/model/BACnetPropertyStatesAction.go  |  4 +-
 .../model/BACnetPropertyStatesBinaryValue.go       |  4 +-
 .../readwrite/model/BACnetPropertyStatesBoolean.go |  4 +-
 .../bacnetip/readwrite/model/BACnetServiceAck.go   | 38 +++++----
 .../model/BACnetServiceAckAtomicReadFile.go        |  4 +-
 .../model/BACnetServiceAckAtomicReadFileRecord.go  |  4 +-
 .../model/BACnetServiceAckAtomicReadFileStream.go  |  4 +-
 ...BACnetServiceAckAtomicReadFileStreamOrRecord.go | 14 ++--
 .../model/BACnetServiceAckAtomicWriteFile.go       |  4 +-
 .../BACnetServiceAckConfirmedPrivateTransfer.go    |  4 +-
 .../model/BACnetServiceAckCreateObject.go          |  4 +-
 .../model/BACnetServiceAckGetAlarmSummary.go       |  4 +-
 .../model/BACnetServiceAckGetEnrollmentSummary.go  |  4 +-
 .../model/BACnetServiceAckGetEventInformation.go   |  4 +-
 .../model/BACnetServiceAckReadProperty.go          |  4 +-
 .../model/BACnetServiceAckReadPropertyMultiple.go  |  4 +-
 .../readwrite/model/BACnetServiceAckReadRange.go   |  4 +-
 .../model/BACnetServiceAckRemovedAuthenticate.go   |  4 +-
 ...CnetServiceAckRemovedReadPropertyConditional.go |  4 +-
 .../readwrite/model/BACnetServiceAckVTData.go      |  4 +-
 .../readwrite/model/BACnetServiceAckVTOpen.go      |  4 +-
 .../bacnetip/readwrite/model/BACnetTimeStamp.go    | 16 ++--
 .../readwrite/model/BACnetTimeStampDateTime.go     |  4 +-
 .../readwrite/model/BACnetTimeStampSequence.go     |  4 +-
 .../readwrite/model/BACnetTimeStampTime.go         |  4 +-
 .../model/BACnetUnconfirmedServiceRequest.go       | 36 +++++----
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |  4 +-
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |  4 +-
 ...UnconfirmedServiceRequestTimeSynchronization.go |  4 +-
 ...onfirmedServiceRequestUTCTimeSynchronization.go |  4 +-
 ...rmedServiceRequestUnconfirmedCOVNotification.go |  4 +-
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |  4 +-
 ...edServiceRequestUnconfirmedEventNotification.go |  4 +-
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go |  4 +-
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |  4 +-
 ...tUnconfirmedServiceRequestUnconfirmedUnknown.go |  4 +-
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |  4 +-
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |  4 +-
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |  4 +-
 .../plc4go/bacnetip/readwrite/model/BVLC.go        | 36 +++++----
 .../model/BVLCDeleteForeignDeviceTableEntry.go     |  4 +-
 .../model/BVLCDistributeBroadcastToNetwork.go      |  4 +-
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |  4 +-
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |  4 +-
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |  4 +-
 .../model/BVLCReadBroadcastDistributionTable.go    |  4 +-
 .../model/BVLCReadBroadcastDistributionTableAck.go |  4 +-
 .../readwrite/model/BVLCReadForeignDeviceTable.go  |  4 +-
 .../model/BVLCReadForeignDeviceTableAck.go         |  4 +-
 .../readwrite/model/BVLCRegisterForeignDevice.go   |  4 +-
 .../plc4go/bacnetip/readwrite/model/BVLCResult.go  |  4 +-
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |  4 +-
 .../model/BVLCWriteBroadcastDistributionTable.go   |  4 +-
 .../plc4go/bacnetip/readwrite/model/NLM.go         | 30 ++++---
 .../model/NLMDisconnectConnectionToNetwork.go      |  4 +-
 .../model/NLMEstablishConnectionToNetwork.go       |  4 +-
 .../readwrite/model/NLMIAmRouterToNetwork.go       |  4 +-
 .../readwrite/model/NLMICouldBeRouterToNetwork.go  |  4 +-
 .../readwrite/model/NLMInitalizeRoutingTable.go    |  4 +-
 .../readwrite/model/NLMInitalizeRoutingTableAck.go |  4 +-
 .../readwrite/model/NLMRejectRouterToNetwork.go    |  4 +-
 .../readwrite/model/NLMRouterAvailableToNetwork.go |  4 +-
 .../readwrite/model/NLMRouterBusyToNetwork.go      |  4 +-
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |  4 +-
 .../plc4go/cbus/readwrite/model/CALData.go         | 26 +++---
 .../readwrite/model/CALDataReplyAcknowledge.go     |  4 +-
 .../cbus/readwrite/model/CALDataReplyReply.go      |  4 +-
 .../cbus/readwrite/model/CALDataReplyStatus.go     |  4 +-
 .../readwrite/model/CALDataReplyStatusExtended.go  |  4 +-
 .../readwrite/model/CALDataRequestGetStatus.go     |  4 +-
 .../cbus/readwrite/model/CALDataRequestIdentify.go |  4 +-
 .../cbus/readwrite/model/CALDataRequestRecall.go   |  4 +-
 .../cbus/readwrite/model/CALDataRequestReset.go    |  4 +-
 .../plc4go/cbus/readwrite/model/CALReply.go        | 14 ++--
 .../plc4go/cbus/readwrite/model/CALReplyLong.go    |  4 +-
 .../plc4go/cbus/readwrite/model/CALReplyReply.go   |  4 +-
 .../plc4go/cbus/readwrite/model/CALReplyShort.go   |  4 +-
 .../plc4go/cbus/readwrite/model/CBusCommand.go     | 16 ++--
 .../model/CBusCommandPointToMultiPoint.go          |  4 +-
 .../readwrite/model/CBusCommandPointToPoint.go     |  4 +-
 .../model/CBusCommandPointToPointToMultiPoint.go   |  4 +-
 .../CBusCommandPointToPointToMultiPointNormal.go   |  4 +-
 .../CBusCommandPointToPointToMultiPointStatus.go   |  4 +-
 .../model/CBusPointToMultiPointCommand.go          | 14 ++--
 .../model/CBusPointToMultiPointCommandNormal.go    |  4 +-
 .../model/CBusPointToMultiPointCommandStatus.go    |  4 +-
 .../readwrite/model/CBusPointToPointCommand.go     | 14 ++--
 .../model/CBusPointToPointCommandDirect.go         |  4 +-
 .../model/CBusPointToPointCommandIndirect.go       |  4 +-
 .../model/CBusPointToPointToMultipointCommand.go   | 14 ++--
 .../plc4go/cbus/readwrite/model/Confirmation.go    | 20 +++--
 .../cbus/readwrite/model/ConfirmationReply.go      |  4 +-
 .../cbus/readwrite/model/ConfirmationSuccessful.go |  4 +-
 .../cbus/readwrite/model/ExclamationMarkReply.go   |  4 +-
 .../cbus/readwrite/model/IdentifyReplyCommand.go   | 46 ++++++-----
 .../IdentifyReplyCommandCurrentSenseLevels.go      |  4 +-
 .../model/IdentifyReplyCommandDSIStatus.go         |  4 +-
 .../readwrite/model/IdentifyReplyCommandDelays.go  |  4 +-
 ...dentifyReplyCommandExtendedDiagnosticSummary.go |  4 +-
 .../model/IdentifyReplyCommandFirmwareSummary.go   |  4 +-
 .../model/IdentifyReplyCommandFirmwareVersion.go   |  4 +-
 .../IdentifyReplyCommandGAVPhysicalAddresses.go    |  4 +-
 .../model/IdentifyReplyCommandGAVValuesCurrent.go  |  4 +-
 .../model/IdentifyReplyCommandGAVValuesStored.go   |  4 +-
 .../model/IdentifyReplyCommandLogicalAssignment.go |  4 +-
 .../model/IdentifyReplyCommandManufacturer.go      |  4 +-
 .../model/IdentifyReplyCommandMaximumLevels.go     |  4 +-
 .../model/IdentifyReplyCommandMinimumLevels.go     |  4 +-
 .../IdentifyReplyCommandNetworkTerminalLevels.go   |  4 +-
 .../model/IdentifyReplyCommandNetworkVoltage.go    |  4 +-
 .../model/IdentifyReplyCommandOutputUnitSummary.go |  4 +-
 .../model/IdentifyReplyCommandTerminalLevels.go    |  4 +-
 .../readwrite/model/IdentifyReplyCommandType.go    |  4 +-
 .../plc4go/cbus/readwrite/model/MonitoredSAL.go    | 14 ++--
 .../model/MonitoredSALLongFormSmartMode.go         |  4 +-
 .../cbus/readwrite/model/MonitoredSALReply.go      |  4 +-
 .../model/MonitoredSALShortFormBasicMode.go        |  4 +-
 .../readwrite/model/NotTransmittedCorruption.go    |  4 +-
 .../cbus/readwrite/model/NotTransmittedSyncLoss.go |  4 +-
 .../model/NotTransmittedToManyReTransmissions.go   |  4 +-
 .../cbus/readwrite/model/NotTransmittedTooLong.go  |  4 +-
 .../cbus/readwrite/model/ParameterChangeReply.go   |  4 +-
 .../plc4go/cbus/readwrite/model/PowerUpReply.go    |  4 +-
 .../internal/plc4go/cbus/readwrite/model/Reply.go  | 22 +++---
 .../plc4go/cbus/readwrite/model/SALData.go         | 18 +++--
 .../plc4go/cbus/readwrite/model/SALDataOff.go      |  4 +-
 .../plc4go/cbus/readwrite/model/SALDataOn.go       |  4 +-
 .../cbus/readwrite/model/SALDataRampToLevel.go     |  4 +-
 .../cbus/readwrite/model/SALDataTerminateRamp.go   |  4 +-
 .../plc4go/cbus/readwrite/model/StatusRequest.go   | 14 ++--
 .../readwrite/model/StatusRequestBinaryState.go    |  4 +-
 .../cbus/readwrite/model/StatusRequestLevel.go     |  4 +-
 .../plc4go/df1/readwrite/model/DF1Command.go       | 14 ++--
 .../plc4go/df1/readwrite/model/DF1Symbol.go        | 16 ++--
 .../df1/readwrite/model/DF1SymbolMessageFrame.go   |  4 +-
 .../readwrite/model/DF1SymbolMessageFrameACK.go    |  4 +-
 .../readwrite/model/DF1SymbolMessageFrameNAK.go    |  4 +-
 .../readwrite/model/DF1UnprotectedReadRequest.go   |  4 +-
 .../readwrite/model/DF1UnprotectedReadResponse.go  |  4 +-
 .../plc4go/eip/readwrite/model/CipRRData.go        |  4 +-
 .../plc4go/eip/readwrite/model/CipReadRequest.go   |  4 +-
 .../plc4go/eip/readwrite/model/CipReadResponse.go  |  4 +-
 .../plc4go/eip/readwrite/model/CipService.go       | 24 +++---
 .../eip/readwrite/model/CipUnconnectedRequest.go   |  4 +-
 .../plc4go/eip/readwrite/model/CipWriteRequest.go  |  4 +-
 .../plc4go/eip/readwrite/model/CipWriteResponse.go |  4 +-
 .../eip/readwrite/model/EipConnectionRequest.go    |  4 +-
 .../eip/readwrite/model/EipDisconnectRequest.go    |  4 +-
 .../plc4go/eip/readwrite/model/EipPacket.go        | 16 ++--
 .../eip/readwrite/model/MultipleServiceRequest.go  |  4 +-
 .../eip/readwrite/model/MultipleServiceResponse.go |  4 +-
 .../firmata/readwrite/model/FirmataCommand.go      | 20 +++--
 .../model/FirmataCommandProtocolVersion.go         |  4 +-
 .../model/FirmataCommandSetDigitalPinValue.go      |  4 +-
 .../readwrite/model/FirmataCommandSetPinMode.go    |  4 +-
 .../firmata/readwrite/model/FirmataCommandSysex.go |  4 +-
 .../readwrite/model/FirmataCommandSystemReset.go   |  4 +-
 .../firmata/readwrite/model/FirmataMessage.go      | 20 +++--
 .../readwrite/model/FirmataMessageAnalogIO.go      |  4 +-
 .../readwrite/model/FirmataMessageCommand.go       |  4 +-
 .../readwrite/model/FirmataMessageDigitalIO.go     |  4 +-
 .../model/FirmataMessageSubscribeAnalogPinValue.go |  4 +-
 .../FirmataMessageSubscribeDigitalPinValue.go      |  4 +-
 .../plc4go/firmata/readwrite/model/SysexCommand.go | 40 +++++-----
 .../model/SysexCommandAnalogMappingQueryRequest.go |  4 +-
 .../SysexCommandAnalogMappingQueryResponse.go      |  4 +-
 .../model/SysexCommandAnalogMappingResponse.go     |  4 +-
 .../readwrite/model/SysexCommandCapabilityQuery.go |  4 +-
 .../model/SysexCommandCapabilityResponse.go        |  4 +-
 .../readwrite/model/SysexCommandExtendedAnalog.go  |  4 +-
 .../readwrite/model/SysexCommandExtendedId.go      |  4 +-
 .../readwrite/model/SysexCommandPinStateQuery.go   |  4 +-
 .../model/SysexCommandPinStateResponse.go          |  4 +-
 .../model/SysexCommandReportFirmwareRequest.go     |  4 +-
 .../model/SysexCommandReportFirmwareResponse.go    |  4 +-
 .../model/SysexCommandSamplingInterval.go          |  4 +-
 .../readwrite/model/SysexCommandStringData.go      |  4 +-
 .../model/SysexCommandSysexNonRealtime.go          |  4 +-
 .../readwrite/model/SysexCommandSysexRealtime.go   |  4 +-
 .../plc4go/knxnetip/readwrite/model/Apdu.go        | 14 ++--
 .../plc4go/knxnetip/readwrite/model/ApduControl.go | 18 +++--
 .../knxnetip/readwrite/model/ApduControlAck.go     |  4 +-
 .../knxnetip/readwrite/model/ApduControlConnect.go |  4 +-
 .../readwrite/model/ApduControlContainer.go        |  4 +-
 .../readwrite/model/ApduControlDisconnect.go       |  4 +-
 .../knxnetip/readwrite/model/ApduControlNack.go    |  4 +-
 .../plc4go/knxnetip/readwrite/model/ApduData.go    | 42 +++++-----
 .../knxnetip/readwrite/model/ApduDataAdcRead.go    |  4 +-
 .../readwrite/model/ApduDataAdcResponse.go         |  4 +-
 .../knxnetip/readwrite/model/ApduDataContainer.go  |  4 +-
 .../model/ApduDataDeviceDescriptorRead.go          |  4 +-
 .../model/ApduDataDeviceDescriptorResponse.go      |  4 +-
 .../plc4go/knxnetip/readwrite/model/ApduDataExt.go | 92 +++++++++++-----------
 .../readwrite/model/ApduDataExtAuthorizeRequest.go |  4 +-
 .../model/ApduDataExtAuthorizeResponse.go          |  4 +-
 .../model/ApduDataExtDomainAddressRead.go          |  4 +-
 .../model/ApduDataExtDomainAddressResponse.go      |  4 +-
 .../model/ApduDataExtDomainAddressSelectiveRead.go |  4 +-
 .../ApduDataExtDomainAddressSerialNumberRead.go    |  4 +-
 ...ApduDataExtDomainAddressSerialNumberResponse.go |  4 +-
 .../ApduDataExtDomainAddressSerialNumberWrite.go   |  4 +-
 .../model/ApduDataExtDomainAddressWrite.go         |  4 +-
 .../model/ApduDataExtFileStreamInfoReport.go       |  4 +-
 .../ApduDataExtGroupPropertyValueInfoReport.go     |  4 +-
 .../model/ApduDataExtGroupPropertyValueRead.go     |  4 +-
 .../model/ApduDataExtGroupPropertyValueResponse.go |  4 +-
 .../model/ApduDataExtGroupPropertyValueWrite.go    |  4 +-
 ...ApduDataExtIndividualAddressSerialNumberRead.go |  4 +-
 ...DataExtIndividualAddressSerialNumberResponse.go |  4 +-
 ...pduDataExtIndividualAddressSerialNumberWrite.go |  4 +-
 .../readwrite/model/ApduDataExtKeyResponse.go      |  4 +-
 .../readwrite/model/ApduDataExtKeyWrite.go         |  4 +-
 .../readwrite/model/ApduDataExtLinkRead.go         |  4 +-
 .../readwrite/model/ApduDataExtLinkResponse.go     |  4 +-
 .../readwrite/model/ApduDataExtLinkWrite.go        |  4 +-
 .../readwrite/model/ApduDataExtMemoryBitWrite.go   |  4 +-
 .../model/ApduDataExtNetworkParameterRead.go       |  4 +-
 .../model/ApduDataExtNetworkParameterResponse.go   |  4 +-
 .../model/ApduDataExtNetworkParameterWrite.go      |  4 +-
 .../model/ApduDataExtOpenRoutingTableRequest.go    |  4 +-
 .../model/ApduDataExtPropertyDescriptionRead.go    |  4 +-
 .../ApduDataExtPropertyDescriptionResponse.go      |  4 +-
 .../model/ApduDataExtPropertyValueRead.go          |  4 +-
 .../model/ApduDataExtPropertyValueResponse.go      |  4 +-
 .../model/ApduDataExtPropertyValueWrite.go         |  4 +-
 .../model/ApduDataExtReadRouterMemoryRequest.go    |  4 +-
 .../model/ApduDataExtReadRouterMemoryResponse.go   |  4 +-
 .../model/ApduDataExtReadRouterStatusRequest.go    |  4 +-
 .../model/ApduDataExtReadRouterStatusResponse.go   |  4 +-
 .../model/ApduDataExtReadRoutingTableRequest.go    |  4 +-
 .../model/ApduDataExtReadRoutingTableResponse.go   |  4 +-
 .../model/ApduDataExtWriteRouterMemoryRequest.go   |  4 +-
 .../model/ApduDataExtWriteRouterStatusRequest.go   |  4 +-
 .../model/ApduDataExtWriteRoutingTableRequest.go   |  4 +-
 .../readwrite/model/ApduDataGroupValueRead.go      |  4 +-
 .../readwrite/model/ApduDataGroupValueResponse.go  |  4 +-
 .../readwrite/model/ApduDataGroupValueWrite.go     |  4 +-
 .../model/ApduDataIndividualAddressRead.go         |  4 +-
 .../model/ApduDataIndividualAddressResponse.go     |  4 +-
 .../model/ApduDataIndividualAddressWrite.go        |  4 +-
 .../knxnetip/readwrite/model/ApduDataMemoryRead.go |  4 +-
 .../readwrite/model/ApduDataMemoryResponse.go      |  4 +-
 .../readwrite/model/ApduDataMemoryWrite.go         |  4 +-
 .../knxnetip/readwrite/model/ApduDataOther.go      |  4 +-
 .../knxnetip/readwrite/model/ApduDataRestart.go    |  4 +-
 .../readwrite/model/ApduDataUserMessage.go         |  4 +-
 .../plc4go/knxnetip/readwrite/model/CEMI.go        | 56 +++++++------
 .../readwrite/model/CEMIAdditionalInformation.go   | 14 ++--
 .../CEMIAdditionalInformationBusmonitorInfo.go     |  4 +-
 .../CEMIAdditionalInformationRelativeTimestamp.go  |  4 +-
 .../knxnetip/readwrite/model/ComObjectTable.go     | 16 ++--
 .../model/ComObjectTableRealisationType1.go        |  4 +-
 .../model/ComObjectTableRealisationType2.go        |  4 +-
 .../model/ComObjectTableRealisationType6.go        |  4 +-
 .../knxnetip/readwrite/model/ConnectionRequest.go  |  4 +-
 .../model/ConnectionRequestInformation.go          | 14 ++--
 ...ConnectionRequestInformationDeviceManagement.go |  4 +-
 ...ConnectionRequestInformationTunnelConnection.go |  4 +-
 .../knxnetip/readwrite/model/ConnectionResponse.go |  4 +-
 .../readwrite/model/ConnectionResponseDataBlock.go | 14 ++--
 .../ConnectionResponseDataBlockDeviceManagement.go |  4 +-
 .../ConnectionResponseDataBlockTunnelConnection.go |  4 +-
 .../readwrite/model/ConnectionStateRequest.go      |  4 +-
 .../readwrite/model/ConnectionStateResponse.go     |  4 +-
 .../knxnetip/readwrite/model/DescriptionRequest.go |  4 +-
 .../readwrite/model/DescriptionResponse.go         |  4 +-
 .../readwrite/model/DeviceConfigurationAck.go      |  4 +-
 .../readwrite/model/DeviceConfigurationRequest.go  |  4 +-
 .../knxnetip/readwrite/model/DisconnectRequest.go  |  4 +-
 .../knxnetip/readwrite/model/DisconnectResponse.go |  4 +-
 .../knxnetip/readwrite/model/KnxGroupAddress.go    | 16 ++--
 .../readwrite/model/KnxGroupAddress2Level.go       |  4 +-
 .../readwrite/model/KnxGroupAddress3Level.go       |  4 +-
 .../readwrite/model/KnxGroupAddressFreeLevel.go    |  4 +-
 .../knxnetip/readwrite/model/KnxNetIpCore.go       |  4 +-
 .../readwrite/model/KnxNetIpDeviceManagement.go    |  4 +-
 .../knxnetip/readwrite/model/KnxNetIpMessage.go    | 42 +++++-----
 .../knxnetip/readwrite/model/KnxNetIpRouting.go    |  4 +-
 .../knxnetip/readwrite/model/KnxNetIpTunneling.go  |  4 +-
 .../knxnetip/readwrite/model/KnxNetObjectServer.go |  4 +-
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |  4 +-
 .../readwrite/model/KnxNetRemoteLogging.go         |  4 +-
 .../plc4go/knxnetip/readwrite/model/LBusmonInd.go  |  4 +-
 .../plc4go/knxnetip/readwrite/model/LDataCon.go    |  4 +-
 .../knxnetip/readwrite/model/LDataExtended.go      |  4 +-
 .../plc4go/knxnetip/readwrite/model/LDataFrame.go  | 16 ++--
 .../knxnetip/readwrite/model/LDataFrameACK.go      |  4 +-
 .../plc4go/knxnetip/readwrite/model/LDataInd.go    |  4 +-
 .../plc4go/knxnetip/readwrite/model/LDataReq.go    |  4 +-
 .../plc4go/knxnetip/readwrite/model/LPollData.go   |  4 +-
 .../knxnetip/readwrite/model/LPollDataCon.go       |  4 +-
 .../knxnetip/readwrite/model/LPollDataReq.go       |  4 +-
 .../plc4go/knxnetip/readwrite/model/LRawCon.go     |  4 +-
 .../plc4go/knxnetip/readwrite/model/LRawInd.go     |  4 +-
 .../plc4go/knxnetip/readwrite/model/LRawReq.go     |  4 +-
 .../readwrite/model/MFuncPropCommandReq.go         |  4 +-
 .../knxnetip/readwrite/model/MFuncPropCon.go       |  4 +-
 .../readwrite/model/MFuncPropStateReadReq.go       |  4 +-
 .../knxnetip/readwrite/model/MPropInfoInd.go       |  4 +-
 .../knxnetip/readwrite/model/MPropReadCon.go       |  4 +-
 .../knxnetip/readwrite/model/MPropReadReq.go       |  4 +-
 .../knxnetip/readwrite/model/MPropWriteCon.go      |  4 +-
 .../knxnetip/readwrite/model/MPropWriteReq.go      |  4 +-
 .../plc4go/knxnetip/readwrite/model/MResetInd.go   |  4 +-
 .../plc4go/knxnetip/readwrite/model/MResetReq.go   |  4 +-
 .../knxnetip/readwrite/model/RoutingIndication.go  |  4 +-
 .../knxnetip/readwrite/model/SearchRequest.go      |  4 +-
 .../knxnetip/readwrite/model/SearchResponse.go     |  4 +-
 .../plc4go/knxnetip/readwrite/model/ServiceId.go   | 24 +++---
 .../knxnetip/readwrite/model/TDataConnectedInd.go  |  4 +-
 .../knxnetip/readwrite/model/TDataConnectedReq.go  |  4 +-
 .../knxnetip/readwrite/model/TDataIndividualInd.go |  4 +-
 .../knxnetip/readwrite/model/TDataIndividualReq.go |  4 +-
 .../knxnetip/readwrite/model/TunnelingRequest.go   |  4 +-
 .../knxnetip/readwrite/model/TunnelingResponse.go  |  4 +-
 .../knxnetip/readwrite/model/UnknownMessage.go     |  4 +-
 .../plc4go/modbus/readwrite/model/ModbusPDU.go     | 88 +++++++++++----------
 .../readwrite/model/ModbusPDUDiagnosticRequest.go  |  4 +-
 .../readwrite/model/ModbusPDUDiagnosticResponse.go |  4 +-
 .../modbus/readwrite/model/ModbusPDUError.go       |  4 +-
 .../model/ModbusPDUGetComEventCounterRequest.go    |  4 +-
 .../model/ModbusPDUGetComEventCounterResponse.go   |  4 +-
 .../model/ModbusPDUGetComEventLogRequest.go        |  4 +-
 .../model/ModbusPDUGetComEventLogResponse.go       |  4 +-
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |  4 +-
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |  4 +-
 .../readwrite/model/ModbusPDUReadCoilsRequest.go   |  4 +-
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |  4 +-
 .../ModbusPDUReadDeviceIdentificationRequest.go    |  4 +-
 .../ModbusPDUReadDeviceIdentificationResponse.go   |  4 +-
 .../model/ModbusPDUReadDiscreteInputsRequest.go    |  4 +-
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |  4 +-
 .../model/ModbusPDUReadExceptionStatusRequest.go   |  4 +-
 .../model/ModbusPDUReadExceptionStatusResponse.go  |  4 +-
 .../model/ModbusPDUReadFifoQueueRequest.go         |  4 +-
 .../model/ModbusPDUReadFifoQueueResponse.go        |  4 +-
 .../model/ModbusPDUReadFileRecordRequest.go        |  4 +-
 .../model/ModbusPDUReadFileRecordResponse.go       |  4 +-
 .../model/ModbusPDUReadHoldingRegistersRequest.go  |  4 +-
 .../model/ModbusPDUReadHoldingRegistersResponse.go |  4 +-
 .../model/ModbusPDUReadInputRegistersRequest.go    |  4 +-
 .../model/ModbusPDUReadInputRegistersResponse.go   |  4 +-
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |  4 +-
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |  4 +-
 .../model/ModbusPDUReportServerIdRequest.go        |  4 +-
 .../model/ModbusPDUReportServerIdResponse.go       |  4 +-
 .../model/ModbusPDUWriteFileRecordRequest.go       |  4 +-
 .../model/ModbusPDUWriteFileRecordResponse.go      |  4 +-
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |  4 +-
 .../model/ModbusPDUWriteMultipleCoilsResponse.go   |  4 +-
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |  4 +-
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |  4 +-
 .../model/ModbusPDUWriteSingleCoilRequest.go       |  4 +-
 .../model/ModbusPDUWriteSingleCoilResponse.go      |  4 +-
 .../model/ModbusPDUWriteSingleRegisterRequest.go   |  4 +-
 .../model/ModbusPDUWriteSingleRegisterResponse.go  |  4 +-
 .../plc4go/s7/readwrite/model/COTPPacket.go        | 22 +++---
 .../readwrite/model/COTPPacketConnectionRequest.go |  4 +-
 .../model/COTPPacketConnectionResponse.go          |  4 +-
 .../plc4go/s7/readwrite/model/COTPPacketData.go    |  4 +-
 .../readwrite/model/COTPPacketDisconnectRequest.go |  4 +-
 .../model/COTPPacketDisconnectResponse.go          |  4 +-
 .../s7/readwrite/model/COTPPacketTpduError.go      |  4 +-
 .../plc4go/s7/readwrite/model/COTPParameter.go     | 20 +++--
 .../s7/readwrite/model/COTPParameterCalledTsap.go  |  4 +-
 .../s7/readwrite/model/COTPParameterCallingTsap.go |  4 +-
 .../s7/readwrite/model/COTPParameterChecksum.go    |  4 +-
 ...COTPParameterDisconnectAdditionalInformation.go |  4 +-
 .../s7/readwrite/model/COTPParameterTpduSize.go    |  4 +-
 .../plc4go/s7/readwrite/model/S7Address.go         | 12 ++-
 .../plc4go/s7/readwrite/model/S7AddressAny.go      |  4 +-
 .../s7/readwrite/model/S7DataAlarmMessage.go       | 14 ++--
 .../plc4go/s7/readwrite/model/S7Message.go         | 18 +++--
 .../s7/readwrite/model/S7MessageObjectRequest.go   |  4 +-
 .../s7/readwrite/model/S7MessageObjectResponse.go  |  4 +-
 .../plc4go/s7/readwrite/model/S7MessageRequest.go  |  4 +-
 .../plc4go/s7/readwrite/model/S7MessageResponse.go |  4 +-
 .../s7/readwrite/model/S7MessageResponseData.go    |  4 +-
 .../plc4go/s7/readwrite/model/S7MessageUserData.go |  4 +-
 .../plc4go/s7/readwrite/model/S7Parameter.go       | 24 +++---
 .../readwrite/model/S7ParameterModeTransition.go   |  4 +-
 .../readwrite/model/S7ParameterReadVarRequest.go   |  4 +-
 .../readwrite/model/S7ParameterReadVarResponse.go  |  4 +-
 .../model/S7ParameterSetupCommunication.go         |  4 +-
 .../s7/readwrite/model/S7ParameterUserData.go      |  4 +-
 .../s7/readwrite/model/S7ParameterUserDataItem.go  | 12 ++-
 .../model/S7ParameterUserDataItemCPUFunctions.go   |  4 +-
 .../readwrite/model/S7ParameterWriteVarRequest.go  |  4 +-
 .../readwrite/model/S7ParameterWriteVarResponse.go |  4 +-
 .../plc4go/s7/readwrite/model/S7Payload.go         | 18 +++--
 .../plc4go/s7/readwrite/model/S7PayloadAlarm8.go   |  4 +-
 .../s7/readwrite/model/S7PayloadAlarmAckInd.go     |  4 +-
 .../plc4go/s7/readwrite/model/S7PayloadAlarmS.go   |  4 +-
 .../plc4go/s7/readwrite/model/S7PayloadAlarmSC.go  |  4 +-
 .../plc4go/s7/readwrite/model/S7PayloadAlarmSQ.go  |  4 +-
 .../readwrite/model/S7PayloadDiagnosticMessage.go  |  4 +-
 .../plc4go/s7/readwrite/model/S7PayloadNotify.go   |  4 +-
 .../plc4go/s7/readwrite/model/S7PayloadNotify8.go  |  4 +-
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |  4 +-
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |  4 +-
 .../s7/readwrite/model/S7PayloadUserDataItem.go    | 46 ++++++-----
 .../S7PayloadUserDataItemCpuFunctionAlarmAck.go    |  4 +-
 ...yloadUserDataItemCpuFunctionAlarmAckResponse.go |  4 +-
 .../S7PayloadUserDataItemCpuFunctionAlarmQuery.go  |  4 +-
 ...oadUserDataItemCpuFunctionAlarmQueryResponse.go |  4 +-
 ...ayloadUserDataItemCpuFunctionMsgSubscription.go |  4 +-
 ...aItemCpuFunctionMsgSubscriptionAlarmResponse.go |  4 +-
 ...erDataItemCpuFunctionMsgSubscriptionResponse.go |  4 +-
 ...ataItemCpuFunctionMsgSubscriptionSysResponse.go |  4 +-
 ...PayloadUserDataItemCpuFunctionReadSzlRequest.go |  4 +-
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |  4 +-
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |  4 +-
 .../readwrite/model/S7PayloadWriteVarResponse.go   |  4 +-
 .../readwrite/model/S7VarRequestParameterItem.go   | 12 ++-
 .../model/S7VarRequestParameterItemAddress.go      |  4 +-
 590 files changed, 2041 insertions(+), 1794 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 b16fc7a..f568049 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
@@ -700,7 +700,7 @@ func (m *${type.name}) GetLengthInBytes() uint16 {
 
 <#assign hasParserArguments=parserArguments?has_content/>
 <#assign parserArgumentList><#if hasParserArguments><#list parserArguments as parserArgument>${parserArgument.name} <#if parserArgument.type.isNonSimpleTypeReference() && !parserArgument.type.isEnumTypeReference()>*</#if>${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if></#assign>
-func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${parserArgumentList}</#if>) (*<#if type.parentType.isPresent()>${type.parentType.orElseThrow().name}<#else>${type.name}</#if>, error) {
+func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${parserArgumentList}</#if>) (*${type.name}, error) {
 	if pullErr := readBuffer.PullContext("${type.name}"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -1248,7 +1248,11 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
 				<#assign switchField = field.asSwitchField().orElseThrow()>
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *${type.name}
+	type ${type.name}Child interface {
+		InitializeParent(*${type.name}<#if type.propertyFields?has_content>, </#if> <#list type.propertyFields as field><#if helper.needsPointerAccess(field)>*</#if>${helper.getLanguageTypeNameForField(field)}<#sep>, </#sep></#list>)
+		GetParent() *${type.name}
+	}
+	var _child ${type.name}Child
 	var typeSwitchError error
 	switch {
 				<#list switchField.cases as case>
@@ -1290,7 +1294,7 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
 						</#if>: // ${case.name}
                     </...@compress>
 
-		_parent, typeSwitchError = ${case.name}Parse(readBuffer<#if case.allParserArguments.isPresent()>, <#list case.allParserArguments.orElseThrow() as parserArgument><#if <#--TODO: here DF1ResponseMessage throws a payloadLength not present: meaning that some feature is not rightfully implemented as the result should be a error not a missing pointer-->type.getPropertyFieldFromThisOrParentByName(parserArgument.name).isPresent() && type.getPropertyFieldFromThisOrParentByName(parserArgument.nam [...]
+		_child, typeSwitchError = ${case.name}Parse(readBuffer<#if case.allParserArguments.isPresent()>, <#list case.allParserArguments.orElseThrow() as parserArgument><#if <#--TODO: here DF1ResponseMessage throws a payloadLength not present: meaning that some feature is not rightfully implemented as the result should be a error not a missing pointer-->type.getPropertyFieldFromThisOrParentByName(parserArgument.name).isPresent() && type.getPropertyFieldFromThisOrParentByName(parserArgument.name [...]
 				</#list>
 	default:
 		// TODO: return actual type
@@ -1389,7 +1393,7 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
 	<#if type.isDiscriminatedParentTypeDefinition()>
 	// Finish initializing
 		<@compress single_line=true>
-	_parent.Child.InitializeParent(_parent
+	_child.InitializeParent(_child.GetParent()
 			<#if type.propertyFields?has_content>, </#if>
 			<#list type.propertyFields as field>
 				${field.name}
@@ -1398,7 +1402,7 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
 			)
 		</...@compress>
 
-	return _parent, nil
+	return _child.GetParent(), nil
 	<#elseif type.parentType.isPresent()>
 	// Create a partially initialized instance
 	_child := &${type.name}{
@@ -1408,7 +1412,7 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
         ${type.parentType.orElseThrow().name}: &${type.parentType.orElseThrow().name}{},
 	}
 	_child.${type.parentType.orElseThrow().name}.Child = _child
-	return _child.${type.parentType.orElseThrow().name}, nil
+	return _child, nil
 	<#else>
 	// Create the instance
 	return New${type.name}(<#list type.propertyFields as field>${field.name}<#sep>, </#sep></#list><#if filteredParserArguments?has_content><#if type.propertyFields?has_content>, </#if><#list filteredParserArguments as arg><#if arg.type.isNonSimpleTypeReference() && !arg.type.isEnumTypeReference()>*</#if>${arg.name}<#sep>, </#sep></#list></#if>), nil
diff --git a/code-generation/protocol-test/src/main/resources/protocols/test/test.mspec b/code-generation/protocol-test/src/main/resources/protocols/test/test.mspec
index cd267f1..77f5227 100644
--- a/code-generation/protocol-test/src/main/resources/protocols/test/test.mspec
+++ b/code-generation/protocol-test/src/main/resources/protocols/test/test.mspec
@@ -89,27 +89,6 @@
 
 [type AbstractTypeTest
     //Abstract fields can only be used within discriminated base types.
-    [simple         uint 8 simpleField]
-    [abstract bit abstractBitField]
-    [abstract int 8 abstractIntField]
-    [abstract uint 8 abstractUintField]
-    [abstract float 32 abstractFloatField]
-    [abstract float 64 abstractDoubleField]
-    [abstract string 8 abstractStringField]
-    [typeSwitch simpleField
-        ['0' AbstractedType
-            [simple bit abstractBitField]
-            [simple int 8 abstractIntField]
-            [simple uint 8 abstractUintField]
-            [simple float 32 abstractFloatField]
-            [simple float 64 abstractDoubleField]
-            [simple string 8 abstractStringField]
-        ]
-    ]
-]
-
-[type AbstractTypeTest
-    //Abstract fields can only be used within discriminated base types.
     [simple   uint 8 simpleField]
     [abstract bit abstractBitField]
     [abstract int 8 abstractIntField]
@@ -118,8 +97,8 @@
     [abstract float 64 abstractDoubleField]
     [abstract string 8 abstractStringField]
     [typeSwitch simpleField
-        ['0' AbstractedType
-            //Abstract fields need to be overriden in child
+        ['0' AbstractTypeTestSubType
+            //Abstract fields need to be overridden in child
             [simple bit abstractBitField]
             [simple int 8 abstractIntField]
             [simple uint 8 abstractUintField]
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionRequest.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionRequest.go
index 78b1d73..198feaa 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionRequest.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionRequest.go
@@ -108,7 +108,7 @@ func (m *CIPEncapsulationConnectionRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CIPEncapsulationConnectionRequestParse(readBuffer utils.ReadBuffer) (*CIPEncapsulationPacket, error) {
+func CIPEncapsulationConnectionRequestParse(readBuffer utils.ReadBuffer) (*CIPEncapsulationConnectionRequest, error) {
 	if pullErr := readBuffer.PullContext("CIPEncapsulationConnectionRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -124,7 +124,7 @@ func CIPEncapsulationConnectionRequestParse(readBuffer utils.ReadBuffer) (*CIPEn
 		CIPEncapsulationPacket: &CIPEncapsulationPacket{},
 	}
 	_child.CIPEncapsulationPacket.Child = _child
-	return _child.CIPEncapsulationPacket, nil
+	return _child, nil
 }
 
 func (m *CIPEncapsulationConnectionRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionResponse.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionResponse.go
index 489593f..b9c01af 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionResponse.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationConnectionResponse.go
@@ -108,7 +108,7 @@ func (m *CIPEncapsulationConnectionResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CIPEncapsulationConnectionResponseParse(readBuffer utils.ReadBuffer) (*CIPEncapsulationPacket, error) {
+func CIPEncapsulationConnectionResponseParse(readBuffer utils.ReadBuffer) (*CIPEncapsulationConnectionResponse, error) {
 	if pullErr := readBuffer.PullContext("CIPEncapsulationConnectionResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -124,7 +124,7 @@ func CIPEncapsulationConnectionResponseParse(readBuffer utils.ReadBuffer) (*CIPE
 		CIPEncapsulationPacket: &CIPEncapsulationPacket{},
 	}
 	_child.CIPEncapsulationPacket.Child = _child
-	return _child.CIPEncapsulationPacket, nil
+	return _child, nil
 }
 
 func (m *CIPEncapsulationConnectionResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationPacket.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationPacket.go
index 00d3808..d582065 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationPacket.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationPacket.go
@@ -229,17 +229,21 @@ func CIPEncapsulationPacketParse(readBuffer utils.ReadBuffer) (*CIPEncapsulation
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *CIPEncapsulationPacket
+	type CIPEncapsulationPacketChild interface {
+		InitializeParent(*CIPEncapsulationPacket, uint32, uint32, []uint8, uint32)
+		GetParent() *CIPEncapsulationPacket
+	}
+	var _child CIPEncapsulationPacketChild
 	var typeSwitchError error
 	switch {
 	case commandType == 0x0101: // CIPEncapsulationConnectionRequest
-		_parent, typeSwitchError = CIPEncapsulationConnectionRequestParse(readBuffer)
+		_child, typeSwitchError = CIPEncapsulationConnectionRequestParse(readBuffer)
 	case commandType == 0x0201: // CIPEncapsulationConnectionResponse
-		_parent, typeSwitchError = CIPEncapsulationConnectionResponseParse(readBuffer)
+		_child, typeSwitchError = CIPEncapsulationConnectionResponseParse(readBuffer)
 	case commandType == 0x0107: // CIPEncapsulationReadRequest
-		_parent, typeSwitchError = CIPEncapsulationReadRequestParse(readBuffer)
+		_child, typeSwitchError = CIPEncapsulationReadRequestParse(readBuffer)
 	case commandType == 0x0207: // CIPEncapsulationReadResponse
-		_parent, typeSwitchError = CIPEncapsulationReadResponseParse(readBuffer, len)
+		_child, typeSwitchError = CIPEncapsulationReadResponseParse(readBuffer, len)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -253,8 +257,8 @@ func CIPEncapsulationPacketParse(readBuffer utils.ReadBuffer) (*CIPEncapsulation
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, sessionHandle, status, senderContext, options)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), sessionHandle, status, senderContext, options)
+	return _child.GetParent(), nil
 }
 
 func (m *CIPEncapsulationPacket) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadRequest.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadRequest.go
index 2438770..607d5f5 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadRequest.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadRequest.go
@@ -129,7 +129,7 @@ func (m *CIPEncapsulationReadRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CIPEncapsulationReadRequestParse(readBuffer utils.ReadBuffer) (*CIPEncapsulationPacket, error) {
+func CIPEncapsulationReadRequestParse(readBuffer utils.ReadBuffer) (*CIPEncapsulationReadRequest, error) {
 	if pullErr := readBuffer.PullContext("CIPEncapsulationReadRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -159,7 +159,7 @@ func CIPEncapsulationReadRequestParse(readBuffer utils.ReadBuffer) (*CIPEncapsul
 		CIPEncapsulationPacket: &CIPEncapsulationPacket{},
 	}
 	_child.CIPEncapsulationPacket.Child = _child
-	return _child.CIPEncapsulationPacket, nil
+	return _child, nil
 }
 
 func (m *CIPEncapsulationReadRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadResponse.go b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadResponse.go
index 5d7ae80..487c584 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadResponse.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/CIPEncapsulationReadResponse.go
@@ -132,7 +132,7 @@ func (m *CIPEncapsulationReadResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CIPEncapsulationReadResponseParse(readBuffer utils.ReadBuffer, len uint16) (*CIPEncapsulationPacket, error) {
+func CIPEncapsulationReadResponseParse(readBuffer utils.ReadBuffer, len uint16) (*CIPEncapsulationReadResponse, error) {
 	if pullErr := readBuffer.PullContext("CIPEncapsulationReadResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -162,7 +162,7 @@ func CIPEncapsulationReadResponseParse(readBuffer utils.ReadBuffer, len uint16)
 		CIPEncapsulationPacket: &CIPEncapsulationPacket{},
 	}
 	_child.CIPEncapsulationPacket.Child = _child
-	return _child.CIPEncapsulationPacket, nil
+	return _child, nil
 }
 
 func (m *CIPEncapsulationReadResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandRequestMessage.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandRequestMessage.go
index 217d8e3..5ff1cf3 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandRequestMessage.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandRequestMessage.go
@@ -129,7 +129,7 @@ func (m *DF1CommandRequestMessage) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func DF1CommandRequestMessageParse(readBuffer utils.ReadBuffer) (*DF1RequestMessage, error) {
+func DF1CommandRequestMessageParse(readBuffer utils.ReadBuffer) (*DF1CommandRequestMessage, error) {
 	if pullErr := readBuffer.PullContext("DF1CommandRequestMessage"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -159,7 +159,7 @@ func DF1CommandRequestMessageParse(readBuffer utils.ReadBuffer) (*DF1RequestMess
 		DF1RequestMessage: &DF1RequestMessage{},
 	}
 	_child.DF1RequestMessage.Child = _child
-	return _child.DF1RequestMessage, nil
+	return _child, nil
 }
 
 func (m *DF1CommandRequestMessage) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandResponseMessageProtectedTypedLogicalRead.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandResponseMessageProtectedTypedLogicalRead.go
index 916a8d9..67b4ead 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandResponseMessageProtectedTypedLogicalRead.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1CommandResponseMessageProtectedTypedLogicalRead.go
@@ -134,7 +134,7 @@ func (m *DF1CommandResponseMessageProtectedTypedLogicalRead) GetLengthInBytes()
 	return m.GetLengthInBits() / 8
 }
 
-func DF1CommandResponseMessageProtectedTypedLogicalReadParse(readBuffer utils.ReadBuffer, payloadLength uint16) (*DF1ResponseMessage, error) {
+func DF1CommandResponseMessageProtectedTypedLogicalReadParse(readBuffer utils.ReadBuffer, payloadLength uint16) (*DF1CommandResponseMessageProtectedTypedLogicalRead, error) {
 	if pullErr := readBuffer.PullContext("DF1CommandResponseMessageProtectedTypedLogicalRead"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -172,7 +172,7 @@ func DF1CommandResponseMessageProtectedTypedLogicalReadParse(readBuffer utils.Re
 		DF1ResponseMessage: &DF1ResponseMessage{},
 	}
 	_child.DF1ResponseMessage.Child = _child
-	return _child.DF1ResponseMessage, nil
+	return _child, nil
 }
 
 func (m *DF1CommandResponseMessageProtectedTypedLogicalRead) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestCommand.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestCommand.go
index b0743d8..8a566ef 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestCommand.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestCommand.go
@@ -110,11 +110,15 @@ func DF1RequestCommandParse(readBuffer utils.ReadBuffer) (*DF1RequestCommand, er
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *DF1RequestCommand
+	type DF1RequestCommandChild interface {
+		InitializeParent(*DF1RequestCommand)
+		GetParent() *DF1RequestCommand
+	}
+	var _child DF1RequestCommandChild
 	var typeSwitchError error
 	switch {
 	case functionCode == 0xA2: // DF1RequestProtectedTypedLogicalRead
-		_parent, typeSwitchError = DF1RequestProtectedTypedLogicalReadParse(readBuffer)
+		_child, typeSwitchError = DF1RequestProtectedTypedLogicalReadParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -128,8 +132,8 @@ func DF1RequestCommandParse(readBuffer utils.ReadBuffer) (*DF1RequestCommand, er
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *DF1RequestCommand) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestMessage.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestMessage.go
index 5ea4215..621f5ec 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestMessage.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestMessage.go
@@ -205,11 +205,15 @@ func DF1RequestMessageParse(readBuffer utils.ReadBuffer) (*DF1RequestMessage, er
 	transactionCounter := _transactionCounter
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *DF1RequestMessage
+	type DF1RequestMessageChild interface {
+		InitializeParent(*DF1RequestMessage, uint8, uint8, uint8, uint16)
+		GetParent() *DF1RequestMessage
+	}
+	var _child DF1RequestMessageChild
 	var typeSwitchError error
 	switch {
 	case commandCode == 0x0F: // DF1CommandRequestMessage
-		_parent, typeSwitchError = DF1CommandRequestMessageParse(readBuffer)
+		_child, typeSwitchError = DF1CommandRequestMessageParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -223,8 +227,8 @@ func DF1RequestMessageParse(readBuffer utils.ReadBuffer) (*DF1RequestMessage, er
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, destinationAddress, sourceAddress, status, transactionCounter)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), destinationAddress, sourceAddress, status, transactionCounter)
+	return _child.GetParent(), nil
 }
 
 func (m *DF1RequestMessage) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestProtectedTypedLogicalRead.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestProtectedTypedLogicalRead.go
index 97cb930..0353aceb 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestProtectedTypedLogicalRead.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1RequestProtectedTypedLogicalRead.go
@@ -168,7 +168,7 @@ func (m *DF1RequestProtectedTypedLogicalRead) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func DF1RequestProtectedTypedLogicalReadParse(readBuffer utils.ReadBuffer) (*DF1RequestCommand, error) {
+func DF1RequestProtectedTypedLogicalReadParse(readBuffer utils.ReadBuffer) (*DF1RequestProtectedTypedLogicalRead, error) {
 	if pullErr := readBuffer.PullContext("DF1RequestProtectedTypedLogicalRead"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -224,7 +224,7 @@ func DF1RequestProtectedTypedLogicalReadParse(readBuffer utils.ReadBuffer) (*DF1
 		DF1RequestCommand: &DF1RequestCommand{},
 	}
 	_child.DF1RequestCommand.Child = _child
-	return _child.DF1RequestCommand, nil
+	return _child, nil
 }
 
 func (m *DF1RequestProtectedTypedLogicalRead) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/abeth/readwrite/model/DF1ResponseMessage.go b/plc4go/internal/plc4go/abeth/readwrite/model/DF1ResponseMessage.go
index 4dae32d..ca2ef2a 100644
--- a/plc4go/internal/plc4go/abeth/readwrite/model/DF1ResponseMessage.go
+++ b/plc4go/internal/plc4go/abeth/readwrite/model/DF1ResponseMessage.go
@@ -225,11 +225,15 @@ func DF1ResponseMessageParse(readBuffer utils.ReadBuffer, payloadLength uint16)
 	transactionCounter := _transactionCounter
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *DF1ResponseMessage
+	type DF1ResponseMessageChild interface {
+		InitializeParent(*DF1ResponseMessage, uint8, uint8, uint8, uint16)
+		GetParent() *DF1ResponseMessage
+	}
+	var _child DF1ResponseMessageChild
 	var typeSwitchError error
 	switch {
 	case commandCode == 0x4F: // DF1CommandResponseMessageProtectedTypedLogicalRead
-		_parent, typeSwitchError = DF1CommandResponseMessageProtectedTypedLogicalReadParse(readBuffer, payloadLength)
+		_child, typeSwitchError = DF1CommandResponseMessageProtectedTypedLogicalReadParse(readBuffer, payloadLength)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -243,8 +247,8 @@ func DF1ResponseMessageParse(readBuffer utils.ReadBuffer, payloadLength uint16)
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, destinationAddress, sourceAddress, status, transactionCounter)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), destinationAddress, sourceAddress, status, transactionCounter)
+	return _child.GetParent(), nil
 }
 
 func (m *DF1ResponseMessage) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
index 93ee56c..2829187 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
@@ -190,7 +190,7 @@ func (m *AdsAddDeviceNotificationRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsAddDeviceNotificationRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsAddDeviceNotificationRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsAddDeviceNotificationRequest, error) {
 	if pullErr := readBuffer.PullContext("AdsAddDeviceNotificationRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -282,7 +282,7 @@ func AdsAddDeviceNotificationRequestParse(readBuffer utils.ReadBuffer, commandId
 		AdsData:          &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsAddDeviceNotificationRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
index d0bd108..57d8425 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
@@ -139,7 +139,7 @@ func (m *AdsAddDeviceNotificationResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsAddDeviceNotificationResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsAddDeviceNotificationResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsAddDeviceNotificationResponse, error) {
 	if pullErr := readBuffer.PullContext("AdsAddDeviceNotificationResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -177,7 +177,7 @@ func AdsAddDeviceNotificationResponseParse(readBuffer utils.ReadBuffer, commandI
 		AdsData:            &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsAddDeviceNotificationResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
index aa35af6..7b10e28 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
@@ -104,49 +104,53 @@ func AdsDataParse(readBuffer utils.ReadBuffer, commandId CommandId, response boo
 	_ = currentPos
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *AdsData
+	type AdsDataChild interface {
+		InitializeParent(*AdsData)
+		GetParent() *AdsData
+	}
+	var _child AdsDataChild
 	var typeSwitchError error
 	switch {
 	case commandId == CommandId_INVALID && response == bool(false): // AdsInvalidRequest
-		_parent, typeSwitchError = AdsInvalidRequestParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsInvalidRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_INVALID && response == bool(true): // AdsInvalidResponse
-		_parent, typeSwitchError = AdsInvalidResponseParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsInvalidResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ_DEVICE_INFO && response == bool(false): // AdsReadDeviceInfoRequest
-		_parent, typeSwitchError = AdsReadDeviceInfoRequestParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsReadDeviceInfoRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ_DEVICE_INFO && response == bool(true): // AdsReadDeviceInfoResponse
-		_parent, typeSwitchError = AdsReadDeviceInfoResponseParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsReadDeviceInfoResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ && response == bool(false): // AdsReadRequest
-		_parent, typeSwitchError = AdsReadRequestParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsReadRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ && response == bool(true): // AdsReadResponse
-		_parent, typeSwitchError = AdsReadResponseParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsReadResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_WRITE && response == bool(false): // AdsWriteRequest
-		_parent, typeSwitchError = AdsWriteRequestParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsWriteRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_WRITE && response == bool(true): // AdsWriteResponse
-		_parent, typeSwitchError = AdsWriteResponseParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsWriteResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ_STATE && response == bool(false): // AdsReadStateRequest
-		_parent, typeSwitchError = AdsReadStateRequestParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsReadStateRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ_STATE && response == bool(true): // AdsReadStateResponse
-		_parent, typeSwitchError = AdsReadStateResponseParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsReadStateResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_WRITE_CONTROL && response == bool(false): // AdsWriteControlRequest
-		_parent, typeSwitchError = AdsWriteControlRequestParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsWriteControlRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_WRITE_CONTROL && response == bool(true): // AdsWriteControlResponse
-		_parent, typeSwitchError = AdsWriteControlResponseParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsWriteControlResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_ADD_DEVICE_NOTIFICATION && response == bool(false): // AdsAddDeviceNotificationRequest
-		_parent, typeSwitchError = AdsAddDeviceNotificationRequestParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsAddDeviceNotificationRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_ADD_DEVICE_NOTIFICATION && response == bool(true): // AdsAddDeviceNotificationResponse
-		_parent, typeSwitchError = AdsAddDeviceNotificationResponseParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsAddDeviceNotificationResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_DELETE_DEVICE_NOTIFICATION && response == bool(false): // AdsDeleteDeviceNotificationRequest
-		_parent, typeSwitchError = AdsDeleteDeviceNotificationRequestParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsDeleteDeviceNotificationRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_DELETE_DEVICE_NOTIFICATION && response == bool(true): // AdsDeleteDeviceNotificationResponse
-		_parent, typeSwitchError = AdsDeleteDeviceNotificationResponseParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsDeleteDeviceNotificationResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_DEVICE_NOTIFICATION && response == bool(false): // AdsDeviceNotificationRequest
-		_parent, typeSwitchError = AdsDeviceNotificationRequestParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsDeviceNotificationRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_DEVICE_NOTIFICATION && response == bool(true): // AdsDeviceNotificationResponse
-		_parent, typeSwitchError = AdsDeviceNotificationResponseParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsDeviceNotificationResponseParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ_WRITE && response == bool(false): // AdsReadWriteRequest
-		_parent, typeSwitchError = AdsReadWriteRequestParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsReadWriteRequestParse(readBuffer, commandId, response)
 	case commandId == CommandId_ADS_READ_WRITE && response == bool(true): // AdsReadWriteResponse
-		_parent, typeSwitchError = AdsReadWriteResponseParse(readBuffer, commandId, response)
+		_child, typeSwitchError = AdsReadWriteResponseParse(readBuffer, commandId, response)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -160,8 +164,8 @@ func AdsDataParse(readBuffer utils.ReadBuffer, commandId CommandId, response boo
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *AdsData) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
index f065f75..43f7d5f 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
@@ -128,7 +128,7 @@ func (m *AdsDeleteDeviceNotificationRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsDeleteDeviceNotificationRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsDeleteDeviceNotificationRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsDeleteDeviceNotificationRequest, error) {
 	if pullErr := readBuffer.PullContext("AdsDeleteDeviceNotificationRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func AdsDeleteDeviceNotificationRequestParse(readBuffer utils.ReadBuffer, comman
 		AdsData:            &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsDeleteDeviceNotificationRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
index 112a062..c95cef9 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
@@ -128,7 +128,7 @@ func (m *AdsDeleteDeviceNotificationResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsDeleteDeviceNotificationResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsDeleteDeviceNotificationResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsDeleteDeviceNotificationResponse, error) {
 	if pullErr := readBuffer.PullContext("AdsDeleteDeviceNotificationResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -158,7 +158,7 @@ func AdsDeleteDeviceNotificationResponseParse(readBuffer utils.ReadBuffer, comma
 		AdsData: &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsDeleteDeviceNotificationResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
index e180f23..cf3f66b 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
@@ -155,7 +155,7 @@ func (m *AdsDeviceNotificationRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsDeviceNotificationRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsDeviceNotificationRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsDeviceNotificationRequest, error) {
 	if pullErr := readBuffer.PullContext("AdsDeviceNotificationRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -207,7 +207,7 @@ func AdsDeviceNotificationRequestParse(readBuffer utils.ReadBuffer, commandId Co
 		AdsData:         &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsDeviceNotificationRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
index f9e929b..f33200e 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
@@ -107,7 +107,7 @@ func (m *AdsDeviceNotificationResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsDeviceNotificationResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsDeviceNotificationResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsDeviceNotificationResponse, error) {
 	if pullErr := readBuffer.PullContext("AdsDeviceNotificationResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func AdsDeviceNotificationResponseParse(readBuffer utils.ReadBuffer, commandId C
 		AdsData: &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsDeviceNotificationResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
index e1af35d..59e27af 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
@@ -107,7 +107,7 @@ func (m *AdsInvalidRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsInvalidRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsInvalidRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsInvalidRequest, error) {
 	if pullErr := readBuffer.PullContext("AdsInvalidRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func AdsInvalidRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, re
 		AdsData: &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsInvalidRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
index d6057a5..c698f06 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
@@ -107,7 +107,7 @@ func (m *AdsInvalidResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsInvalidResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsInvalidResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsInvalidResponse, error) {
 	if pullErr := readBuffer.PullContext("AdsInvalidResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func AdsInvalidResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, r
 		AdsData: &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsInvalidResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
index 42bf0f9..804f3a3 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
@@ -102,15 +102,19 @@ func AdsMultiRequestItemParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*
 	_ = currentPos
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *AdsMultiRequestItem
+	type AdsMultiRequestItemChild interface {
+		InitializeParent(*AdsMultiRequestItem)
+		GetParent() *AdsMultiRequestItem
+	}
+	var _child AdsMultiRequestItemChild
 	var typeSwitchError error
 	switch {
 	case indexGroup == uint32(61568): // AdsMultiRequestItemRead
-		_parent, typeSwitchError = AdsMultiRequestItemReadParse(readBuffer, indexGroup)
+		_child, typeSwitchError = AdsMultiRequestItemReadParse(readBuffer, indexGroup)
 	case indexGroup == uint32(61569): // AdsMultiRequestItemWrite
-		_parent, typeSwitchError = AdsMultiRequestItemWriteParse(readBuffer, indexGroup)
+		_child, typeSwitchError = AdsMultiRequestItemWriteParse(readBuffer, indexGroup)
 	case indexGroup == uint32(61570): // AdsMultiRequestItemReadWrite
-		_parent, typeSwitchError = AdsMultiRequestItemReadWriteParse(readBuffer, indexGroup)
+		_child, typeSwitchError = AdsMultiRequestItemReadWriteParse(readBuffer, indexGroup)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -124,8 +128,8 @@ func AdsMultiRequestItemParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *AdsMultiRequestItem) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
index bc0af4e..8a12c61 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
@@ -146,7 +146,7 @@ func (m *AdsMultiRequestItemRead) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsMultiRequestItemReadParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*AdsMultiRequestItem, error) {
+func AdsMultiRequestItemReadParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*AdsMultiRequestItemRead, error) {
 	if pullErr := readBuffer.PullContext("AdsMultiRequestItemRead"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -186,7 +186,7 @@ func AdsMultiRequestItemReadParse(readBuffer utils.ReadBuffer, indexGroup uint32
 		AdsMultiRequestItem: &AdsMultiRequestItem{},
 	}
 	_child.AdsMultiRequestItem.Child = _child
-	return _child.AdsMultiRequestItem, nil
+	return _child, nil
 }
 
 func (m *AdsMultiRequestItemRead) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
index 818affe..a7ccb45 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
@@ -157,7 +157,7 @@ func (m *AdsMultiRequestItemReadWrite) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsMultiRequestItemReadWriteParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*AdsMultiRequestItem, error) {
+func AdsMultiRequestItemReadWriteParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*AdsMultiRequestItemReadWrite, error) {
 	if pullErr := readBuffer.PullContext("AdsMultiRequestItemReadWrite"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -205,7 +205,7 @@ func AdsMultiRequestItemReadWriteParse(readBuffer utils.ReadBuffer, indexGroup u
 		AdsMultiRequestItem: &AdsMultiRequestItem{},
 	}
 	_child.AdsMultiRequestItem.Child = _child
-	return _child.AdsMultiRequestItem, nil
+	return _child, nil
 }
 
 func (m *AdsMultiRequestItemReadWrite) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
index 8e797d3..0aa94b1 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
@@ -146,7 +146,7 @@ func (m *AdsMultiRequestItemWrite) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsMultiRequestItemWriteParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*AdsMultiRequestItem, error) {
+func AdsMultiRequestItemWriteParse(readBuffer utils.ReadBuffer, indexGroup uint32) (*AdsMultiRequestItemWrite, error) {
 	if pullErr := readBuffer.PullContext("AdsMultiRequestItemWrite"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -186,7 +186,7 @@ func AdsMultiRequestItemWriteParse(readBuffer utils.ReadBuffer, indexGroup uint3
 		AdsMultiRequestItem: &AdsMultiRequestItem{},
 	}
 	_child.AdsMultiRequestItem.Child = _child
-	return _child.AdsMultiRequestItem, nil
+	return _child, nil
 }
 
 func (m *AdsMultiRequestItemWrite) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
index e4e65d5..a8f3919 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
@@ -107,7 +107,7 @@ func (m *AdsReadDeviceInfoRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsReadDeviceInfoRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsReadDeviceInfoRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsReadDeviceInfoRequest, error) {
 	if pullErr := readBuffer.PullContext("AdsReadDeviceInfoRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func AdsReadDeviceInfoRequestParse(readBuffer utils.ReadBuffer, commandId Comman
 		AdsData: &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsReadDeviceInfoRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
index dcbed4a..43e2a64 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
@@ -174,7 +174,7 @@ func (m *AdsReadDeviceInfoResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsReadDeviceInfoResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsReadDeviceInfoResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsReadDeviceInfoResponse, error) {
 	if pullErr := readBuffer.PullContext("AdsReadDeviceInfoResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -235,7 +235,7 @@ func AdsReadDeviceInfoResponseParse(readBuffer utils.ReadBuffer, commandId Comma
 		AdsData:      &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsReadDeviceInfoResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
index c65cdb5..784985b 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
@@ -150,7 +150,7 @@ func (m *AdsReadRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsReadRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsReadRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsReadRequest, error) {
 	if pullErr := readBuffer.PullContext("AdsReadRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -190,7 +190,7 @@ func AdsReadRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, respo
 		AdsData:     &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsReadRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
index 1d06217..fc45531 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
@@ -144,7 +144,7 @@ func (m *AdsReadResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsReadResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsReadResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsReadResponse, error) {
 	if pullErr := readBuffer.PullContext("AdsReadResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -188,7 +188,7 @@ func AdsReadResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, resp
 		AdsData: &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsReadResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
index 40e8c7c..0c68159 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
@@ -107,7 +107,7 @@ func (m *AdsReadStateRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsReadStateRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsReadStateRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsReadStateRequest, error) {
 	if pullErr := readBuffer.PullContext("AdsReadStateRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func AdsReadStateRequestParse(readBuffer utils.ReadBuffer, commandId CommandId,
 		AdsData: &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsReadStateRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
index 0bc830d..cd3c02f 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
@@ -150,7 +150,7 @@ func (m *AdsReadStateResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsReadStateResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsReadStateResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsReadStateResponse, error) {
 	if pullErr := readBuffer.PullContext("AdsReadStateResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -196,7 +196,7 @@ func AdsReadStateResponseParse(readBuffer utils.ReadBuffer, commandId CommandId,
 		AdsData:     &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsReadStateResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
index f8b9d84..77b207f 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
@@ -182,7 +182,7 @@ func (m *AdsReadWriteRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsReadWriteRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsReadWriteRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsReadWriteRequest, error) {
 	if pullErr := readBuffer.PullContext("AdsReadWriteRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -256,7 +256,7 @@ func AdsReadWriteRequestParse(readBuffer utils.ReadBuffer, commandId CommandId,
 		AdsData:     &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsReadWriteRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
index fcfc89f..9a51a42 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
@@ -144,7 +144,7 @@ func (m *AdsReadWriteResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsReadWriteResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsReadWriteResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsReadWriteResponse, error) {
 	if pullErr := readBuffer.PullContext("AdsReadWriteResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -188,7 +188,7 @@ func AdsReadWriteResponseParse(readBuffer utils.ReadBuffer, commandId CommandId,
 		AdsData: &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsReadWriteResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
index 3b6ce44..21a491a 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
@@ -155,7 +155,7 @@ func (m *AdsWriteControlRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsWriteControlRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsWriteControlRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsWriteControlRequest, error) {
 	if pullErr := readBuffer.PullContext("AdsWriteControlRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -201,7 +201,7 @@ func AdsWriteControlRequestParse(readBuffer utils.ReadBuffer, commandId CommandI
 		AdsData:     &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsWriteControlRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go
index cf8d0fa..cbd0621 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go
@@ -128,7 +128,7 @@ func (m *AdsWriteControlResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsWriteControlResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsWriteControlResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsWriteControlResponse, error) {
 	if pullErr := readBuffer.PullContext("AdsWriteControlResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -158,7 +158,7 @@ func AdsWriteControlResponseParse(readBuffer utils.ReadBuffer, commandId Command
 		AdsData: &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsWriteControlResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
index 076dbf2..0c1b9aa 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
@@ -155,7 +155,7 @@ func (m *AdsWriteRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsWriteRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsWriteRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsWriteRequest, error) {
 	if pullErr := readBuffer.PullContext("AdsWriteRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -201,7 +201,7 @@ func AdsWriteRequestParse(readBuffer utils.ReadBuffer, commandId CommandId, resp
 		AdsData:     &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsWriteRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go
index 8e17f2d..fb346f0 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go
@@ -128,7 +128,7 @@ func (m *AdsWriteResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func AdsWriteResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsData, error) {
+func AdsWriteResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, response bool) (*AdsWriteResponse, error) {
 	if pullErr := readBuffer.PullContext("AdsWriteResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -158,7 +158,7 @@ func AdsWriteResponseParse(readBuffer utils.ReadBuffer, commandId CommandId, res
 		AdsData: &AdsData{},
 	}
 	_child.AdsData.Child = _child
-	return _child.AdsData, nil
+	return _child, nil
 }
 
 func (m *AdsWriteResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
index 9bd48d1..ddd7958 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
@@ -113,27 +113,31 @@ func APDUParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *APDU
+	type APDUChild interface {
+		InitializeParent(*APDU)
+		GetParent() *APDU
+	}
+	var _child APDUChild
 	var typeSwitchError error
 	switch {
 	case apduType == 0x0: // APDUConfirmedRequest
-		_parent, typeSwitchError = APDUConfirmedRequestParse(readBuffer, apduLength)
+		_child, typeSwitchError = APDUConfirmedRequestParse(readBuffer, apduLength)
 	case apduType == 0x1: // APDUUnconfirmedRequest
-		_parent, typeSwitchError = APDUUnconfirmedRequestParse(readBuffer, apduLength)
+		_child, typeSwitchError = APDUUnconfirmedRequestParse(readBuffer, apduLength)
 	case apduType == 0x2: // APDUSimpleAck
-		_parent, typeSwitchError = APDUSimpleAckParse(readBuffer, apduLength)
+		_child, typeSwitchError = APDUSimpleAckParse(readBuffer, apduLength)
 	case apduType == 0x3: // APDUComplexAck
-		_parent, typeSwitchError = APDUComplexAckParse(readBuffer, apduLength)
+		_child, typeSwitchError = APDUComplexAckParse(readBuffer, apduLength)
 	case apduType == 0x4: // APDUSegmentAck
-		_parent, typeSwitchError = APDUSegmentAckParse(readBuffer, apduLength)
+		_child, typeSwitchError = APDUSegmentAckParse(readBuffer, apduLength)
 	case apduType == 0x5: // APDUError
-		_parent, typeSwitchError = APDUErrorParse(readBuffer, apduLength)
+		_child, typeSwitchError = APDUErrorParse(readBuffer, apduLength)
 	case apduType == 0x6: // APDUReject
-		_parent, typeSwitchError = APDURejectParse(readBuffer, apduLength)
+		_child, typeSwitchError = APDURejectParse(readBuffer, apduLength)
 	case apduType == 0x7: // APDUAbort
-		_parent, typeSwitchError = APDUAbortParse(readBuffer, apduLength)
+		_child, typeSwitchError = APDUAbortParse(readBuffer, apduLength)
 	case true: // APDUUnknown
-		_parent, typeSwitchError = APDUUnknownParse(readBuffer, apduLength)
+		_child, typeSwitchError = APDUUnknownParse(readBuffer, apduLength)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -147,8 +151,8 @@ func APDUParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *APDU) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
index debd982..6865caa 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
@@ -153,7 +153,7 @@ func (m *APDUAbort) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func APDUAbortParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
+func APDUAbortParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDUAbort, error) {
 	if pullErr := readBuffer.PullContext("APDUAbort"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -207,7 +207,7 @@ func APDUAbortParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, erro
 		APDU:             &APDU{},
 	}
 	_child.APDU.Child = _child
-	return _child.APDU, nil
+	return _child, nil
 }
 
 func (m *APDUAbort) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
index 082e9c5..9aac103 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
@@ -219,7 +219,7 @@ func (m *APDUComplexAck) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func APDUComplexAckParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
+func APDUComplexAckParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDUComplexAck, error) {
 	if pullErr := readBuffer.PullContext("APDUComplexAck"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -339,7 +339,7 @@ func APDUComplexAckParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU,
 		APDU:                 &APDU{},
 	}
 	_child.APDU.Child = _child
-	return _child.APDU, nil
+	return _child, nil
 }
 
 func (m *APDUComplexAck) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
index 6355bbf..71f9e96 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
@@ -223,7 +223,7 @@ func (m *APDUConfirmedRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func APDUConfirmedRequestParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
+func APDUConfirmedRequestParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDUConfirmedRequest, error) {
 	if pullErr := readBuffer.PullContext("APDUConfirmedRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -337,7 +337,7 @@ func APDUConfirmedRequestParse(readBuffer utils.ReadBuffer, apduLength uint16) (
 		APDU:                      &APDU{},
 	}
 	_child.APDU.Child = _child
-	return _child.APDU, nil
+	return _child, nil
 }
 
 func (m *APDUConfirmedRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
index 75fc772..9c2dc2a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
@@ -142,7 +142,7 @@ func (m *APDUError) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func APDUErrorParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
+func APDUErrorParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDUError, error) {
 	if pullErr := readBuffer.PullContext("APDUError"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -194,7 +194,7 @@ func APDUErrorParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, erro
 		APDU:             &APDU{},
 	}
 	_child.APDU.Child = _child
-	return _child.APDU, nil
+	return _child, nil
 }
 
 func (m *APDUError) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
index 9468065..45573b3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
@@ -142,7 +142,7 @@ func (m *APDUReject) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func APDURejectParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
+func APDURejectParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDUReject, error) {
 	if pullErr := readBuffer.PullContext("APDUReject"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -188,7 +188,7 @@ func APDURejectParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, err
 		APDU:             &APDU{},
 	}
 	_child.APDU.Child = _child
-	return _child.APDU, nil
+	return _child, nil
 }
 
 func (m *APDUReject) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
index 2f11c70..63d5fd4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
@@ -175,7 +175,7 @@ func (m *APDUSegmentAck) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func APDUSegmentAckParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
+func APDUSegmentAckParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDUSegmentAck, error) {
 	if pullErr := readBuffer.PullContext("APDUSegmentAck"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -245,7 +245,7 @@ func APDUSegmentAckParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU,
 		APDU:               &APDU{},
 	}
 	_child.APDU.Child = _child
-	return _child.APDU, nil
+	return _child, nil
 }
 
 func (m *APDUSegmentAck) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
index 9bbd56c..8c90843 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
@@ -142,7 +142,7 @@ func (m *APDUSimpleAck) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func APDUSimpleAckParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
+func APDUSimpleAckParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDUSimpleAck, error) {
 	if pullErr := readBuffer.PullContext("APDUSimpleAck"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -188,7 +188,7 @@ func APDUSimpleAckParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU,
 		APDU:             &APDU{},
 	}
 	_child.APDU.Child = _child
-	return _child.APDU, nil
+	return _child, nil
 }
 
 func (m *APDUSimpleAck) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
index cb4e4be..3edb6c6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
@@ -131,7 +131,7 @@ func (m *APDUUnconfirmedRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func APDUUnconfirmedRequestParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
+func APDUUnconfirmedRequestParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDUUnconfirmedRequest, error) {
 	if pullErr := readBuffer.PullContext("APDUUnconfirmedRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -175,7 +175,7 @@ func APDUUnconfirmedRequestParse(readBuffer utils.ReadBuffer, apduLength uint16)
 		APDU:           &APDU{},
 	}
 	_child.APDU.Child = _child
-	return _child.APDU, nil
+	return _child, nil
 }
 
 func (m *APDUUnconfirmedRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnknown.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnknown.go
index 3cfeb44..d462be2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnknown.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnknown.go
@@ -129,7 +129,7 @@ func (m *APDUUnknown) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func APDUUnknownParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, error) {
+func APDUUnknownParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDUUnknown, error) {
 	if pullErr := readBuffer.PullContext("APDUUnknown"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func APDUUnknownParse(readBuffer utils.ReadBuffer, apduLength uint16) (*APDU, er
 		APDU:         &APDU{},
 	}
 	_child.APDU.Child = _child
-	return _child.APDU, nil
+	return _child, nil
 }
 
 func (m *APDUUnknown) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTag.go
index 8d85a35..1c3098a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTag.go
@@ -171,35 +171,39 @@ func BACnetApplicationTagParse(readBuffer utils.ReadBuffer) (*BACnetApplicationT
 	_ = actualLength
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetApplicationTag
+	type BACnetApplicationTagChild interface {
+		InitializeParent(*BACnetApplicationTag, *BACnetTagHeader)
+		GetParent() *BACnetApplicationTag
+	}
+	var _child BACnetApplicationTagChild
 	var typeSwitchError error
 	switch {
 	case actualTagNumber == 0x0: // BACnetApplicationTagNull
-		_parent, typeSwitchError = BACnetApplicationTagNullParse(readBuffer)
+		_child, typeSwitchError = BACnetApplicationTagNullParse(readBuffer)
 	case actualTagNumber == 0x1: // BACnetApplicationTagBoolean
-		_parent, typeSwitchError = BACnetApplicationTagBooleanParse(readBuffer, header)
+		_child, typeSwitchError = BACnetApplicationTagBooleanParse(readBuffer, header)
 	case actualTagNumber == 0x2: // BACnetApplicationTagUnsignedInteger
-		_parent, typeSwitchError = BACnetApplicationTagUnsignedIntegerParse(readBuffer, header)
+		_child, typeSwitchError = BACnetApplicationTagUnsignedIntegerParse(readBuffer, header)
 	case actualTagNumber == 0x3: // BACnetApplicationTagSignedInteger
-		_parent, typeSwitchError = BACnetApplicationTagSignedIntegerParse(readBuffer, header)
+		_child, typeSwitchError = BACnetApplicationTagSignedIntegerParse(readBuffer, header)
 	case actualTagNumber == 0x4: // BACnetApplicationTagReal
-		_parent, typeSwitchError = BACnetApplicationTagRealParse(readBuffer)
+		_child, typeSwitchError = BACnetApplicationTagRealParse(readBuffer)
 	case actualTagNumber == 0x5: // BACnetApplicationTagDouble
-		_parent, typeSwitchError = BACnetApplicationTagDoubleParse(readBuffer)
+		_child, typeSwitchError = BACnetApplicationTagDoubleParse(readBuffer)
 	case actualTagNumber == 0x6: // BACnetApplicationTagOctetString
-		_parent, typeSwitchError = BACnetApplicationTagOctetStringParse(readBuffer, header)
+		_child, typeSwitchError = BACnetApplicationTagOctetStringParse(readBuffer, header)
 	case actualTagNumber == 0x7: // BACnetApplicationTagCharacterString
-		_parent, typeSwitchError = BACnetApplicationTagCharacterStringParse(readBuffer, header)
+		_child, typeSwitchError = BACnetApplicationTagCharacterStringParse(readBuffer, header)
 	case actualTagNumber == 0x8: // BACnetApplicationTagBitString
-		_parent, typeSwitchError = BACnetApplicationTagBitStringParse(readBuffer, header)
+		_child, typeSwitchError = BACnetApplicationTagBitStringParse(readBuffer, header)
 	case actualTagNumber == 0x9: // BACnetApplicationTagEnumerated
-		_parent, typeSwitchError = BACnetApplicationTagEnumeratedParse(readBuffer, header)
+		_child, typeSwitchError = BACnetApplicationTagEnumeratedParse(readBuffer, header)
 	case actualTagNumber == 0xA: // BACnetApplicationTagDate
-		_parent, typeSwitchError = BACnetApplicationTagDateParse(readBuffer)
+		_child, typeSwitchError = BACnetApplicationTagDateParse(readBuffer)
 	case actualTagNumber == 0xB: // BACnetApplicationTagTime
-		_parent, typeSwitchError = BACnetApplicationTagTimeParse(readBuffer)
+		_child, typeSwitchError = BACnetApplicationTagTimeParse(readBuffer)
 	case actualTagNumber == 0xC: // BACnetApplicationTagObjectIdentifier
-		_parent, typeSwitchError = BACnetApplicationTagObjectIdentifierParse(readBuffer)
+		_child, typeSwitchError = BACnetApplicationTagObjectIdentifierParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -213,8 +217,8 @@ func BACnetApplicationTagParse(readBuffer utils.ReadBuffer) (*BACnetApplicationT
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, header)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), header)
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetApplicationTag) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBitString.go
index 6aedec6..b8f589a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBitString.go
@@ -122,7 +122,7 @@ func (m *BACnetApplicationTagBitString) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagBitStringParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagBitStringParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTagBitString, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagBitString"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func BACnetApplicationTagBitStringParse(readBuffer utils.ReadBuffer, header *BAC
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagBitString) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBoolean.go
index ebe42ca..e3ef171 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBoolean.go
@@ -138,7 +138,7 @@ func (m *BACnetApplicationTagBoolean) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagBooleanParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagBooleanParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTagBoolean, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagBoolean"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -173,7 +173,7 @@ func BACnetApplicationTagBooleanParse(readBuffer utils.ReadBuffer, header *BACne
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagBoolean) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagCharacterString.go
index 14e6006..e0672e7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagCharacterString.go
@@ -138,7 +138,7 @@ func (m *BACnetApplicationTagCharacterString) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagCharacterStringParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagCharacterStringParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTagCharacterString, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagCharacterString"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -173,7 +173,7 @@ func BACnetApplicationTagCharacterStringParse(readBuffer utils.ReadBuffer, heade
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagCharacterString) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDate.go
index 17f4181..6c8165d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDate.go
@@ -122,7 +122,7 @@ func (m *BACnetApplicationTagDate) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagDateParse(readBuffer utils.ReadBuffer) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagDateParse(readBuffer utils.ReadBuffer) (*BACnetApplicationTagDate, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagDate"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func BACnetApplicationTagDateParse(readBuffer utils.ReadBuffer) (*BACnetApplicat
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagDate) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDouble.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDouble.go
index df2c008..da48eea 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDouble.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDouble.go
@@ -138,7 +138,7 @@ func (m *BACnetApplicationTagDouble) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagDoubleParse(readBuffer utils.ReadBuffer) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagDoubleParse(readBuffer utils.ReadBuffer) (*BACnetApplicationTagDouble, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagDouble"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -173,7 +173,7 @@ func BACnetApplicationTagDoubleParse(readBuffer utils.ReadBuffer) (*BACnetApplic
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagDouble) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
index a78c4e1..8746457 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
@@ -138,7 +138,7 @@ func (m *BACnetApplicationTagEnumerated) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagEnumeratedParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagEnumeratedParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTagEnumerated, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagEnumerated"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -173,7 +173,7 @@ func BACnetApplicationTagEnumeratedParse(readBuffer utils.ReadBuffer, header *BA
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagEnumerated) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagNull.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagNull.go
index e56ce47..e9fc311 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagNull.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagNull.go
@@ -101,7 +101,7 @@ func (m *BACnetApplicationTagNull) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagNullParse(readBuffer utils.ReadBuffer) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagNullParse(readBuffer utils.ReadBuffer) (*BACnetApplicationTagNull, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagNull"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -117,7 +117,7 @@ func BACnetApplicationTagNullParse(readBuffer utils.ReadBuffer) (*BACnetApplicat
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagNull) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagObjectIdentifier.go
index a04f972..cbfc10e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagObjectIdentifier.go
@@ -146,7 +146,7 @@ func (m *BACnetApplicationTagObjectIdentifier) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagObjectIdentifierParse(readBuffer utils.ReadBuffer) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagObjectIdentifierParse(readBuffer utils.ReadBuffer) (*BACnetApplicationTagObjectIdentifier, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagObjectIdentifier"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -186,7 +186,7 @@ func BACnetApplicationTagObjectIdentifierParse(readBuffer utils.ReadBuffer) (*BA
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagObjectIdentifier) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagOctetString.go
index f4c4bcb..bac9546 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagOctetString.go
@@ -138,7 +138,7 @@ func (m *BACnetApplicationTagOctetString) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagOctetStringParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagOctetStringParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTagOctetString, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagOctetString"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -173,7 +173,7 @@ func BACnetApplicationTagOctetStringParse(readBuffer utils.ReadBuffer, header *B
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagOctetString) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagReal.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagReal.go
index defa7bd..5792117 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagReal.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagReal.go
@@ -138,7 +138,7 @@ func (m *BACnetApplicationTagReal) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagRealParse(readBuffer utils.ReadBuffer) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagRealParse(readBuffer utils.ReadBuffer) (*BACnetApplicationTagReal, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagReal"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -173,7 +173,7 @@ func BACnetApplicationTagRealParse(readBuffer utils.ReadBuffer) (*BACnetApplicat
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagReal) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagSignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagSignedInteger.go
index 48fc872..b435f24 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagSignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagSignedInteger.go
@@ -138,7 +138,7 @@ func (m *BACnetApplicationTagSignedInteger) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagSignedIntegerParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagSignedIntegerParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTagSignedInteger, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagSignedInteger"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -173,7 +173,7 @@ func BACnetApplicationTagSignedIntegerParse(readBuffer utils.ReadBuffer, header
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagSignedInteger) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagTime.go
index 8ff92bb..c7d3d03 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagTime.go
@@ -122,7 +122,7 @@ func (m *BACnetApplicationTagTime) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagTimeParse(readBuffer utils.ReadBuffer) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagTimeParse(readBuffer utils.ReadBuffer) (*BACnetApplicationTagTime, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagTime"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func BACnetApplicationTagTimeParse(readBuffer utils.ReadBuffer) (*BACnetApplicat
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagTime) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagUnsignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagUnsignedInteger.go
index fd9e26a..7f6d73a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagUnsignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagUnsignedInteger.go
@@ -138,7 +138,7 @@ func (m *BACnetApplicationTagUnsignedInteger) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetApplicationTagUnsignedIntegerParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTag, error) {
+func BACnetApplicationTagUnsignedIntegerParse(readBuffer utils.ReadBuffer, header *BACnetTagHeader) (*BACnetApplicationTagUnsignedInteger, error) {
 	if pullErr := readBuffer.PullContext("BACnetApplicationTagUnsignedInteger"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -173,7 +173,7 @@ func BACnetApplicationTagUnsignedIntegerParse(readBuffer utils.ReadBuffer, heade
 		BACnetApplicationTag: &BACnetApplicationTag{},
 	}
 	_child.BACnetApplicationTag.Child = _child
-	return _child.BACnetApplicationTag, nil
+	return _child, nil
 }
 
 func (m *BACnetApplicationTagUnsignedInteger) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetClosingTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetClosingTag.go
index 9c292ca..f19d73d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetClosingTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetClosingTag.go
@@ -109,7 +109,7 @@ func (m *BACnetClosingTag) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetClosingTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, actualLength uint32) (*BACnetContextTag, error) {
+func BACnetClosingTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, actualLength uint32) (*BACnetClosingTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetClosingTag"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -130,7 +130,7 @@ func BACnetClosingTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8,
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetClosingTag) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
index 6aafec3..f1a64ce 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
@@ -110,39 +110,43 @@ func BACnetConfirmedServiceACKParse(readBuffer utils.ReadBuffer) (*BACnetConfirm
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetConfirmedServiceACK
+	type BACnetConfirmedServiceACKChild interface {
+		InitializeParent(*BACnetConfirmedServiceACK)
+		GetParent() *BACnetConfirmedServiceACK
+	}
+	var _child BACnetConfirmedServiceACKChild
 	var typeSwitchError error
 	switch {
 	case serviceChoice == 0x03: // BACnetConfirmedServiceACKGetAlarmSummary
-		_parent, typeSwitchError = BACnetConfirmedServiceACKGetAlarmSummaryParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKGetAlarmSummaryParse(readBuffer)
 	case serviceChoice == 0x04: // BACnetConfirmedServiceACKGetEnrollmentSummary
-		_parent, typeSwitchError = BACnetConfirmedServiceACKGetEnrollmentSummaryParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKGetEnrollmentSummaryParse(readBuffer)
 	case serviceChoice == 0x1D: // BACnetConfirmedServiceACKGetEventInformation
-		_parent, typeSwitchError = BACnetConfirmedServiceACKGetEventInformationParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKGetEventInformationParse(readBuffer)
 	case serviceChoice == 0x06: // BACnetConfirmedServiceACKAtomicReadFile
-		_parent, typeSwitchError = BACnetConfirmedServiceACKAtomicReadFileParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKAtomicReadFileParse(readBuffer)
 	case serviceChoice == 0x07: // BACnetConfirmedServiceACKAtomicWriteFile
-		_parent, typeSwitchError = BACnetConfirmedServiceACKAtomicWriteFileParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKAtomicWriteFileParse(readBuffer)
 	case serviceChoice == 0x08: // BACnetConfirmedServiceAddListElement
-		_parent, typeSwitchError = BACnetConfirmedServiceAddListElementParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceAddListElementParse(readBuffer)
 	case serviceChoice == 0x0A: // BACnetConfirmedServiceACKCreateObject
-		_parent, typeSwitchError = BACnetConfirmedServiceACKCreateObjectParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKCreateObjectParse(readBuffer)
 	case serviceChoice == 0x0C: // BACnetConfirmedServiceACKReadProperty
-		_parent, typeSwitchError = BACnetConfirmedServiceACKReadPropertyParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKReadPropertyParse(readBuffer)
 	case serviceChoice == 0x0E: // BACnetConfirmedServiceACKReadPropertyMultiple
-		_parent, typeSwitchError = BACnetConfirmedServiceACKReadPropertyMultipleParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKReadPropertyMultipleParse(readBuffer)
 	case serviceChoice == 0x1A: // BACnetConfirmedServiceACKReadRange
-		_parent, typeSwitchError = BACnetConfirmedServiceACKReadRangeParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKReadRangeParse(readBuffer)
 	case serviceChoice == 0x12: // BACnetConfirmedServiceACKConfirmedPrivateTransfer
-		_parent, typeSwitchError = BACnetConfirmedServiceACKConfirmedPrivateTransferParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKConfirmedPrivateTransferParse(readBuffer)
 	case serviceChoice == 0x15: // BACnetConfirmedServiceACKVTOpen
-		_parent, typeSwitchError = BACnetConfirmedServiceACKVTOpenParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKVTOpenParse(readBuffer)
 	case serviceChoice == 0x17: // BACnetConfirmedServiceACKVTData
-		_parent, typeSwitchError = BACnetConfirmedServiceACKVTDataParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKVTDataParse(readBuffer)
 	case serviceChoice == 0x18: // BACnetConfirmedServiceACKRemovedAuthenticate
-		_parent, typeSwitchError = BACnetConfirmedServiceACKRemovedAuthenticateParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKRemovedAuthenticateParse(readBuffer)
 	case serviceChoice == 0x0D: // BACnetConfirmedServiceACKRemovedReadPropertyConditional
-		_parent, typeSwitchError = BACnetConfirmedServiceACKRemovedReadPropertyConditionalParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceACKRemovedReadPropertyConditionalParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -156,8 +160,8 @@ func BACnetConfirmedServiceACKParse(readBuffer utils.ReadBuffer) (*BACnetConfirm
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetConfirmedServiceACK) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
index 5b6a90c..67e49d1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
@@ -104,7 +104,7 @@ func (m *BACnetConfirmedServiceACKAtomicReadFile) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKAtomicReadFileParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKAtomicReadFileParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKAtomicReadFile, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKAtomicReadFile"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -120,7 +120,7 @@ func BACnetConfirmedServiceACKAtomicReadFileParse(readBuffer utils.ReadBuffer) (
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKAtomicReadFile) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
index 531e828..fbec942 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
@@ -104,7 +104,7 @@ func (m *BACnetConfirmedServiceACKAtomicWriteFile) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKAtomicWriteFileParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKAtomicWriteFileParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKAtomicWriteFile, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKAtomicWriteFile"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -120,7 +120,7 @@ func BACnetConfirmedServiceACKAtomicWriteFileParse(readBuffer utils.ReadBuffer)
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKAtomicWriteFile) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
index c801017..4d7d14b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
@@ -104,7 +104,7 @@ func (m *BACnetConfirmedServiceACKConfirmedPrivateTransfer) GetLengthInBytes() u
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKConfirmedPrivateTransfer, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKConfirmedPrivateTransfer"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -120,7 +120,7 @@ func BACnetConfirmedServiceACKConfirmedPrivateTransferParse(readBuffer utils.Rea
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKConfirmedPrivateTransfer) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
index 97b2e3f..e3f4e6d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
@@ -103,7 +103,7 @@ func (m *BACnetConfirmedServiceACKCreateObject) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKCreateObjectParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKCreateObjectParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKCreateObject, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKCreateObject"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetConfirmedServiceACKCreateObjectParse(readBuffer utils.ReadBuffer) (*B
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKCreateObject) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
index 51cb765..dc501b2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
@@ -104,7 +104,7 @@ func (m *BACnetConfirmedServiceACKGetAlarmSummary) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKGetAlarmSummaryParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKGetAlarmSummaryParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKGetAlarmSummary, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKGetAlarmSummary"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -120,7 +120,7 @@ func BACnetConfirmedServiceACKGetAlarmSummaryParse(readBuffer utils.ReadBuffer)
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKGetAlarmSummary) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
index 33da403..ce9b0c7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
@@ -104,7 +104,7 @@ func (m *BACnetConfirmedServiceACKGetEnrollmentSummary) GetLengthInBytes() uint1
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKGetEnrollmentSummaryParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKGetEnrollmentSummaryParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKGetEnrollmentSummary, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKGetEnrollmentSummary"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -120,7 +120,7 @@ func BACnetConfirmedServiceACKGetEnrollmentSummaryParse(readBuffer utils.ReadBuf
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKGetEnrollmentSummary) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
index 5ff2fee..b434c1f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
@@ -104,7 +104,7 @@ func (m *BACnetConfirmedServiceACKGetEventInformation) GetLengthInBytes() uint16
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKGetEventInformationParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKGetEventInformationParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKGetEventInformation, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKGetEventInformation"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -120,7 +120,7 @@ func BACnetConfirmedServiceACKGetEventInformationParse(readBuffer utils.ReadBuff
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKGetEventInformation) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
index bc2e749..fbc4fbe 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
@@ -103,7 +103,7 @@ func (m *BACnetConfirmedServiceACKReadProperty) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKReadPropertyParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKReadPropertyParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKReadProperty, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKReadProperty"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetConfirmedServiceACKReadPropertyParse(readBuffer utils.ReadBuffer) (*B
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKReadProperty) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
index 31bc85e..e9a9745 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
@@ -104,7 +104,7 @@ func (m *BACnetConfirmedServiceACKReadPropertyMultiple) GetLengthInBytes() uint1
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKReadPropertyMultipleParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKReadPropertyMultipleParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKReadPropertyMultiple, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKReadPropertyMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -120,7 +120,7 @@ func BACnetConfirmedServiceACKReadPropertyMultipleParse(readBuffer utils.ReadBuf
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKReadPropertyMultiple) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
index 75d0e6a..72208ac 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
@@ -103,7 +103,7 @@ func (m *BACnetConfirmedServiceACKReadRange) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKReadRangeParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKReadRangeParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKReadRange, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKReadRange"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetConfirmedServiceACKReadRangeParse(readBuffer utils.ReadBuffer) (*BACn
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKReadRange) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
index afb39c1..ea31ebd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
@@ -104,7 +104,7 @@ func (m *BACnetConfirmedServiceACKRemovedAuthenticate) GetLengthInBytes() uint16
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKRemovedAuthenticateParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKRemovedAuthenticateParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKRemovedAuthenticate, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKRemovedAuthenticate"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -120,7 +120,7 @@ func BACnetConfirmedServiceACKRemovedAuthenticateParse(readBuffer utils.ReadBuff
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKRemovedAuthenticate) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
index 5d0ced8..fbd0ebc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
@@ -104,7 +104,7 @@ func (m *BACnetConfirmedServiceACKRemovedReadPropertyConditional) GetLengthInByt
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKRemovedReadPropertyConditionalParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKRemovedReadPropertyConditionalParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKRemovedReadPropertyConditional, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKRemovedReadPropertyConditional"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -120,7 +120,7 @@ func BACnetConfirmedServiceACKRemovedReadPropertyConditionalParse(readBuffer uti
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKRemovedReadPropertyConditional) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
index 82ce8b9..250ba94 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
@@ -103,7 +103,7 @@ func (m *BACnetConfirmedServiceACKVTData) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKVTDataParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKVTDataParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKVTData, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKVTData"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetConfirmedServiceACKVTDataParse(readBuffer utils.ReadBuffer) (*BACnetC
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKVTData) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
index 9547448..62a6bda 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
@@ -103,7 +103,7 @@ func (m *BACnetConfirmedServiceACKVTOpen) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceACKVTOpenParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceACKVTOpenParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACKVTOpen, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceACKVTOpen"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetConfirmedServiceACKVTOpenParse(readBuffer utils.ReadBuffer) (*BACnetC
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceACKVTOpen) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceAddListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceAddListElement.go
index 6e684fe..b1704f6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceAddListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceAddListElement.go
@@ -103,7 +103,7 @@ func (m *BACnetConfirmedServiceAddListElement) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceAddListElementParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceACK, error) {
+func BACnetConfirmedServiceAddListElementParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceAddListElement, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceAddListElement"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetConfirmedServiceAddListElementParse(readBuffer utils.ReadBuffer) (*BA
 		BACnetConfirmedServiceACK: &BACnetConfirmedServiceACK{},
 	}
 	_child.BACnetConfirmedServiceACK.Child = _child
-	return _child.BACnetConfirmedServiceACK, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceAddListElement) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
index 22848d3..5770efc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
@@ -113,73 +113,77 @@ func BACnetConfirmedServiceRequestParse(readBuffer utils.ReadBuffer, len uint16)
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetConfirmedServiceRequest
+	type BACnetConfirmedServiceRequestChild interface {
+		InitializeParent(*BACnetConfirmedServiceRequest)
+		GetParent() *BACnetConfirmedServiceRequest
+	}
+	var _child BACnetConfirmedServiceRequestChild
 	var typeSwitchError error
 	switch {
 	case serviceChoice == 0x00: // BACnetConfirmedServiceRequestAcknowledgeAlarm
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestAcknowledgeAlarmParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestAcknowledgeAlarmParse(readBuffer, len)
 	case serviceChoice == 0x01: // BACnetConfirmedServiceRequestConfirmedCOVNotification
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedCOVNotificationParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestConfirmedCOVNotificationParse(readBuffer, len)
 	case serviceChoice == 0x02: // BACnetConfirmedServiceRequestConfirmedEventNotification
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedEventNotificationParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestConfirmedEventNotificationParse(readBuffer, len)
 	case serviceChoice == 0x04: // BACnetConfirmedServiceRequestGetEnrollmentSummary
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestGetEnrollmentSummaryParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestGetEnrollmentSummaryParse(readBuffer, len)
 	case serviceChoice == 0x05: // BACnetConfirmedServiceRequestSubscribeCOV
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVParse(readBuffer, len)
 	case serviceChoice == 0x06: // BACnetConfirmedServiceRequestAtomicReadFile
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestAtomicReadFileParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestAtomicReadFileParse(readBuffer, len)
 	case serviceChoice == 0x07: // BACnetConfirmedServiceRequestAtomicWriteFile
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestAtomicWriteFileParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestAtomicWriteFileParse(readBuffer, len)
 	case serviceChoice == 0x08: // BACnetConfirmedServiceRequestAddListElement
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestAddListElementParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestAddListElementParse(readBuffer, len)
 	case serviceChoice == 0x09: // BACnetConfirmedServiceRequestRemoveListElement
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestRemoveListElementParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestRemoveListElementParse(readBuffer, len)
 	case serviceChoice == 0x0A: // BACnetConfirmedServiceRequestCreateObject
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestCreateObjectParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestCreateObjectParse(readBuffer, len)
 	case serviceChoice == 0x0B: // BACnetConfirmedServiceRequestDeleteObject
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestDeleteObjectParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestDeleteObjectParse(readBuffer, len)
 	case serviceChoice == 0x0C: // BACnetConfirmedServiceRequestReadProperty
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestReadPropertyParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestReadPropertyParse(readBuffer, len)
 	case serviceChoice == 0x0E: // BACnetConfirmedServiceRequestReadPropertyMultiple
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestReadPropertyMultipleParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestReadPropertyMultipleParse(readBuffer, len)
 	case serviceChoice == 0x0F: // BACnetConfirmedServiceRequestWriteProperty
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestWritePropertyParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestWritePropertyParse(readBuffer, len)
 	case serviceChoice == 0x10: // BACnetConfirmedServiceRequestWritePropertyMultiple
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestWritePropertyMultipleParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestWritePropertyMultipleParse(readBuffer, len)
 	case serviceChoice == 0x11: // BACnetConfirmedServiceRequestDeviceCommunicationControl
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestDeviceCommunicationControlParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestDeviceCommunicationControlParse(readBuffer, len)
 	case serviceChoice == 0x12: // BACnetConfirmedServiceRequestConfirmedPrivateTransfer
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedPrivateTransferParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestConfirmedPrivateTransferParse(readBuffer, len)
 	case serviceChoice == 0x13: // BACnetConfirmedServiceRequestConfirmedTextMessage
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedTextMessageParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestConfirmedTextMessageParse(readBuffer, len)
 	case serviceChoice == 0x14: // BACnetConfirmedServiceRequestReinitializeDevice
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestReinitializeDeviceParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestReinitializeDeviceParse(readBuffer, len)
 	case serviceChoice == 0x15: // BACnetConfirmedServiceRequestVTOpen
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestVTOpenParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestVTOpenParse(readBuffer, len)
 	case serviceChoice == 0x16: // BACnetConfirmedServiceRequestVTClose
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestVTCloseParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestVTCloseParse(readBuffer, len)
 	case serviceChoice == 0x17: // BACnetConfirmedServiceRequestVTData
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestVTDataParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestVTDataParse(readBuffer, len)
 	case serviceChoice == 0x18: // BACnetConfirmedServiceRequestRemovedAuthenticate
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestRemovedAuthenticateParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestRemovedAuthenticateParse(readBuffer, len)
 	case serviceChoice == 0x19: // BACnetConfirmedServiceRequestRemovedRequestKey
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestRemovedRequestKeyParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestRemovedRequestKeyParse(readBuffer, len)
 	case serviceChoice == 0x0D: // BACnetConfirmedServiceRequestRemovedReadPropertyConditional
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestRemovedReadPropertyConditionalParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestRemovedReadPropertyConditionalParse(readBuffer, len)
 	case serviceChoice == 0x1A: // BACnetConfirmedServiceRequestReadRange
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestReadRangeParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestReadRangeParse(readBuffer, len)
 	case serviceChoice == 0x1B: // BACnetConfirmedServiceRequestLifeSafetyOperation
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestLifeSafetyOperationParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestLifeSafetyOperationParse(readBuffer, len)
 	case serviceChoice == 0x1C: // BACnetConfirmedServiceRequestSubscribeCOVProperty
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer, len)
 	case serviceChoice == 0x1D: // BACnetConfirmedServiceRequestGetEventInformation
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestGetEventInformationParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestGetEventInformationParse(readBuffer, len)
 	case serviceChoice == 0x1E: // BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer, len)
 	case serviceChoice == 0x1F: // BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuffer, len)
 	case true: // BACnetConfirmedServiceRequestConfirmedUnknown
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestConfirmedUnknownParse(readBuffer, len)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestConfirmedUnknownParse(readBuffer, len)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -193,8 +197,8 @@ func BACnetConfirmedServiceRequestParse(readBuffer utils.ReadBuffer, len uint16)
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetConfirmedServiceRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
index 77f4e66..76a95a4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestAcknowledgeAlarm) GetLengthInBytes() uint1
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestAcknowledgeAlarmParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestAcknowledgeAlarmParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestAcknowledgeAlarm, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestAcknowledgeAlarm"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestAcknowledgeAlarmParse(readBuffer utils.ReadBuf
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestAcknowledgeAlarm) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
index 43eb477..4bd6a75 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestAddListElement) GetLengthInBytes() uint16
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestAddListElementParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestAddListElementParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestAddListElement, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestAddListElement"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestAddListElementParse(readBuffer utils.ReadBuffe
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestAddListElement) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
index b0d018a..e5630da 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
@@ -139,7 +139,7 @@ func (m *BACnetConfirmedServiceRequestAtomicReadFile) GetLengthInBytes() uint16
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestAtomicReadFileParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestAtomicReadFileParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestAtomicReadFile, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestAtomicReadFile"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -183,7 +183,7 @@ func BACnetConfirmedServiceRequestAtomicReadFileParse(readBuffer utils.ReadBuffe
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestAtomicReadFile) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileRecord.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileRecord.go
index e2b6aa8..412514f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileRecord.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileRecord.go
@@ -135,7 +135,7 @@ func (m *BACnetConfirmedServiceRequestAtomicReadFileRecord) GetLengthInBytes() u
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestAtomicReadFileRecordParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord, error) {
+func BACnetConfirmedServiceRequestAtomicReadFileRecordParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequestAtomicReadFileRecord, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestAtomicReadFileRecord"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -179,7 +179,7 @@ func BACnetConfirmedServiceRequestAtomicReadFileRecordParse(readBuffer utils.Rea
 		BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord: &BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord{},
 	}
 	_child.BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.Child = _child
-	return _child.BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestAtomicReadFileRecord) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStream.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStream.go
index dd0edef..1bf852c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStream.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStream.go
@@ -135,7 +135,7 @@ func (m *BACnetConfirmedServiceRequestAtomicReadFileStream) GetLengthInBytes() u
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestAtomicReadFileStreamParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord, error) {
+func BACnetConfirmedServiceRequestAtomicReadFileStreamParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequestAtomicReadFileStream, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestAtomicReadFileStream"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -179,7 +179,7 @@ func BACnetConfirmedServiceRequestAtomicReadFileStreamParse(readBuffer utils.Rea
 		BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord: &BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord{},
 	}
 	_child.BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.Child = _child
-	return _child.BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestAtomicReadFileStream) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go
index ee7a37e..b845f1e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go
@@ -178,13 +178,17 @@ func BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecordParse(readBuffer u
 	_ = peekedTagNumber
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord
+	type BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecordChild interface {
+		InitializeParent(*BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord, *BACnetTagHeader, *BACnetOpeningTag, *BACnetClosingTag)
+		GetParent() *BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord
+	}
+	var _child BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecordChild
 	var typeSwitchError error
 	switch {
 	case peekedTagNumber == 0x0: // BACnetConfirmedServiceRequestAtomicReadFileStream
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestAtomicReadFileStreamParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestAtomicReadFileStreamParse(readBuffer)
 	case peekedTagNumber == 0x1: // BACnetConfirmedServiceRequestAtomicReadFileRecord
-		_parent, typeSwitchError = BACnetConfirmedServiceRequestAtomicReadFileRecordParse(readBuffer)
+		_child, typeSwitchError = BACnetConfirmedServiceRequestAtomicReadFileRecordParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -211,8 +215,8 @@ func BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecordParse(readBuffer u
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, peekedTagHeader, openingTag, closingTag)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), peekedTagHeader, openingTag, closingTag)
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
index 2f42e60..7a17528 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
@@ -177,7 +177,7 @@ func (m *BACnetConfirmedServiceRequestAtomicWriteFile) GetLengthInBytes() uint16
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestAtomicWriteFileParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestAtomicWriteFileParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestAtomicWriteFile, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestAtomicWriteFile"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -279,7 +279,7 @@ func BACnetConfirmedServiceRequestAtomicWriteFileParse(readBuffer utils.ReadBuff
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestAtomicWriteFile) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
index 2487623..e1ee554 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
@@ -172,7 +172,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) GetLengthInBytes
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestConfirmedCOVNotificationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestConfirmedCOVNotificationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestConfirmedCOVNotification, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedCOVNotification"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -258,7 +258,7 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationParse(readBuffer utils
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
index d4b859c..48d703c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) GetLengt
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuff
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
index 5468072..9e6b11d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
@@ -269,7 +269,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedEventNotification) GetLengthInByt
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestConfirmedEventNotificationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestConfirmedEventNotificationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestConfirmedEventNotification, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedEventNotification"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -499,7 +499,7 @@ func BACnetConfirmedServiceRequestConfirmedEventNotificationParse(readBuffer uti
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedEventNotification) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
index b7925d3..a2591c6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) GetLengthInBytes
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestConfirmedPrivateTransfer, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedPrivateTransfer"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestConfirmedPrivateTransferParse(readBuffer utils
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
index fe31990..85856c3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedTextMessage) GetLengthInBytes() u
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestConfirmedTextMessageParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestConfirmedTextMessageParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestConfirmedTextMessage, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedTextMessage"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestConfirmedTextMessageParse(readBuffer utils.Rea
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedTextMessage) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedUnknown.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedUnknown.go
index 47e76a9..c7ef843 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedUnknown.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedUnknown.go
@@ -130,7 +130,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedUnknown) GetLengthInBytes() uint1
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestConfirmedUnknownParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestConfirmedUnknownParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestConfirmedUnknown, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedUnknown"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -153,7 +153,7 @@ func BACnetConfirmedServiceRequestConfirmedUnknownParse(readBuffer utils.ReadBuf
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedUnknown) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
index 6c5b3f9..a79445c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestCreateObject) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestCreateObjectParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestCreateObjectParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestCreateObject, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestCreateObject"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestCreateObjectParse(readBuffer utils.ReadBuffer,
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestCreateObject) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
index 488070c..2d311ca 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestDeleteObject) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestDeleteObjectParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestDeleteObjectParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestDeleteObject, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestDeleteObject"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestDeleteObjectParse(readBuffer utils.ReadBuffer,
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestDeleteObject) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
index 4008ce7..418cd50 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
@@ -155,7 +155,7 @@ func (m *BACnetConfirmedServiceRequestDeviceCommunicationControl) GetLengthInByt
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestDeviceCommunicationControlParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestDeviceCommunicationControlParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestDeviceCommunicationControl, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestDeviceCommunicationControl"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -229,7 +229,7 @@ func BACnetConfirmedServiceRequestDeviceCommunicationControlParse(readBuffer uti
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestDeviceCommunicationControl) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
index 03c47ab..2888cc9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestGetEnrollmentSummary) GetLengthInBytes() u
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestGetEnrollmentSummaryParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestGetEnrollmentSummaryParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestGetEnrollmentSummary, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestGetEnrollmentSummary"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestGetEnrollmentSummaryParse(readBuffer utils.Rea
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestGetEnrollmentSummary) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
index 084a215..442ffb1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestGetEventInformation) GetLengthInBytes() ui
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestGetEventInformationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestGetEventInformationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestGetEventInformation, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestGetEventInformation"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestGetEventInformationParse(readBuffer utils.Read
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestGetEventInformation) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
index 82804f3..c2a2d36 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestLifeSafetyOperation) GetLengthInBytes() ui
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestLifeSafetyOperationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestLifeSafetyOperationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestLifeSafetyOperation, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestLifeSafetyOperation"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestLifeSafetyOperationParse(readBuffer utils.Read
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestLifeSafetyOperation) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
index f377028..2cbc227 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
@@ -153,7 +153,7 @@ func (m *BACnetConfirmedServiceRequestReadProperty) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestReadPropertyParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestReadPropertyParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestReadProperty, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestReadProperty"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -219,7 +219,7 @@ func BACnetConfirmedServiceRequestReadPropertyParse(readBuffer utils.ReadBuffer,
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestReadProperty) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
index c44d583..3ab5886 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
@@ -132,7 +132,7 @@ func (m *BACnetConfirmedServiceRequestReadPropertyMultiple) GetLengthInBytes() u
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestReadPropertyMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestReadPropertyMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestReadPropertyMultiple, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestReadPropertyMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -170,7 +170,7 @@ func BACnetConfirmedServiceRequestReadPropertyMultipleParse(readBuffer utils.Rea
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestReadPropertyMultiple) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
index c637166..3c101a7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestReadRange) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestReadRangeParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestReadRangeParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestReadRange, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestReadRange"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestReadRangeParse(readBuffer utils.ReadBuffer, le
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestReadRange) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
index 62f6e78..2c41bdb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
@@ -142,7 +142,7 @@ func (m *BACnetConfirmedServiceRequestReinitializeDevice) GetLengthInBytes() uin
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestReinitializeDeviceParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestReinitializeDeviceParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestReinitializeDevice, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestReinitializeDevice"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -194,7 +194,7 @@ func BACnetConfirmedServiceRequestReinitializeDeviceParse(readBuffer utils.ReadB
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestReinitializeDevice) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
index 0f97798..abb72e1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestRemoveListElement) GetLengthInBytes() uint
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestRemoveListElementParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestRemoveListElementParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestRemoveListElement, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestRemoveListElement"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestRemoveListElementParse(readBuffer utils.ReadBu
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestRemoveListElement) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
index 9209e9c..775f823 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestRemovedAuthenticate) GetLengthInBytes() ui
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestRemovedAuthenticateParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestRemovedAuthenticateParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestRemovedAuthenticate, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestRemovedAuthenticate"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestRemovedAuthenticateParse(readBuffer utils.Read
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestRemovedAuthenticate) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
index 17e5248..749268a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestRemovedReadPropertyConditional) GetLengthI
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestRemovedReadPropertyConditionalParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestRemovedReadPropertyConditionalParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestRemovedReadPropertyConditional, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestRemovedReadPropertyConditional"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestRemovedReadPropertyConditionalParse(readBuffer
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestRemovedReadPropertyConditional) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
index 1f6d089..1e2dc3b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestRemovedRequestKey) GetLengthInBytes() uint
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestRemovedRequestKeyParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestRemovedRequestKeyParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestRemovedRequestKey, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestRemovedRequestKey"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestRemovedRequestKeyParse(readBuffer utils.ReadBu
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestRemovedRequestKey) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
index 9cd9b70..66e25ee 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
@@ -161,7 +161,7 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOV) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestSubscribeCOVParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestSubscribeCOVParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestSubscribeCOV, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestSubscribeCOV"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -233,7 +233,7 @@ func BACnetConfirmedServiceRequestSubscribeCOVParse(readBuffer utils.ReadBuffer,
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestSubscribeCOV) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
index 200b86a..e0ec143 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetLengthInBytes() u
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestSubscribeCOVProperty, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestSubscribeCOVProperty"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(readBuffer utils.Rea
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
index f4c049c..aa1720b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetLengthInB
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer u
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
index 1a75339..02f83a8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestVTClose) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestVTCloseParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestVTCloseParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestVTClose, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestVTClose"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestVTCloseParse(readBuffer utils.ReadBuffer, len
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestVTClose) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
index 1a893a7..feb49a4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestVTData) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestVTDataParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestVTDataParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestVTData, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestVTData"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestVTDataParse(readBuffer utils.ReadBuffer, len u
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestVTData) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
index 6ec568d..026f5ab 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestVTOpen) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestVTOpenParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestVTOpenParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestVTOpen, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestVTOpen"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestVTOpenParse(readBuffer utils.ReadBuffer, len u
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestVTOpen) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
index 97124dc..125f26a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
@@ -177,7 +177,7 @@ func (m *BACnetConfirmedServiceRequestWriteProperty) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestWritePropertyParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestWritePropertyParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestWriteProperty, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestWriteProperty"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -279,7 +279,7 @@ func BACnetConfirmedServiceRequestWritePropertyParse(readBuffer utils.ReadBuffer
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestWriteProperty) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
index f1312e7..6665eba 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
@@ -107,7 +107,7 @@ func (m *BACnetConfirmedServiceRequestWritePropertyMultiple) GetLengthInBytes()
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestWritePropertyMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequest, error) {
+func BACnetConfirmedServiceRequestWritePropertyMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetConfirmedServiceRequestWritePropertyMultiple, error) {
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestWritePropertyMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetConfirmedServiceRequestWritePropertyMultipleParse(readBuffer utils.Re
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
-	return _child.BACnetConfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetConfirmedServiceRequestWritePropertyMultiple) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go
index 34166d5..4a382c5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go
@@ -169,17 +169,21 @@ func BACnetConstructedDataParse(readBuffer utils.ReadBuffer, tagNumber uint8, ob
 	_ = propertyIdentifierEnum
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetConstructedData
+	type BACnetConstructedDataChild interface {
+		InitializeParent(*BACnetConstructedData, *BACnetOpeningTag, *BACnetClosingTag)
+		GetParent() *BACnetConstructedData
+	}
+	var _child BACnetConstructedDataChild
 	var typeSwitchError error
 	switch {
 	case objectType == BACnetObjectType_COMMAND: // BACnetConstructedDataCommand
-		_parent, typeSwitchError = BACnetConstructedDataCommandParse(readBuffer, tagNumber, objectType, propertyIdentifierArgument)
+		_child, typeSwitchError = BACnetConstructedDataCommandParse(readBuffer, tagNumber, objectType, propertyIdentifierArgument)
 	case objectType == BACnetObjectType_LIFE_SAFETY_ZONE: // BACnetConstructedDataLifeSafetyZone
-		_parent, typeSwitchError = BACnetConstructedDataLifeSafetyZoneParse(readBuffer, tagNumber, objectType, propertyIdentifierArgument)
+		_child, typeSwitchError = BACnetConstructedDataLifeSafetyZoneParse(readBuffer, tagNumber, objectType, propertyIdentifierArgument)
 	case true && propertyIdentifierEnum == BACnetPropertyIdentifier_EVENT_TIME_STAMPS: // BACnetConstructedDataEventTimestamps
-		_parent, typeSwitchError = BACnetConstructedDataEventTimestampsParse(readBuffer, tagNumber, objectType, propertyIdentifierArgument)
+		_child, typeSwitchError = BACnetConstructedDataEventTimestampsParse(readBuffer, tagNumber, objectType, propertyIdentifierArgument)
 	case true: // BACnetConstructedDataUnspecified
-		_parent, typeSwitchError = BACnetConstructedDataUnspecifiedParse(readBuffer, tagNumber, objectType, propertyIdentifierArgument)
+		_child, typeSwitchError = BACnetConstructedDataUnspecifiedParse(readBuffer, tagNumber, objectType, propertyIdentifierArgument)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -206,8 +210,8 @@ func BACnetConstructedDataParse(readBuffer utils.ReadBuffer, tagNumber uint8, ob
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, openingTag, closingTag)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), openingTag, closingTag)
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetConstructedData) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataCommand.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataCommand.go
index 7b5d75e..f611830 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataCommand.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataCommand.go
@@ -157,7 +157,7 @@ func (m *BACnetConstructedDataCommand) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConstructedDataCommandParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, propertyIdentifierArgument *BACnetContextTagPropertyIdentifier) (*BACnetConstructedData, error) {
+func BACnetConstructedDataCommandParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, propertyIdentifierArgument *BACnetContextTagPropertyIdentifier) (*BACnetConstructedDataCommand, error) {
 	if pullErr := readBuffer.PullContext("BACnetConstructedDataCommand"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -222,7 +222,7 @@ func BACnetConstructedDataCommandParse(readBuffer utils.ReadBuffer, tagNumber ui
 		BACnetConstructedData: &BACnetConstructedData{},
 	}
 	_child.BACnetConstructedData.Child = _child
-	return _child.BACnetConstructedData, nil
+	return _child, nil
 }
 
 func (m *BACnetConstructedDataCommand) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataEventTimestamps.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataEventTimestamps.go
index c0e874e..aad2cd5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataEventTimestamps.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataEventTimestamps.go
@@ -153,7 +153,7 @@ func (m *BACnetConstructedDataEventTimestamps) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConstructedDataEventTimestampsParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, propertyIdentifierArgument *BACnetContextTagPropertyIdentifier) (*BACnetConstructedData, error) {
+func BACnetConstructedDataEventTimestampsParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, propertyIdentifierArgument *BACnetContextTagPropertyIdentifier) (*BACnetConstructedDataEventTimestamps, error) {
 	if pullErr := readBuffer.PullContext("BACnetConstructedDataEventTimestamps"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -211,7 +211,7 @@ func BACnetConstructedDataEventTimestampsParse(readBuffer utils.ReadBuffer, tagN
 		BACnetConstructedData: &BACnetConstructedData{},
 	}
 	_child.BACnetConstructedData.Child = _child
-	return _child.BACnetConstructedData, nil
+	return _child, nil
 }
 
 func (m *BACnetConstructedDataEventTimestamps) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataLifeSafetyZone.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataLifeSafetyZone.go
index 199a327..0591b99 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataLifeSafetyZone.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataLifeSafetyZone.go
@@ -135,7 +135,7 @@ func (m *BACnetConstructedDataLifeSafetyZone) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConstructedDataLifeSafetyZoneParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, propertyIdentifierArgument *BACnetContextTagPropertyIdentifier) (*BACnetConstructedData, error) {
+func BACnetConstructedDataLifeSafetyZoneParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, propertyIdentifierArgument *BACnetContextTagPropertyIdentifier) (*BACnetConstructedDataLifeSafetyZone, error) {
 	if pullErr := readBuffer.PullContext("BACnetConstructedDataLifeSafetyZone"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -172,7 +172,7 @@ func BACnetConstructedDataLifeSafetyZoneParse(readBuffer utils.ReadBuffer, tagNu
 		BACnetConstructedData: &BACnetConstructedData{},
 	}
 	_child.BACnetConstructedData.Child = _child
-	return _child.BACnetConstructedData, nil
+	return _child, nil
 }
 
 func (m *BACnetConstructedDataLifeSafetyZone) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataUnspecified.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataUnspecified.go
index 31e49f0..3d2f703 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataUnspecified.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataUnspecified.go
@@ -182,7 +182,7 @@ func (m *BACnetConstructedDataUnspecified) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConstructedDataUnspecifiedParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, propertyIdentifierArgument *BACnetContextTagPropertyIdentifier) (*BACnetConstructedData, error) {
+func BACnetConstructedDataUnspecifiedParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, propertyIdentifierArgument *BACnetContextTagPropertyIdentifier) (*BACnetConstructedDataUnspecified, error) {
 	if pullErr := readBuffer.PullContext("BACnetConstructedDataUnspecified"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -268,7 +268,7 @@ func BACnetConstructedDataUnspecifiedParse(readBuffer utils.ReadBuffer, tagNumbe
 		BACnetConstructedData: &BACnetConstructedData{},
 	}
 	_child.BACnetConstructedData.Child = _child
-	return _child.BACnetConstructedData, nil
+	return _child, nil
 }
 
 func (m *BACnetConstructedDataUnspecified) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go
index 226f12f..aaf9c9c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go
@@ -194,49 +194,53 @@ func BACnetContextTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8,
 	_ = isNotOpeningOrClosingTag
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetContextTag
+	type BACnetContextTagChild interface {
+		InitializeParent(*BACnetContextTag, *BACnetTagHeader)
+		GetParent() *BACnetContextTag
+	}
+	var _child BACnetContextTagChild
 	var typeSwitchError error
 	switch {
 	case dataType == BACnetDataType_BOOLEAN: // BACnetContextTagBoolean
-		_parent, typeSwitchError = BACnetContextTagBooleanParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
+		_child, typeSwitchError = BACnetContextTagBooleanParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
 	case dataType == BACnetDataType_UNSIGNED_INTEGER: // BACnetContextTagUnsignedInteger
-		_parent, typeSwitchError = BACnetContextTagUnsignedIntegerParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
+		_child, typeSwitchError = BACnetContextTagUnsignedIntegerParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
 	case dataType == BACnetDataType_SIGNED_INTEGER: // BACnetContextTagSignedInteger
-		_parent, typeSwitchError = BACnetContextTagSignedIntegerParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
+		_child, typeSwitchError = BACnetContextTagSignedIntegerParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
 	case dataType == BACnetDataType_REAL: // BACnetContextTagReal
-		_parent, typeSwitchError = BACnetContextTagRealParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag)
+		_child, typeSwitchError = BACnetContextTagRealParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag)
 	case dataType == BACnetDataType_DOUBLE: // BACnetContextTagDouble
-		_parent, typeSwitchError = BACnetContextTagDoubleParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag)
+		_child, typeSwitchError = BACnetContextTagDoubleParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag)
 	case dataType == BACnetDataType_OCTET_STRING: // BACnetContextTagOctetString
-		_parent, typeSwitchError = BACnetContextTagOctetStringParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
+		_child, typeSwitchError = BACnetContextTagOctetStringParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
 	case dataType == BACnetDataType_CHARACTER_STRING: // BACnetContextTagCharacterString
-		_parent, typeSwitchError = BACnetContextTagCharacterStringParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
+		_child, typeSwitchError = BACnetContextTagCharacterStringParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
 	case dataType == BACnetDataType_BIT_STRING: // BACnetContextTagBitString
-		_parent, typeSwitchError = BACnetContextTagBitStringParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
+		_child, typeSwitchError = BACnetContextTagBitStringParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
 	case dataType == BACnetDataType_ENUMERATED: // BACnetContextTagEnumerated
-		_parent, typeSwitchError = BACnetContextTagEnumeratedParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
+		_child, typeSwitchError = BACnetContextTagEnumeratedParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, header)
 	case dataType == BACnetDataType_DATE: // BACnetContextTagDate
-		_parent, typeSwitchError = BACnetContextTagDateParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag)
+		_child, typeSwitchError = BACnetContextTagDateParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag)
 	case dataType == BACnetDataType_TIME: // BACnetContextTagTime
-		_parent, typeSwitchError = BACnetContextTagTimeParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag)
+		_child, typeSwitchError = BACnetContextTagTimeParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag)
 	case dataType == BACnetDataType_BACNET_OBJECT_IDENTIFIER: // BACnetContextTagObjectIdentifier
-		_parent, typeSwitchError = BACnetContextTagObjectIdentifierParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag)
+		_child, typeSwitchError = BACnetContextTagObjectIdentifierParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag)
 	case dataType == BACnetDataType_BACNET_PROPERTY_IDENTIFIER: // BACnetContextTagPropertyIdentifier
-		_parent, typeSwitchError = BACnetContextTagPropertyIdentifierParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, actualLength)
+		_child, typeSwitchError = BACnetContextTagPropertyIdentifierParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, actualLength)
 	case dataType == BACnetDataType_EVENT_TYPE: // BACnetContextTagEventType
-		_parent, typeSwitchError = BACnetContextTagEventTypeParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, actualLength)
+		_child, typeSwitchError = BACnetContextTagEventTypeParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, actualLength)
 	case dataType == BACnetDataType_EVENT_STATE: // BACnetContextTagEventState
-		_parent, typeSwitchError = BACnetContextTagEventStateParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, actualLength)
+		_child, typeSwitchError = BACnetContextTagEventStateParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, actualLength)
 	case dataType == BACnetDataType_NOTIFY_TYPE: // BACnetContextTagNotifyType
-		_parent, typeSwitchError = BACnetContextTagNotifyTypeParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, actualLength)
+		_child, typeSwitchError = BACnetContextTagNotifyTypeParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag, actualLength)
 	case dataType == BACnetDataType_BACNET_DEVICE_STATE: // BACnetContextTagDeviceState
-		_parent, typeSwitchError = BACnetContextTagDeviceStateParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag)
+		_child, typeSwitchError = BACnetContextTagDeviceStateParse(readBuffer, tagNumberArgument, dataType, isNotOpeningOrClosingTag)
 	case dataType == BACnetDataType_OPENING_TAG: // BACnetOpeningTag
-		_parent, typeSwitchError = BACnetOpeningTagParse(readBuffer, tagNumberArgument, dataType, actualLength)
+		_child, typeSwitchError = BACnetOpeningTagParse(readBuffer, tagNumberArgument, dataType, actualLength)
 	case dataType == BACnetDataType_CLOSING_TAG: // BACnetClosingTag
-		_parent, typeSwitchError = BACnetClosingTagParse(readBuffer, tagNumberArgument, dataType, actualLength)
+		_child, typeSwitchError = BACnetClosingTagParse(readBuffer, tagNumberArgument, dataType, actualLength)
 	case true: // BACnetContextTagEmpty
-		_parent, typeSwitchError = BACnetContextTagEmptyParse(readBuffer, tagNumberArgument, dataType)
+		_child, typeSwitchError = BACnetContextTagEmptyParse(readBuffer, tagNumberArgument, dataType)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -250,8 +254,8 @@ func BACnetContextTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8,
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, header)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), header)
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetContextTag) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBitString.go
index e9632be..a471a2a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBitString.go
@@ -130,7 +130,7 @@ func (m *BACnetContextTagBitString) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagBitStringParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTag, error) {
+func BACnetContextTagBitStringParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTagBitString, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagBitString"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -165,7 +165,7 @@ func BACnetContextTagBitStringParse(readBuffer utils.ReadBuffer, tagNumberArgume
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagBitString) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go
index 1786af6..1c68b83 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go
@@ -157,7 +157,7 @@ func (m *BACnetContextTagBoolean) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagBooleanParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTag, error) {
+func BACnetContextTagBooleanParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTagBoolean, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagBoolean"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -210,7 +210,7 @@ func BACnetContextTagBooleanParse(readBuffer utils.ReadBuffer, tagNumberArgument
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagBoolean) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagCharacterString.go
index 34826a8..2f6246b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagCharacterString.go
@@ -130,7 +130,7 @@ func (m *BACnetContextTagCharacterString) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagCharacterStringParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTag, error) {
+func BACnetContextTagCharacterStringParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTagCharacterString, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagCharacterString"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -165,7 +165,7 @@ func BACnetContextTagCharacterStringParse(readBuffer utils.ReadBuffer, tagNumber
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagCharacterString) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDate.go
index 79d9e2c..bc3841c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDate.go
@@ -130,7 +130,7 @@ func (m *BACnetContextTagDate) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagDateParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool) (*BACnetContextTag, error) {
+func BACnetContextTagDateParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool) (*BACnetContextTagDate, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagDate"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -165,7 +165,7 @@ func BACnetContextTagDateParse(readBuffer utils.ReadBuffer, tagNumberArgument ui
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagDate) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDeviceState.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDeviceState.go
index 3a7cd01..6b9bc67 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDeviceState.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDeviceState.go
@@ -130,7 +130,7 @@ func (m *BACnetContextTagDeviceState) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagDeviceStateParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool) (*BACnetContextTag, error) {
+func BACnetContextTagDeviceStateParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool) (*BACnetContextTagDeviceState, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagDeviceState"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -165,7 +165,7 @@ func BACnetContextTagDeviceStateParse(readBuffer utils.ReadBuffer, tagNumberArgu
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagDeviceState) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDouble.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDouble.go
index ef0de2e..6a27e0f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDouble.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDouble.go
@@ -146,7 +146,7 @@ func (m *BACnetContextTagDouble) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagDoubleParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool) (*BACnetContextTag, error) {
+func BACnetContextTagDoubleParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool) (*BACnetContextTagDouble, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagDouble"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -186,7 +186,7 @@ func BACnetContextTagDoubleParse(readBuffer utils.ReadBuffer, tagNumberArgument
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagDouble) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEmpty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEmpty.go
index 6eb78c8..a8366eb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEmpty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEmpty.go
@@ -108,7 +108,7 @@ func (m *BACnetContextTagEmpty) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagEmptyParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType) (*BACnetContextTag, error) {
+func BACnetContextTagEmptyParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType) (*BACnetContextTagEmpty, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagEmpty"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -124,7 +124,7 @@ func BACnetContextTagEmptyParse(readBuffer utils.ReadBuffer, tagNumberArgument u
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagEmpty) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go
index ed2d71c..01d8132 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go
@@ -146,7 +146,7 @@ func (m *BACnetContextTagEnumerated) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagEnumeratedParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTag, error) {
+func BACnetContextTagEnumeratedParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTagEnumerated, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagEnumerated"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -186,7 +186,7 @@ func BACnetContextTagEnumeratedParse(readBuffer utils.ReadBuffer, tagNumberArgum
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagEnumerated) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventState.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventState.go
index 8006fd5..296d779 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventState.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventState.go
@@ -158,7 +158,7 @@ func (m *BACnetContextTagEventState) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagEventStateParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, actualLength uint32) (*BACnetContextTag, error) {
+func BACnetContextTagEventStateParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, actualLength uint32) (*BACnetContextTagEventState, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagEventState"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -198,7 +198,7 @@ func BACnetContextTagEventStateParse(readBuffer utils.ReadBuffer, tagNumberArgum
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagEventState) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventType.go
index d795d9a..e4b107b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventType.go
@@ -158,7 +158,7 @@ func (m *BACnetContextTagEventType) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagEventTypeParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, actualLength uint32) (*BACnetContextTag, error) {
+func BACnetContextTagEventTypeParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, actualLength uint32) (*BACnetContextTagEventType, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagEventType"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -198,7 +198,7 @@ func BACnetContextTagEventTypeParse(readBuffer utils.ReadBuffer, tagNumberArgume
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagEventType) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagNotifyType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagNotifyType.go
index bcd37e0..4a36f57 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagNotifyType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagNotifyType.go
@@ -131,7 +131,7 @@ func (m *BACnetContextTagNotifyType) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagNotifyTypeParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, actualLength uint32) (*BACnetContextTag, error) {
+func BACnetContextTagNotifyTypeParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, actualLength uint32) (*BACnetContextTagNotifyType, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagNotifyType"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -166,7 +166,7 @@ func BACnetContextTagNotifyTypeParse(readBuffer utils.ReadBuffer, tagNumberArgum
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagNotifyType) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagObjectIdentifier.go
index baf5bff..c441145 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagObjectIdentifier.go
@@ -154,7 +154,7 @@ func (m *BACnetContextTagObjectIdentifier) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagObjectIdentifierParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool) (*BACnetContextTag, error) {
+func BACnetContextTagObjectIdentifierParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool) (*BACnetContextTagObjectIdentifier, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagObjectIdentifier"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -199,7 +199,7 @@ func BACnetContextTagObjectIdentifierParse(readBuffer utils.ReadBuffer, tagNumbe
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagObjectIdentifier) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagOctetString.go
index 3c77ba1..613d3ff 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagOctetString.go
@@ -130,7 +130,7 @@ func (m *BACnetContextTagOctetString) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagOctetStringParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTag, error) {
+func BACnetContextTagOctetStringParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTagOctetString, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagOctetString"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -165,7 +165,7 @@ func BACnetContextTagOctetStringParse(readBuffer utils.ReadBuffer, tagNumberArgu
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagOctetString) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagPropertyIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagPropertyIdentifier.go
index 2ac13f8..f055386 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagPropertyIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagPropertyIdentifier.go
@@ -158,7 +158,7 @@ func (m *BACnetContextTagPropertyIdentifier) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagPropertyIdentifierParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, actualLength uint32) (*BACnetContextTag, error) {
+func BACnetContextTagPropertyIdentifierParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, actualLength uint32) (*BACnetContextTagPropertyIdentifier, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagPropertyIdentifier"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -198,7 +198,7 @@ func BACnetContextTagPropertyIdentifierParse(readBuffer utils.ReadBuffer, tagNum
 		BACnetContextTag:   &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagPropertyIdentifier) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagReal.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagReal.go
index 997367b..faa1433 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagReal.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagReal.go
@@ -146,7 +146,7 @@ func (m *BACnetContextTagReal) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagRealParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool) (*BACnetContextTag, error) {
+func BACnetContextTagRealParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool) (*BACnetContextTagReal, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagReal"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -186,7 +186,7 @@ func BACnetContextTagRealParse(readBuffer utils.ReadBuffer, tagNumberArgument ui
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagReal) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagSignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagSignedInteger.go
index 80a26c2..68ed216 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagSignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagSignedInteger.go
@@ -146,7 +146,7 @@ func (m *BACnetContextTagSignedInteger) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagSignedIntegerParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTag, error) {
+func BACnetContextTagSignedIntegerParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTagSignedInteger, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagSignedInteger"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -186,7 +186,7 @@ func BACnetContextTagSignedIntegerParse(readBuffer utils.ReadBuffer, tagNumberAr
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagSignedInteger) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagTime.go
index 6e1a68c..f75525d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagTime.go
@@ -130,7 +130,7 @@ func (m *BACnetContextTagTime) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagTimeParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool) (*BACnetContextTag, error) {
+func BACnetContextTagTimeParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool) (*BACnetContextTagTime, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagTime"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -165,7 +165,7 @@ func BACnetContextTagTimeParse(readBuffer utils.ReadBuffer, tagNumberArgument ui
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagTime) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagUnsignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagUnsignedInteger.go
index 90395d8..0a630b2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagUnsignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagUnsignedInteger.go
@@ -146,7 +146,7 @@ func (m *BACnetContextTagUnsignedInteger) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetContextTagUnsignedIntegerParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTag, error) {
+func BACnetContextTagUnsignedIntegerParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, isNotOpeningOrClosingTag bool, header *BACnetTagHeader) (*BACnetContextTagUnsignedInteger, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagUnsignedInteger"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -186,7 +186,7 @@ func BACnetContextTagUnsignedIntegerParse(readBuffer utils.ReadBuffer, tagNumber
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetContextTagUnsignedInteger) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
index 6e9c870..41e3983 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
@@ -139,51 +139,55 @@ func BACnetErrorParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetError
+	type BACnetErrorChild interface {
+		InitializeParent(*BACnetError, *BACnetApplicationTagEnumerated, *BACnetApplicationTagEnumerated)
+		GetParent() *BACnetError
+	}
+	var _child BACnetErrorChild
 	var typeSwitchError error
 	switch {
 	case serviceChoice == 0x00: // BACnetErrorAcknowledgeAlarm
-		_parent, typeSwitchError = BACnetErrorAcknowledgeAlarmParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorAcknowledgeAlarmParse(readBuffer)
 	case serviceChoice == 0x03: // BACnetErrorGetAlarmSummary
-		_parent, typeSwitchError = BACnetErrorGetAlarmSummaryParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorGetAlarmSummaryParse(readBuffer)
 	case serviceChoice == 0x02: // BACnetErrorConfirmedEventNotification
-		_parent, typeSwitchError = BACnetErrorConfirmedEventNotificationParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorConfirmedEventNotificationParse(readBuffer)
 	case serviceChoice == 0x04: // BACnetErrorGetEnrollmentSummary
-		_parent, typeSwitchError = BACnetErrorGetEnrollmentSummaryParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorGetEnrollmentSummaryParse(readBuffer)
 	case serviceChoice == 0x05: // BACnetErrorDeviceCommunicationProtocol
-		_parent, typeSwitchError = BACnetErrorDeviceCommunicationProtocolParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorDeviceCommunicationProtocolParse(readBuffer)
 	case serviceChoice == 0x1D: // BACnetErrorGetEventInformation
-		_parent, typeSwitchError = BACnetErrorGetEventInformationParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorGetEventInformationParse(readBuffer)
 	case serviceChoice == 0x06: // BACnetErrorAtomicReadFile
-		_parent, typeSwitchError = BACnetErrorAtomicReadFileParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorAtomicReadFileParse(readBuffer)
 	case serviceChoice == 0x07: // BACnetErrorAtomicWriteFile
-		_parent, typeSwitchError = BACnetErrorAtomicWriteFileParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorAtomicWriteFileParse(readBuffer)
 	case serviceChoice == 0x0A: // BACnetErrorCreateObject
-		_parent, typeSwitchError = BACnetErrorCreateObjectParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorCreateObjectParse(readBuffer)
 	case serviceChoice == 0x0C: // BACnetErrorReadProperty
-		_parent, typeSwitchError = BACnetErrorReadPropertyParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorReadPropertyParse(readBuffer)
 	case serviceChoice == 0x0E: // BACnetErrorReadPropertyMultiple
-		_parent, typeSwitchError = BACnetErrorReadPropertyMultipleParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorReadPropertyMultipleParse(readBuffer)
 	case serviceChoice == 0x0F: // BACnetErrorWriteProperty
-		_parent, typeSwitchError = BACnetErrorWritePropertyParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorWritePropertyParse(readBuffer)
 	case serviceChoice == 0x1A: // BACnetErrorReadRange
-		_parent, typeSwitchError = BACnetErrorReadRangeParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorReadRangeParse(readBuffer)
 	case serviceChoice == 0x11: // BACnetErrorDeviceCommunicationProtocol
-		_parent, typeSwitchError = BACnetErrorDeviceCommunicationProtocolParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorDeviceCommunicationProtocolParse(readBuffer)
 	case serviceChoice == 0x12: // BACnetErrorConfirmedPrivateTransfer
-		_parent, typeSwitchError = BACnetErrorConfirmedPrivateTransferParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorConfirmedPrivateTransferParse(readBuffer)
 	case serviceChoice == 0x14: // BACnetErrorPasswordFailure
-		_parent, typeSwitchError = BACnetErrorPasswordFailureParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorPasswordFailureParse(readBuffer)
 	case serviceChoice == 0x15: // BACnetErrorVTOpen
-		_parent, typeSwitchError = BACnetErrorVTOpenParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorVTOpenParse(readBuffer)
 	case serviceChoice == 0x17: // BACnetErrorVTData
-		_parent, typeSwitchError = BACnetErrorVTDataParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorVTDataParse(readBuffer)
 	case serviceChoice == 0x18: // BACnetErrorRemovedAuthenticate
-		_parent, typeSwitchError = BACnetErrorRemovedAuthenticateParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorRemovedAuthenticateParse(readBuffer)
 	case serviceChoice == 0x0D: // BACnetErrorRemovedReadPropertyConditional
-		_parent, typeSwitchError = BACnetErrorRemovedReadPropertyConditionalParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorRemovedReadPropertyConditionalParse(readBuffer)
 	case true: // BACnetErrorUnknown
-		_parent, typeSwitchError = BACnetErrorUnknownParse(readBuffer)
+		_child, typeSwitchError = BACnetErrorUnknownParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -223,8 +227,8 @@ func BACnetErrorParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, errorClass, errorCode)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), errorClass, errorCode)
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetError) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAcknowledgeAlarm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAcknowledgeAlarm.go
index fddd4fa..ef291b9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAcknowledgeAlarm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAcknowledgeAlarm.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorAcknowledgeAlarm) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorAcknowledgeAlarmParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorAcknowledgeAlarmParse(readBuffer utils.ReadBuffer) (*BACnetErrorAcknowledgeAlarm, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorAcknowledgeAlarm"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorAcknowledgeAlarmParse(readBuffer utils.ReadBuffer) (*BACnetError
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorAcknowledgeAlarm) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
index 64a26c7..18acd4c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorAtomicReadFile) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorAtomicReadFileParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorAtomicReadFileParse(readBuffer utils.ReadBuffer) (*BACnetErrorAtomicReadFile, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorAtomicReadFile"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorAtomicReadFileParse(readBuffer utils.ReadBuffer) (*BACnetError,
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorAtomicReadFile) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
index c6ad8b9..2502c22 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorAtomicWriteFile) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorAtomicWriteFileParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorAtomicWriteFileParse(readBuffer utils.ReadBuffer) (*BACnetErrorAtomicWriteFile, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorAtomicWriteFile"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorAtomicWriteFileParse(readBuffer utils.ReadBuffer) (*BACnetError,
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorAtomicWriteFile) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedEventNotification.go
index a664f97..b04557a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedEventNotification.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorConfirmedEventNotification) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorConfirmedEventNotificationParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorConfirmedEventNotificationParse(readBuffer utils.ReadBuffer) (*BACnetErrorConfirmedEventNotification, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorConfirmedEventNotification"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorConfirmedEventNotificationParse(readBuffer utils.ReadBuffer) (*B
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorConfirmedEventNotification) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
index cd9c186..71ab859 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorConfirmedPrivateTransfer) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer) (*BACnetErrorConfirmedPrivateTransfer, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorConfirmedPrivateTransfer"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer) (*BAC
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorConfirmedPrivateTransfer) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
index 8635552..0d2f259 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorCreateObject) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorCreateObjectParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorCreateObjectParse(readBuffer utils.ReadBuffer) (*BACnetErrorCreateObject, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorCreateObject"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorCreateObjectParse(readBuffer utils.ReadBuffer) (*BACnetError, er
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorCreateObject) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorDeviceCommunicationProtocol.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorDeviceCommunicationProtocol.go
index 4315ea4..05ee29e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorDeviceCommunicationProtocol.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorDeviceCommunicationProtocol.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorDeviceCommunicationProtocol) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorDeviceCommunicationProtocolParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorDeviceCommunicationProtocolParse(readBuffer utils.ReadBuffer) (*BACnetErrorDeviceCommunicationProtocol, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorDeviceCommunicationProtocol"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorDeviceCommunicationProtocolParse(readBuffer utils.ReadBuffer) (*
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorDeviceCommunicationProtocol) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
index cc44034..cc8c852 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorGetAlarmSummary) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorGetAlarmSummaryParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorGetAlarmSummaryParse(readBuffer utils.ReadBuffer) (*BACnetErrorGetAlarmSummary, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorGetAlarmSummary"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorGetAlarmSummaryParse(readBuffer utils.ReadBuffer) (*BACnetError,
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorGetAlarmSummary) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
index b7e96a7..fc9f996 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorGetEnrollmentSummary) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorGetEnrollmentSummaryParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorGetEnrollmentSummaryParse(readBuffer utils.ReadBuffer) (*BACnetErrorGetEnrollmentSummary, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorGetEnrollmentSummary"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorGetEnrollmentSummaryParse(readBuffer utils.ReadBuffer) (*BACnetE
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorGetEnrollmentSummary) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
index 8c85976..3d21eda 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorGetEventInformation) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorGetEventInformationParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorGetEventInformationParse(readBuffer utils.ReadBuffer) (*BACnetErrorGetEventInformation, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorGetEventInformation"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorGetEventInformationParse(readBuffer utils.ReadBuffer) (*BACnetEr
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorGetEventInformation) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorPasswordFailure.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorPasswordFailure.go
index 8be874b..bc365a3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorPasswordFailure.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorPasswordFailure.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorPasswordFailure) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorPasswordFailureParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorPasswordFailureParse(readBuffer utils.ReadBuffer) (*BACnetErrorPasswordFailure, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorPasswordFailure"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorPasswordFailureParse(readBuffer utils.ReadBuffer) (*BACnetError,
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorPasswordFailure) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
index ab91e09..de72c95 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorReadProperty) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorReadPropertyParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorReadPropertyParse(readBuffer utils.ReadBuffer) (*BACnetErrorReadProperty, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorReadProperty"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorReadPropertyParse(readBuffer utils.ReadBuffer) (*BACnetError, er
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorReadProperty) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
index 4e10387..c916fed 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorReadPropertyMultiple) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorReadPropertyMultipleParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorReadPropertyMultipleParse(readBuffer utils.ReadBuffer) (*BACnetErrorReadPropertyMultiple, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorReadPropertyMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorReadPropertyMultipleParse(readBuffer utils.ReadBuffer) (*BACnetE
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorReadPropertyMultiple) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
index 99f31e9..f5066ea 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorReadRange) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorReadRangeParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorReadRangeParse(readBuffer utils.ReadBuffer) (*BACnetErrorReadRange, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorReadRange"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorReadRangeParse(readBuffer utils.ReadBuffer) (*BACnetError, error
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorReadRange) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
index 07510e8..78859c0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorRemovedAuthenticate) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorRemovedAuthenticateParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorRemovedAuthenticateParse(readBuffer utils.ReadBuffer) (*BACnetErrorRemovedAuthenticate, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorRemovedAuthenticate"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorRemovedAuthenticateParse(readBuffer utils.ReadBuffer) (*BACnetEr
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorRemovedAuthenticate) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
index 4657a53..4cd97c2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorRemovedReadPropertyConditional) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorRemovedReadPropertyConditionalParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorRemovedReadPropertyConditionalParse(readBuffer utils.ReadBuffer) (*BACnetErrorRemovedReadPropertyConditional, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorRemovedReadPropertyConditional"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorRemovedReadPropertyConditionalParse(readBuffer utils.ReadBuffer)
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorRemovedReadPropertyConditional) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorUnknown.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorUnknown.go
index 69de872..fbbea0d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorUnknown.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorUnknown.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorUnknown) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorUnknownParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorUnknownParse(readBuffer utils.ReadBuffer) (*BACnetErrorUnknown, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorUnknown"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorUnknownParse(readBuffer utils.ReadBuffer) (*BACnetError, error)
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorUnknown) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
index 14893bd..597e2eb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorVTData) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorVTDataParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorVTDataParse(readBuffer utils.ReadBuffer) (*BACnetErrorVTData, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorVTData"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorVTDataParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorVTData) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
index c74e15a..ff2e12a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorVTOpen) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorVTOpenParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorVTOpenParse(readBuffer utils.ReadBuffer) (*BACnetErrorVTOpen, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorVTOpen"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorVTOpenParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorVTOpen) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorWriteProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorWriteProperty.go
index 5fe9432..2f00f41 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorWriteProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorWriteProperty.go
@@ -106,7 +106,7 @@ func (m *BACnetErrorWriteProperty) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetErrorWritePropertyParse(readBuffer utils.ReadBuffer) (*BACnetError, error) {
+func BACnetErrorWritePropertyParse(readBuffer utils.ReadBuffer) (*BACnetErrorWriteProperty, error) {
 	if pullErr := readBuffer.PullContext("BACnetErrorWriteProperty"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func BACnetErrorWritePropertyParse(readBuffer utils.ReadBuffer) (*BACnetError, e
 		BACnetError: &BACnetError{},
 	}
 	_child.BACnetError.Child = _child
-	return _child.BACnetError, nil
+	return _child, nil
 }
 
 func (m *BACnetErrorWriteProperty) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParameters.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParameters.go
index 205fc2f..adb5864 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParameters.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParameters.go
@@ -182,27 +182,31 @@ func BACnetNotificationParametersParse(readBuffer utils.ReadBuffer, tagNumber ui
 	_ = peekedTagNumber
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetNotificationParameters
+	type BACnetNotificationParametersChild interface {
+		InitializeParent(*BACnetNotificationParameters, *BACnetOpeningTag, *BACnetTagHeader, *BACnetClosingTag)
+		GetParent() *BACnetNotificationParameters
+	}
+	var _child BACnetNotificationParametersChild
 	var typeSwitchError error
 	switch {
 	case peekedTagNumber == uint8(0): // BACnetNotificationParametersChangeOfBitString
-		_parent, typeSwitchError = BACnetNotificationParametersChangeOfBitStringParse(readBuffer, tagNumber, objectType, peekedTagNumber)
+		_child, typeSwitchError = BACnetNotificationParametersChangeOfBitStringParse(readBuffer, tagNumber, objectType, peekedTagNumber)
 	case peekedTagNumber == uint8(1): // BACnetNotificationParametersChangeOfState
-		_parent, typeSwitchError = BACnetNotificationParametersChangeOfStateParse(readBuffer, tagNumber, objectType, peekedTagNumber)
+		_child, typeSwitchError = BACnetNotificationParametersChangeOfStateParse(readBuffer, tagNumber, objectType, peekedTagNumber)
 	case peekedTagNumber == uint8(2): // BACnetNotificationParametersChangeOfValue
-		_parent, typeSwitchError = BACnetNotificationParametersChangeOfValueParse(readBuffer, tagNumber, objectType, peekedTagNumber)
+		_child, typeSwitchError = BACnetNotificationParametersChangeOfValueParse(readBuffer, tagNumber, objectType, peekedTagNumber)
 	case peekedTagNumber == uint8(4): // BACnetNotificationParametersFloatingLimit
-		_parent, typeSwitchError = BACnetNotificationParametersFloatingLimitParse(readBuffer, tagNumber, objectType, peekedTagNumber)
+		_child, typeSwitchError = BACnetNotificationParametersFloatingLimitParse(readBuffer, tagNumber, objectType, peekedTagNumber)
 	case peekedTagNumber == uint8(5): // BACnetNotificationParametersOutOfRange
-		_parent, typeSwitchError = BACnetNotificationParametersOutOfRangeParse(readBuffer, tagNumber, objectType, peekedTagNumber)
+		_child, typeSwitchError = BACnetNotificationParametersOutOfRangeParse(readBuffer, tagNumber, objectType, peekedTagNumber)
 	case peekedTagNumber == uint8(6): // BACnetNotificationParametersComplexEventType
-		_parent, typeSwitchError = BACnetNotificationParametersComplexEventTypeParse(readBuffer, tagNumber, objectType, peekedTagNumber)
+		_child, typeSwitchError = BACnetNotificationParametersComplexEventTypeParse(readBuffer, tagNumber, objectType, peekedTagNumber)
 	case peekedTagNumber == uint8(9): // BACnetNotificationParametersExtended
-		_parent, typeSwitchError = BACnetNotificationParametersExtendedParse(readBuffer, tagNumber, objectType, peekedTagNumber)
+		_child, typeSwitchError = BACnetNotificationParametersExtendedParse(readBuffer, tagNumber, objectType, peekedTagNumber)
 	case peekedTagNumber == uint8(10): // BACnetNotificationParametersBufferReady
-		_parent, typeSwitchError = BACnetNotificationParametersBufferReadyParse(readBuffer, tagNumber, objectType, peekedTagNumber)
+		_child, typeSwitchError = BACnetNotificationParametersBufferReadyParse(readBuffer, tagNumber, objectType, peekedTagNumber)
 	case peekedTagNumber == uint8(11): // BACnetNotificationParametersUnsignedRange
-		_parent, typeSwitchError = BACnetNotificationParametersUnsignedRangeParse(readBuffer, tagNumber, objectType, peekedTagNumber)
+		_child, typeSwitchError = BACnetNotificationParametersUnsignedRangeParse(readBuffer, tagNumber, objectType, peekedTagNumber)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -229,8 +233,8 @@ func BACnetNotificationParametersParse(readBuffer utils.ReadBuffer, tagNumber ui
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, openingTag, peekedTagHeader, closingTag)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), openingTag, peekedTagHeader, closingTag)
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetNotificationParameters) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersBufferReady.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersBufferReady.go
index 40305fa..05aeac9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersBufferReady.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersBufferReady.go
@@ -172,7 +172,7 @@ func (m *BACnetNotificationParametersBufferReady) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetNotificationParametersBufferReadyParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParameters, error) {
+func BACnetNotificationParametersBufferReadyParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParametersBufferReady, error) {
 	if pullErr := readBuffer.PullContext("BACnetNotificationParametersBufferReady"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -258,7 +258,7 @@ func BACnetNotificationParametersBufferReadyParse(readBuffer utils.ReadBuffer, t
 		BACnetNotificationParameters: &BACnetNotificationParameters{},
 	}
 	_child.BACnetNotificationParameters.Child = _child
-	return _child.BACnetNotificationParameters, nil
+	return _child, nil
 }
 
 func (m *BACnetNotificationParametersBufferReady) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfBitString.go
index 3791c1a..599316d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfBitString.go
@@ -161,7 +161,7 @@ func (m *BACnetNotificationParametersChangeOfBitString) GetLengthInBytes() uint1
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetNotificationParametersChangeOfBitStringParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParameters, error) {
+func BACnetNotificationParametersChangeOfBitStringParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParametersChangeOfBitString, error) {
 	if pullErr := readBuffer.PullContext("BACnetNotificationParametersChangeOfBitString"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -233,7 +233,7 @@ func BACnetNotificationParametersChangeOfBitStringParse(readBuffer utils.ReadBuf
 		BACnetNotificationParameters: &BACnetNotificationParameters{},
 	}
 	_child.BACnetNotificationParameters.Child = _child
-	return _child.BACnetNotificationParameters, nil
+	return _child, nil
 }
 
 func (m *BACnetNotificationParametersChangeOfBitString) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfState.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfState.go
index 09734e1..a4bf5c5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfState.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfState.go
@@ -161,7 +161,7 @@ func (m *BACnetNotificationParametersChangeOfState) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetNotificationParametersChangeOfStateParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParameters, error) {
+func BACnetNotificationParametersChangeOfStateParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParametersChangeOfState, error) {
 	if pullErr := readBuffer.PullContext("BACnetNotificationParametersChangeOfState"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -233,7 +233,7 @@ func BACnetNotificationParametersChangeOfStateParse(readBuffer utils.ReadBuffer,
 		BACnetNotificationParameters: &BACnetNotificationParameters{},
 	}
 	_child.BACnetNotificationParameters.Child = _child
-	return _child.BACnetNotificationParameters, nil
+	return _child, nil
 }
 
 func (m *BACnetNotificationParametersChangeOfState) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValue.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValue.go
index 3494d37..7b9d060 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValue.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValue.go
@@ -161,7 +161,7 @@ func (m *BACnetNotificationParametersChangeOfValue) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetNotificationParametersChangeOfValueParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParameters, error) {
+func BACnetNotificationParametersChangeOfValueParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParametersChangeOfValue, error) {
 	if pullErr := readBuffer.PullContext("BACnetNotificationParametersChangeOfValue"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -233,7 +233,7 @@ func BACnetNotificationParametersChangeOfValueParse(readBuffer utils.ReadBuffer,
 		BACnetNotificationParameters: &BACnetNotificationParameters{},
 	}
 	_child.BACnetNotificationParameters.Child = _child
-	return _child.BACnetNotificationParameters, nil
+	return _child, nil
 }
 
 func (m *BACnetNotificationParametersChangeOfValue) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go
index 2e1e5f0..1e6e237 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go
@@ -181,13 +181,17 @@ func BACnetNotificationParametersChangeOfValueNewValueParse(readBuffer utils.Rea
 	_ = peekedTagNumber
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetNotificationParametersChangeOfValueNewValue
+	type BACnetNotificationParametersChangeOfValueNewValueChild interface {
+		InitializeParent(*BACnetNotificationParametersChangeOfValueNewValue, *BACnetOpeningTag, *BACnetTagHeader, *BACnetClosingTag)
+		GetParent() *BACnetNotificationParametersChangeOfValueNewValue
+	}
+	var _child BACnetNotificationParametersChangeOfValueNewValueChild
 	var typeSwitchError error
 	switch {
 	case peekedTagNumber == uint8(0): // BACnetNotificationParametersChangeOfValueNewValueChangedBits
-		_parent, typeSwitchError = BACnetNotificationParametersChangeOfValueNewValueChangedBitsParse(readBuffer, tagNumber, peekedTagNumber)
+		_child, typeSwitchError = BACnetNotificationParametersChangeOfValueNewValueChangedBitsParse(readBuffer, tagNumber, peekedTagNumber)
 	case peekedTagNumber == uint8(1): // BACnetNotificationParametersChangeOfValueNewValueChangedValue
-		_parent, typeSwitchError = BACnetNotificationParametersChangeOfValueNewValueChangedValueParse(readBuffer, tagNumber, peekedTagNumber)
+		_child, typeSwitchError = BACnetNotificationParametersChangeOfValueNewValueChangedValueParse(readBuffer, tagNumber, peekedTagNumber)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -214,8 +218,8 @@ func BACnetNotificationParametersChangeOfValueNewValueParse(readBuffer utils.Rea
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, openingTag, peekedTagHeader, closingTag)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), openingTag, peekedTagHeader, closingTag)
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetNotificationParametersChangeOfValueNewValue) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedBits.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedBits.go
index e790c91..cd2c2f8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedBits.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedBits.go
@@ -127,7 +127,7 @@ func (m *BACnetNotificationParametersChangeOfValueNewValueChangedBits) GetLength
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetNotificationParametersChangeOfValueNewValueChangedBitsParse(readBuffer utils.ReadBuffer, tagNumber uint8, peekedTagNumber uint8) (*BACnetNotificationParametersChangeOfValueNewValue, error) {
+func BACnetNotificationParametersChangeOfValueNewValueChangedBitsParse(readBuffer utils.ReadBuffer, tagNumber uint8, peekedTagNumber uint8) (*BACnetNotificationParametersChangeOfValueNewValueChangedBits, error) {
 	if pullErr := readBuffer.PullContext("BACnetNotificationParametersChangeOfValueNewValueChangedBits"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -157,7 +157,7 @@ func BACnetNotificationParametersChangeOfValueNewValueChangedBitsParse(readBuffe
 		BACnetNotificationParametersChangeOfValueNewValue: &BACnetNotificationParametersChangeOfValueNewValue{},
 	}
 	_child.BACnetNotificationParametersChangeOfValueNewValue.Child = _child
-	return _child.BACnetNotificationParametersChangeOfValueNewValue, nil
+	return _child, nil
 }
 
 func (m *BACnetNotificationParametersChangeOfValueNewValueChangedBits) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedValue.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedValue.go
index 81d501a..413e447 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedValue.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValueChangedValue.go
@@ -127,7 +127,7 @@ func (m *BACnetNotificationParametersChangeOfValueNewValueChangedValue) GetLengt
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetNotificationParametersChangeOfValueNewValueChangedValueParse(readBuffer utils.ReadBuffer, tagNumber uint8, peekedTagNumber uint8) (*BACnetNotificationParametersChangeOfValueNewValue, error) {
+func BACnetNotificationParametersChangeOfValueNewValueChangedValueParse(readBuffer utils.ReadBuffer, tagNumber uint8, peekedTagNumber uint8) (*BACnetNotificationParametersChangeOfValueNewValueChangedValue, error) {
 	if pullErr := readBuffer.PullContext("BACnetNotificationParametersChangeOfValueNewValueChangedValue"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -157,7 +157,7 @@ func BACnetNotificationParametersChangeOfValueNewValueChangedValueParse(readBuff
 		BACnetNotificationParametersChangeOfValueNewValue: &BACnetNotificationParametersChangeOfValueNewValue{},
 	}
 	_child.BACnetNotificationParametersChangeOfValueNewValue.Child = _child
-	return _child.BACnetNotificationParametersChangeOfValueNewValue, nil
+	return _child, nil
 }
 
 func (m *BACnetNotificationParametersChangeOfValueNewValueChangedValue) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersComplexEventType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersComplexEventType.go
index dede42e..fec74bf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersComplexEventType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersComplexEventType.go
@@ -128,7 +128,7 @@ func (m *BACnetNotificationParametersComplexEventType) GetLengthInBytes() uint16
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetNotificationParametersComplexEventTypeParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParameters, error) {
+func BACnetNotificationParametersComplexEventTypeParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParametersComplexEventType, error) {
 	if pullErr := readBuffer.PullContext("BACnetNotificationParametersComplexEventType"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -158,7 +158,7 @@ func BACnetNotificationParametersComplexEventTypeParse(readBuffer utils.ReadBuff
 		BACnetNotificationParameters: &BACnetNotificationParameters{},
 	}
 	_child.BACnetNotificationParameters.Child = _child
-	return _child.BACnetNotificationParameters, nil
+	return _child, nil
 }
 
 func (m *BACnetNotificationParametersComplexEventType) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersExtended.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersExtended.go
index e8f3ad2..4e28b32 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersExtended.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersExtended.go
@@ -172,7 +172,7 @@ func (m *BACnetNotificationParametersExtended) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetNotificationParametersExtendedParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParameters, error) {
+func BACnetNotificationParametersExtendedParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParametersExtended, error) {
 	if pullErr := readBuffer.PullContext("BACnetNotificationParametersExtended"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -258,7 +258,7 @@ func BACnetNotificationParametersExtendedParse(readBuffer utils.ReadBuffer, tagN
 		BACnetNotificationParameters: &BACnetNotificationParameters{},
 	}
 	_child.BACnetNotificationParameters.Child = _child
-	return _child.BACnetNotificationParameters, nil
+	return _child, nil
 }
 
 func (m *BACnetNotificationParametersExtended) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersFloatingLimit.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersFloatingLimit.go
index 3d24d21..b36b483 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersFloatingLimit.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersFloatingLimit.go
@@ -183,7 +183,7 @@ func (m *BACnetNotificationParametersFloatingLimit) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetNotificationParametersFloatingLimitParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParameters, error) {
+func BACnetNotificationParametersFloatingLimitParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParametersFloatingLimit, error) {
 	if pullErr := readBuffer.PullContext("BACnetNotificationParametersFloatingLimit"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -283,7 +283,7 @@ func BACnetNotificationParametersFloatingLimitParse(readBuffer utils.ReadBuffer,
 		BACnetNotificationParameters: &BACnetNotificationParameters{},
 	}
 	_child.BACnetNotificationParameters.Child = _child
-	return _child.BACnetNotificationParameters, nil
+	return _child, nil
 }
 
 func (m *BACnetNotificationParametersFloatingLimit) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersOutOfRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersOutOfRange.go
index 604046d..ec760f5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersOutOfRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersOutOfRange.go
@@ -183,7 +183,7 @@ func (m *BACnetNotificationParametersOutOfRange) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetNotificationParametersOutOfRangeParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParameters, error) {
+func BACnetNotificationParametersOutOfRangeParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParametersOutOfRange, error) {
 	if pullErr := readBuffer.PullContext("BACnetNotificationParametersOutOfRange"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -283,7 +283,7 @@ func BACnetNotificationParametersOutOfRangeParse(readBuffer utils.ReadBuffer, ta
 		BACnetNotificationParameters: &BACnetNotificationParameters{},
 	}
 	_child.BACnetNotificationParameters.Child = _child
-	return _child.BACnetNotificationParameters, nil
+	return _child, nil
 }
 
 func (m *BACnetNotificationParametersOutOfRange) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersUnsignedRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersUnsignedRange.go
index 686b9b0..48f234d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersUnsignedRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotificationParametersUnsignedRange.go
@@ -172,7 +172,7 @@ func (m *BACnetNotificationParametersUnsignedRange) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetNotificationParametersUnsignedRangeParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParameters, error) {
+func BACnetNotificationParametersUnsignedRangeParse(readBuffer utils.ReadBuffer, tagNumber uint8, objectType BACnetObjectType, peekedTagNumber uint8) (*BACnetNotificationParametersUnsignedRange, error) {
 	if pullErr := readBuffer.PullContext("BACnetNotificationParametersUnsignedRange"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -258,7 +258,7 @@ func BACnetNotificationParametersUnsignedRangeParse(readBuffer utils.ReadBuffer,
 		BACnetNotificationParameters: &BACnetNotificationParameters{},
 	}
 	_child.BACnetNotificationParameters.Child = _child
-	return _child.BACnetNotificationParameters, nil
+	return _child, nil
 }
 
 func (m *BACnetNotificationParametersUnsignedRange) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go
index 7e54710..b6122fb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go
@@ -109,7 +109,7 @@ func (m *BACnetOpeningTag) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetOpeningTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, actualLength uint32) (*BACnetContextTag, error) {
+func BACnetOpeningTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, actualLength uint32) (*BACnetOpeningTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetOpeningTag"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -130,7 +130,7 @@ func BACnetOpeningTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8,
 		BACnetContextTag: &BACnetContextTag{},
 	}
 	_child.BACnetContextTag.Child = _child
-	return _child.BACnetContextTag, nil
+	return _child, nil
 }
 
 func (m *BACnetOpeningTag) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStates.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStates.go
index a069a39..d82f25c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStates.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStates.go
@@ -181,15 +181,19 @@ func BACnetPropertyStatesParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*B
 	_ = peekedTagNumber
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetPropertyStates
+	type BACnetPropertyStatesChild interface {
+		InitializeParent(*BACnetPropertyStates, *BACnetOpeningTag, *BACnetTagHeader, *BACnetClosingTag)
+		GetParent() *BACnetPropertyStates
+	}
+	var _child BACnetPropertyStatesChild
 	var typeSwitchError error
 	switch {
 	case peekedTagNumber == uint8(0): // BACnetPropertyStatesBoolean
-		_parent, typeSwitchError = BACnetPropertyStatesBooleanParse(readBuffer, tagNumber, peekedTagNumber)
+		_child, typeSwitchError = BACnetPropertyStatesBooleanParse(readBuffer, tagNumber, peekedTagNumber)
 	case peekedTagNumber == uint8(1): // BACnetPropertyStatesBinaryValue
-		_parent, typeSwitchError = BACnetPropertyStatesBinaryValueParse(readBuffer, tagNumber, peekedTagNumber)
+		_child, typeSwitchError = BACnetPropertyStatesBinaryValueParse(readBuffer, tagNumber, peekedTagNumber)
 	case peekedTagNumber == uint8(16): // BACnetPropertyStatesAction
-		_parent, typeSwitchError = BACnetPropertyStatesActionParse(readBuffer, tagNumber, peekedTagNumber)
+		_child, typeSwitchError = BACnetPropertyStatesActionParse(readBuffer, tagNumber, peekedTagNumber)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -216,8 +220,8 @@ func BACnetPropertyStatesParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*B
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, openingTag, peekedTagHeader, closingTag)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), openingTag, peekedTagHeader, closingTag)
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetPropertyStates) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesAction.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesAction.go
index aa29447..8f034f7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesAction.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesAction.go
@@ -130,7 +130,7 @@ func (m *BACnetPropertyStatesAction) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetPropertyStatesActionParse(readBuffer utils.ReadBuffer, tagNumber uint8, peekedTagNumber uint8) (*BACnetPropertyStates, error) {
+func BACnetPropertyStatesActionParse(readBuffer utils.ReadBuffer, tagNumber uint8, peekedTagNumber uint8) (*BACnetPropertyStatesAction, error) {
 	if pullErr := readBuffer.PullContext("BACnetPropertyStatesAction"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -168,7 +168,7 @@ func BACnetPropertyStatesActionParse(readBuffer utils.ReadBuffer, tagNumber uint
 		BACnetPropertyStates: &BACnetPropertyStates{},
 	}
 	_child.BACnetPropertyStates.Child = _child
-	return _child.BACnetPropertyStates, nil
+	return _child, nil
 }
 
 func (m *BACnetPropertyStatesAction) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBinaryValue.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBinaryValue.go
index 01b14b6..721af7b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBinaryValue.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBinaryValue.go
@@ -130,7 +130,7 @@ func (m *BACnetPropertyStatesBinaryValue) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetPropertyStatesBinaryValueParse(readBuffer utils.ReadBuffer, tagNumber uint8, peekedTagNumber uint8) (*BACnetPropertyStates, error) {
+func BACnetPropertyStatesBinaryValueParse(readBuffer utils.ReadBuffer, tagNumber uint8, peekedTagNumber uint8) (*BACnetPropertyStatesBinaryValue, error) {
 	if pullErr := readBuffer.PullContext("BACnetPropertyStatesBinaryValue"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -168,7 +168,7 @@ func BACnetPropertyStatesBinaryValueParse(readBuffer utils.ReadBuffer, tagNumber
 		BACnetPropertyStates: &BACnetPropertyStates{},
 	}
 	_child.BACnetPropertyStates.Child = _child
-	return _child.BACnetPropertyStates, nil
+	return _child, nil
 }
 
 func (m *BACnetPropertyStatesBinaryValue) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBoolean.go
index 77ef396..a93eb4b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyStatesBoolean.go
@@ -130,7 +130,7 @@ func (m *BACnetPropertyStatesBoolean) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetPropertyStatesBooleanParse(readBuffer utils.ReadBuffer, tagNumber uint8, peekedTagNumber uint8) (*BACnetPropertyStates, error) {
+func BACnetPropertyStatesBooleanParse(readBuffer utils.ReadBuffer, tagNumber uint8, peekedTagNumber uint8) (*BACnetPropertyStatesBoolean, error) {
 	if pullErr := readBuffer.PullContext("BACnetPropertyStatesBoolean"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -168,7 +168,7 @@ func BACnetPropertyStatesBooleanParse(readBuffer utils.ReadBuffer, tagNumber uin
 		BACnetPropertyStates: &BACnetPropertyStates{},
 	}
 	_child.BACnetPropertyStates.Child = _child
-	return _child.BACnetPropertyStates, nil
+	return _child, nil
 }
 
 func (m *BACnetPropertyStatesBoolean) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
index 83b2cf6..281d113 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
@@ -110,37 +110,41 @@ func BACnetServiceAckParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, erro
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetServiceAck
+	type BACnetServiceAckChild interface {
+		InitializeParent(*BACnetServiceAck)
+		GetParent() *BACnetServiceAck
+	}
+	var _child BACnetServiceAckChild
 	var typeSwitchError error
 	switch {
 	case serviceChoice == 0x03: // BACnetServiceAckGetAlarmSummary
-		_parent, typeSwitchError = BACnetServiceAckGetAlarmSummaryParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckGetAlarmSummaryParse(readBuffer)
 	case serviceChoice == 0x04: // BACnetServiceAckGetEnrollmentSummary
-		_parent, typeSwitchError = BACnetServiceAckGetEnrollmentSummaryParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckGetEnrollmentSummaryParse(readBuffer)
 	case serviceChoice == 0x1D: // BACnetServiceAckGetEventInformation
-		_parent, typeSwitchError = BACnetServiceAckGetEventInformationParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckGetEventInformationParse(readBuffer)
 	case serviceChoice == 0x06: // BACnetServiceAckAtomicReadFile
-		_parent, typeSwitchError = BACnetServiceAckAtomicReadFileParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckAtomicReadFileParse(readBuffer)
 	case serviceChoice == 0x07: // BACnetServiceAckAtomicWriteFile
-		_parent, typeSwitchError = BACnetServiceAckAtomicWriteFileParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckAtomicWriteFileParse(readBuffer)
 	case serviceChoice == 0x0A: // BACnetServiceAckCreateObject
-		_parent, typeSwitchError = BACnetServiceAckCreateObjectParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckCreateObjectParse(readBuffer)
 	case serviceChoice == 0x0C: // BACnetServiceAckReadProperty
-		_parent, typeSwitchError = BACnetServiceAckReadPropertyParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckReadPropertyParse(readBuffer)
 	case serviceChoice == 0x0E: // BACnetServiceAckReadPropertyMultiple
-		_parent, typeSwitchError = BACnetServiceAckReadPropertyMultipleParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckReadPropertyMultipleParse(readBuffer)
 	case serviceChoice == 0x1A: // BACnetServiceAckReadRange
-		_parent, typeSwitchError = BACnetServiceAckReadRangeParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckReadRangeParse(readBuffer)
 	case serviceChoice == 0x12: // BACnetServiceAckConfirmedPrivateTransfer
-		_parent, typeSwitchError = BACnetServiceAckConfirmedPrivateTransferParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckConfirmedPrivateTransferParse(readBuffer)
 	case serviceChoice == 0x15: // BACnetServiceAckVTOpen
-		_parent, typeSwitchError = BACnetServiceAckVTOpenParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckVTOpenParse(readBuffer)
 	case serviceChoice == 0x17: // BACnetServiceAckVTData
-		_parent, typeSwitchError = BACnetServiceAckVTDataParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckVTDataParse(readBuffer)
 	case serviceChoice == 0x18: // BACnetServiceAckRemovedAuthenticate
-		_parent, typeSwitchError = BACnetServiceAckRemovedAuthenticateParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckRemovedAuthenticateParse(readBuffer)
 	case serviceChoice == 0x0D: // BACnetServiceAckRemovedReadPropertyConditional
-		_parent, typeSwitchError = BACnetServiceAckRemovedReadPropertyConditionalParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckRemovedReadPropertyConditionalParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -154,8 +158,8 @@ func BACnetServiceAckParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, erro
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetServiceAck) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
index 1241612..264def8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
@@ -135,7 +135,7 @@ func (m *BACnetServiceAckAtomicReadFile) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckAtomicReadFileParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckAtomicReadFileParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckAtomicReadFile, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckAtomicReadFile"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -179,7 +179,7 @@ func BACnetServiceAckAtomicReadFileParse(readBuffer utils.ReadBuffer) (*BACnetSe
 		BACnetServiceAck: &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckAtomicReadFile) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileRecord.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileRecord.go
index 7df443d..c95affc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileRecord.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileRecord.go
@@ -151,7 +151,7 @@ func (m *BACnetServiceAckAtomicReadFileRecord) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckAtomicReadFileRecordParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckAtomicReadFileStreamOrRecord, error) {
+func BACnetServiceAckAtomicReadFileRecordParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckAtomicReadFileRecord, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckAtomicReadFileRecord"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -215,7 +215,7 @@ func BACnetServiceAckAtomicReadFileRecordParse(readBuffer utils.ReadBuffer) (*BA
 		BACnetServiceAckAtomicReadFileStreamOrRecord: &BACnetServiceAckAtomicReadFileStreamOrRecord{},
 	}
 	_child.BACnetServiceAckAtomicReadFileStreamOrRecord.Child = _child
-	return _child.BACnetServiceAckAtomicReadFileStreamOrRecord, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckAtomicReadFileRecord) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStream.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStream.go
index 412075a..1fc0380 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStream.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStream.go
@@ -135,7 +135,7 @@ func (m *BACnetServiceAckAtomicReadFileStream) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckAtomicReadFileStreamParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckAtomicReadFileStreamOrRecord, error) {
+func BACnetServiceAckAtomicReadFileStreamParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckAtomicReadFileStream, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckAtomicReadFileStream"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -179,7 +179,7 @@ func BACnetServiceAckAtomicReadFileStreamParse(readBuffer utils.ReadBuffer) (*BA
 		BACnetServiceAckAtomicReadFileStreamOrRecord: &BACnetServiceAckAtomicReadFileStreamOrRecord{},
 	}
 	_child.BACnetServiceAckAtomicReadFileStreamOrRecord.Child = _child
-	return _child.BACnetServiceAckAtomicReadFileStreamOrRecord, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckAtomicReadFileStream) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go
index aeed489..7aa58f9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go
@@ -178,13 +178,17 @@ func BACnetServiceAckAtomicReadFileStreamOrRecordParse(readBuffer utils.ReadBuff
 	_ = peekedTagNumber
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetServiceAckAtomicReadFileStreamOrRecord
+	type BACnetServiceAckAtomicReadFileStreamOrRecordChild interface {
+		InitializeParent(*BACnetServiceAckAtomicReadFileStreamOrRecord, *BACnetTagHeader, *BACnetOpeningTag, *BACnetClosingTag)
+		GetParent() *BACnetServiceAckAtomicReadFileStreamOrRecord
+	}
+	var _child BACnetServiceAckAtomicReadFileStreamOrRecordChild
 	var typeSwitchError error
 	switch {
 	case peekedTagNumber == 0x0: // BACnetServiceAckAtomicReadFileStream
-		_parent, typeSwitchError = BACnetServiceAckAtomicReadFileStreamParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckAtomicReadFileStreamParse(readBuffer)
 	case peekedTagNumber == 0x1: // BACnetServiceAckAtomicReadFileRecord
-		_parent, typeSwitchError = BACnetServiceAckAtomicReadFileRecordParse(readBuffer)
+		_child, typeSwitchError = BACnetServiceAckAtomicReadFileRecordParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -211,8 +215,8 @@ func BACnetServiceAckAtomicReadFileStreamOrRecordParse(readBuffer utils.ReadBuff
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, peekedTagHeader, openingTag, closingTag)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), peekedTagHeader, openingTag, closingTag)
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetServiceAckAtomicReadFileStreamOrRecord) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
index 04ed4f0..56bd9e9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
@@ -124,7 +124,7 @@ func (m *BACnetServiceAckAtomicWriteFile) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckAtomicWriteFileParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckAtomicWriteFileParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckAtomicWriteFile, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckAtomicWriteFile"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -154,7 +154,7 @@ func BACnetServiceAckAtomicWriteFileParse(readBuffer utils.ReadBuffer) (*BACnetS
 		BACnetServiceAck:  &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckAtomicWriteFile) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
index b6b79cc..b63eed5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
@@ -103,7 +103,7 @@ func (m *BACnetServiceAckConfirmedPrivateTransfer) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckConfirmedPrivateTransfer, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckConfirmedPrivateTransfer"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetServiceAckConfirmedPrivateTransferParse(readBuffer utils.ReadBuffer)
 		BACnetServiceAck: &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckConfirmedPrivateTransfer) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
index 8f9f270..99610ea 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
@@ -103,7 +103,7 @@ func (m *BACnetServiceAckCreateObject) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckCreateObjectParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckCreateObjectParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckCreateObject, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckCreateObject"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetServiceAckCreateObjectParse(readBuffer utils.ReadBuffer) (*BACnetServ
 		BACnetServiceAck: &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckCreateObject) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
index 8a6cabd..de9cf35 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
@@ -103,7 +103,7 @@ func (m *BACnetServiceAckGetAlarmSummary) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckGetAlarmSummaryParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckGetAlarmSummaryParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckGetAlarmSummary, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckGetAlarmSummary"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetServiceAckGetAlarmSummaryParse(readBuffer utils.ReadBuffer) (*BACnetS
 		BACnetServiceAck: &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckGetAlarmSummary) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
index b167cb1..e6f45eb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
@@ -103,7 +103,7 @@ func (m *BACnetServiceAckGetEnrollmentSummary) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckGetEnrollmentSummaryParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckGetEnrollmentSummaryParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckGetEnrollmentSummary, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckGetEnrollmentSummary"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetServiceAckGetEnrollmentSummaryParse(readBuffer utils.ReadBuffer) (*BA
 		BACnetServiceAck: &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckGetEnrollmentSummary) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
index 95cca7a..c3d8364 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
@@ -103,7 +103,7 @@ func (m *BACnetServiceAckGetEventInformation) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckGetEventInformationParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckGetEventInformationParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckGetEventInformation, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckGetEventInformation"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetServiceAckGetEventInformationParse(readBuffer utils.ReadBuffer) (*BAC
 		BACnetServiceAck: &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckGetEventInformation) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
index 6c11ac7..49e1457 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
@@ -162,7 +162,7 @@ func (m *BACnetServiceAckReadProperty) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckReadPropertyParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckReadPropertyParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckReadProperty, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckReadProperty"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -250,7 +250,7 @@ func BACnetServiceAckReadPropertyParse(readBuffer utils.ReadBuffer) (*BACnetServ
 		BACnetServiceAck:   &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckReadProperty) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
index 529a7e4..45e6324 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
@@ -103,7 +103,7 @@ func (m *BACnetServiceAckReadPropertyMultiple) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckReadPropertyMultipleParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckReadPropertyMultipleParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckReadPropertyMultiple, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckReadPropertyMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetServiceAckReadPropertyMultipleParse(readBuffer utils.ReadBuffer) (*BA
 		BACnetServiceAck: &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckReadPropertyMultiple) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
index 9050f79..93a42c7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
@@ -103,7 +103,7 @@ func (m *BACnetServiceAckReadRange) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckReadRangeParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckReadRangeParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckReadRange, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckReadRange"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetServiceAckReadRangeParse(readBuffer utils.ReadBuffer) (*BACnetService
 		BACnetServiceAck: &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckReadRange) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
index 9b64304..987ac31 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
@@ -103,7 +103,7 @@ func (m *BACnetServiceAckRemovedAuthenticate) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckRemovedAuthenticateParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckRemovedAuthenticateParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckRemovedAuthenticate, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckRemovedAuthenticate"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetServiceAckRemovedAuthenticateParse(readBuffer utils.ReadBuffer) (*BAC
 		BACnetServiceAck: &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckRemovedAuthenticate) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
index 28e9039..1ce2993 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
@@ -103,7 +103,7 @@ func (m *BACnetServiceAckRemovedReadPropertyConditional) GetLengthInBytes() uint
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckRemovedReadPropertyConditionalParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckRemovedReadPropertyConditionalParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckRemovedReadPropertyConditional, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckRemovedReadPropertyConditional"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetServiceAckRemovedReadPropertyConditionalParse(readBuffer utils.ReadBu
 		BACnetServiceAck: &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckRemovedReadPropertyConditional) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
index 5680c1f..77546e8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
@@ -103,7 +103,7 @@ func (m *BACnetServiceAckVTData) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckVTDataParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckVTDataParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckVTData, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckVTData"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetServiceAckVTDataParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck
 		BACnetServiceAck: &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckVTData) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
index 01c187c..e0f8376 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
@@ -103,7 +103,7 @@ func (m *BACnetServiceAckVTOpen) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetServiceAckVTOpenParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck, error) {
+func BACnetServiceAckVTOpenParse(readBuffer utils.ReadBuffer) (*BACnetServiceAckVTOpen, error) {
 	if pullErr := readBuffer.PullContext("BACnetServiceAckVTOpen"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BACnetServiceAckVTOpenParse(readBuffer utils.ReadBuffer) (*BACnetServiceAck
 		BACnetServiceAck: &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
-	return _child.BACnetServiceAck, nil
+	return _child, nil
 }
 
 func (m *BACnetServiceAckVTOpen) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStamp.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStamp.go
index f5309cb..6e1650b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStamp.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStamp.go
@@ -181,15 +181,19 @@ func BACnetTimeStampParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnet
 	_ = peekedTagNumber
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetTimeStamp
+	type BACnetTimeStampChild interface {
+		InitializeParent(*BACnetTimeStamp, *BACnetOpeningTag, *BACnetTagHeader, *BACnetClosingTag)
+		GetParent() *BACnetTimeStamp
+	}
+	var _child BACnetTimeStampChild
 	var typeSwitchError error
 	switch {
 	case peekedTagNumber == uint8(0): // BACnetTimeStampTime
-		_parent, typeSwitchError = BACnetTimeStampTimeParse(readBuffer, tagNumber)
+		_child, typeSwitchError = BACnetTimeStampTimeParse(readBuffer, tagNumber)
 	case peekedTagNumber == uint8(1): // BACnetTimeStampSequence
-		_parent, typeSwitchError = BACnetTimeStampSequenceParse(readBuffer, tagNumber)
+		_child, typeSwitchError = BACnetTimeStampSequenceParse(readBuffer, tagNumber)
 	case peekedTagNumber == uint8(2): // BACnetTimeStampDateTime
-		_parent, typeSwitchError = BACnetTimeStampDateTimeParse(readBuffer, tagNumber)
+		_child, typeSwitchError = BACnetTimeStampDateTimeParse(readBuffer, tagNumber)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -216,8 +220,8 @@ func BACnetTimeStampParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnet
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, openingTag, peekedTagHeader, closingTag)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), openingTag, peekedTagHeader, closingTag)
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetTimeStamp) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampDateTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampDateTime.go
index 86c7235..6c74ea3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampDateTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampDateTime.go
@@ -127,7 +127,7 @@ func (m *BACnetTimeStampDateTime) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetTimeStampDateTimeParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetTimeStamp, error) {
+func BACnetTimeStampDateTimeParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetTimeStampDateTime, error) {
 	if pullErr := readBuffer.PullContext("BACnetTimeStampDateTime"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -157,7 +157,7 @@ func BACnetTimeStampDateTimeParse(readBuffer utils.ReadBuffer, tagNumber uint8)
 		BACnetTimeStamp: &BACnetTimeStamp{},
 	}
 	_child.BACnetTimeStamp.Child = _child
-	return _child.BACnetTimeStamp, nil
+	return _child, nil
 }
 
 func (m *BACnetTimeStampDateTime) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampSequence.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampSequence.go
index 46f168e..f6918fb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampSequence.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampSequence.go
@@ -127,7 +127,7 @@ func (m *BACnetTimeStampSequence) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetTimeStampSequenceParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetTimeStamp, error) {
+func BACnetTimeStampSequenceParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetTimeStampSequence, error) {
 	if pullErr := readBuffer.PullContext("BACnetTimeStampSequence"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -157,7 +157,7 @@ func BACnetTimeStampSequenceParse(readBuffer utils.ReadBuffer, tagNumber uint8)
 		BACnetTimeStamp: &BACnetTimeStamp{},
 	}
 	_child.BACnetTimeStamp.Child = _child
-	return _child.BACnetTimeStamp, nil
+	return _child, nil
 }
 
 func (m *BACnetTimeStampSequence) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampTime.go
index 9b475aa..6c787c2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTimeStampTime.go
@@ -127,7 +127,7 @@ func (m *BACnetTimeStampTime) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetTimeStampTimeParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetTimeStamp, error) {
+func BACnetTimeStampTimeParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetTimeStampTime, error) {
 	if pullErr := readBuffer.PullContext("BACnetTimeStampTime"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -157,7 +157,7 @@ func BACnetTimeStampTimeParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BA
 		BACnetTimeStamp: &BACnetTimeStamp{},
 	}
 	_child.BACnetTimeStamp.Child = _child
-	return _child.BACnetTimeStamp, nil
+	return _child, nil
 }
 
 func (m *BACnetTimeStampTime) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
index 1717549..5288b40 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
@@ -113,35 +113,39 @@ func BACnetUnconfirmedServiceRequestParse(readBuffer utils.ReadBuffer, len uint1
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BACnetUnconfirmedServiceRequest
+	type BACnetUnconfirmedServiceRequestChild interface {
+		InitializeParent(*BACnetUnconfirmedServiceRequest)
+		GetParent() *BACnetUnconfirmedServiceRequest
+	}
+	var _child BACnetUnconfirmedServiceRequestChild
 	var typeSwitchError error
 	switch {
 	case serviceChoice == 0x00: // BACnetUnconfirmedServiceRequestIAm
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestIAmParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestIAmParse(readBuffer, len)
 	case serviceChoice == 0x01: // BACnetUnconfirmedServiceRequestIHave
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestIHaveParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestIHaveParse(readBuffer, len)
 	case serviceChoice == 0x02: // BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationParse(readBuffer, len)
 	case serviceChoice == 0x03: // BACnetUnconfirmedServiceRequestUnconfirmedEventNotification
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedEventNotificationParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedEventNotificationParse(readBuffer, len)
 	case serviceChoice == 0x04: // BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransferParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransferParse(readBuffer, len)
 	case serviceChoice == 0x05: // BACnetUnconfirmedServiceRequestUnconfirmedTextMessage
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedTextMessageParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedTextMessageParse(readBuffer, len)
 	case serviceChoice == 0x06: // BACnetUnconfirmedServiceRequestTimeSynchronization
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestTimeSynchronizationParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestTimeSynchronizationParse(readBuffer, len)
 	case serviceChoice == 0x07: // BACnetUnconfirmedServiceRequestWhoHas
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer, len)
 	case serviceChoice == 0x08: // BACnetUnconfirmedServiceRequestWhoIs
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestWhoIsParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestWhoIsParse(readBuffer, len)
 	case serviceChoice == 0x09: // BACnetUnconfirmedServiceRequestUTCTimeSynchronization
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUTCTimeSynchronizationParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestUTCTimeSynchronizationParse(readBuffer, len)
 	case serviceChoice == 0x0A: // BACnetUnconfirmedServiceRequestWriteGroup
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestWriteGroupParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestWriteGroupParse(readBuffer, len)
 	case serviceChoice == 0x0B: // BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultipleParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultipleParse(readBuffer, len)
 	case true: // BACnetUnconfirmedServiceRequestUnconfirmedUnknown
-		_parent, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedUnknownParse(readBuffer, len)
+		_child, typeSwitchError = BACnetUnconfirmedServiceRequestUnconfirmedUnknownParse(readBuffer, len)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -155,8 +159,8 @@ func BACnetUnconfirmedServiceRequestParse(readBuffer utils.ReadBuffer, len uint1
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *BACnetUnconfirmedServiceRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
index 9478a44..48e0542 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
@@ -161,7 +161,7 @@ func (m *BACnetUnconfirmedServiceRequestIAm) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestIAmParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestIAmParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestIAm, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestIAm"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -233,7 +233,7 @@ func BACnetUnconfirmedServiceRequestIAmParse(readBuffer utils.ReadBuffer, len ui
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestIAm) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
index 8be1db8..3efe0f8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
@@ -150,7 +150,7 @@ func (m *BACnetUnconfirmedServiceRequestIHave) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestIHaveParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestIHaveParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestIHave, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestIHave"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -208,7 +208,7 @@ func BACnetUnconfirmedServiceRequestIHaveParse(readBuffer utils.ReadBuffer, len
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestIHave) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
index 08a43f3..d70be3a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
@@ -139,7 +139,7 @@ func (m *BACnetUnconfirmedServiceRequestTimeSynchronization) GetLengthInBytes()
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestTimeSynchronizationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestTimeSynchronizationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestTimeSynchronization, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestTimeSynchronization"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -183,7 +183,7 @@ func BACnetUnconfirmedServiceRequestTimeSynchronizationParse(readBuffer utils.Re
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestTimeSynchronization) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
index edbf4c6..0117fa1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
@@ -107,7 +107,7 @@ func (m *BACnetUnconfirmedServiceRequestUTCTimeSynchronization) GetLengthInBytes
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestUTCTimeSynchronizationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestUTCTimeSynchronizationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestUTCTimeSynchronization, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUTCTimeSynchronization"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetUnconfirmedServiceRequestUTCTimeSynchronizationParse(readBuffer utils
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestUTCTimeSynchronization) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
index 049cebf..33f7b02 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
@@ -172,7 +172,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) GetLengthInB
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -258,7 +258,7 @@ func BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationParse(readBuffer u
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
index 9591bbb..2723905 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
@@ -107,7 +107,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple) GetL
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultipleParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultipleParse(read
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
index 6a9660b..6eda319 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
@@ -107,7 +107,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedEventNotification) GetLengthI
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestUnconfirmedEventNotificationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestUnconfirmedEventNotificationParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestUnconfirmedEventNotification, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUnconfirmedEventNotification"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetUnconfirmedServiceRequestUnconfirmedEventNotificationParse(readBuffer
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedEventNotification) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
index 07a7bd4..f03f4a5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
@@ -153,7 +153,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer) GetLengthInB
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransferParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransferParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -219,7 +219,7 @@ func BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransferParse(readBuffer u
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
index 2256fd3..df9c409 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
@@ -107,7 +107,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedTextMessage) GetLengthInBytes
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestUnconfirmedTextMessageParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestUnconfirmedTextMessageParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestUnconfirmedTextMessage, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUnconfirmedTextMessage"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetUnconfirmedServiceRequestUnconfirmedTextMessageParse(readBuffer utils
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedTextMessage) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedUnknown.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedUnknown.go
index 43a574f..beff699 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedUnknown.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedUnknown.go
@@ -130,7 +130,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedUnknown) GetLengthInBytes() u
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestUnconfirmedUnknownParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestUnconfirmedUnknownParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestUnconfirmedUnknown, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestUnconfirmedUnknown"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -153,7 +153,7 @@ func BACnetUnconfirmedServiceRequestUnconfirmedUnknownParse(readBuffer utils.Rea
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedUnknown) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
index 58f75fa..024ecf5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
@@ -170,7 +170,7 @@ func (m *BACnetUnconfirmedServiceRequestWhoHas) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestWhoHas, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestWhoHas"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -274,7 +274,7 @@ func BACnetUnconfirmedServiceRequestWhoHasParse(readBuffer utils.ReadBuffer, len
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestWhoHas) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
index 0fa54bf..028217c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
@@ -144,7 +144,7 @@ func (m *BACnetUnconfirmedServiceRequestWhoIs) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestWhoIsParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestWhoIsParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestWhoIs, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestWhoIs"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -204,7 +204,7 @@ func BACnetUnconfirmedServiceRequestWhoIsParse(readBuffer utils.ReadBuffer, len
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestWhoIs) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
index cdaa590..bea8ba5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
@@ -107,7 +107,7 @@ func (m *BACnetUnconfirmedServiceRequestWriteGroup) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetUnconfirmedServiceRequestWriteGroupParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequest, error) {
+func BACnetUnconfirmedServiceRequestWriteGroupParse(readBuffer utils.ReadBuffer, len uint16) (*BACnetUnconfirmedServiceRequestWriteGroup, error) {
 	if pullErr := readBuffer.PullContext("BACnetUnconfirmedServiceRequestWriteGroup"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func BACnetUnconfirmedServiceRequestWriteGroupParse(readBuffer utils.ReadBuffer,
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
-	return _child.BACnetUnconfirmedServiceRequest, nil
+	return _child, nil
 }
 
 func (m *BACnetUnconfirmedServiceRequestWriteGroup) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
index 9429336..03a3c3c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
@@ -158,35 +158,39 @@ func BVLCParse(readBuffer utils.ReadBuffer) (*BVLC, error) {
 	_ = bvlcPayloadLength
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *BVLC
+	type BVLCChild interface {
+		InitializeParent(*BVLC)
+		GetParent() *BVLC
+	}
+	var _child BVLCChild
 	var typeSwitchError error
 	switch {
 	case bvlcFunction == 0x00: // BVLCResult
-		_parent, typeSwitchError = BVLCResultParse(readBuffer)
+		_child, typeSwitchError = BVLCResultParse(readBuffer)
 	case bvlcFunction == 0x01: // BVLCWriteBroadcastDistributionTable
-		_parent, typeSwitchError = BVLCWriteBroadcastDistributionTableParse(readBuffer, bvlcPayloadLength)
+		_child, typeSwitchError = BVLCWriteBroadcastDistributionTableParse(readBuffer, bvlcPayloadLength)
 	case bvlcFunction == 0x02: // BVLCReadBroadcastDistributionTable
-		_parent, typeSwitchError = BVLCReadBroadcastDistributionTableParse(readBuffer)
+		_child, typeSwitchError = BVLCReadBroadcastDistributionTableParse(readBuffer)
 	case bvlcFunction == 0x03: // BVLCReadBroadcastDistributionTableAck
-		_parent, typeSwitchError = BVLCReadBroadcastDistributionTableAckParse(readBuffer)
+		_child, typeSwitchError = BVLCReadBroadcastDistributionTableAckParse(readBuffer)
 	case bvlcFunction == 0x04: // BVLCForwardedNPDU
-		_parent, typeSwitchError = BVLCForwardedNPDUParse(readBuffer, bvlcPayloadLength)
+		_child, typeSwitchError = BVLCForwardedNPDUParse(readBuffer, bvlcPayloadLength)
 	case bvlcFunction == 0x05: // BVLCRegisterForeignDevice
-		_parent, typeSwitchError = BVLCRegisterForeignDeviceParse(readBuffer)
+		_child, typeSwitchError = BVLCRegisterForeignDeviceParse(readBuffer)
 	case bvlcFunction == 0x06: // BVLCReadForeignDeviceTable
-		_parent, typeSwitchError = BVLCReadForeignDeviceTableParse(readBuffer)
+		_child, typeSwitchError = BVLCReadForeignDeviceTableParse(readBuffer)
 	case bvlcFunction == 0x07: // BVLCReadForeignDeviceTableAck
-		_parent, typeSwitchError = BVLCReadForeignDeviceTableAckParse(readBuffer)
+		_child, typeSwitchError = BVLCReadForeignDeviceTableAckParse(readBuffer)
 	case bvlcFunction == 0x08: // BVLCDeleteForeignDeviceTableEntry
-		_parent, typeSwitchError = BVLCDeleteForeignDeviceTableEntryParse(readBuffer)
+		_child, typeSwitchError = BVLCDeleteForeignDeviceTableEntryParse(readBuffer)
 	case bvlcFunction == 0x09: // BVLCDistributeBroadcastToNetwork
-		_parent, typeSwitchError = BVLCDistributeBroadcastToNetworkParse(readBuffer, bvlcPayloadLength)
+		_child, typeSwitchError = BVLCDistributeBroadcastToNetworkParse(readBuffer, bvlcPayloadLength)
 	case bvlcFunction == 0x0A: // BVLCOriginalUnicastNPDU
-		_parent, typeSwitchError = BVLCOriginalUnicastNPDUParse(readBuffer, bvlcPayloadLength)
+		_child, typeSwitchError = BVLCOriginalUnicastNPDUParse(readBuffer, bvlcPayloadLength)
 	case bvlcFunction == 0x0B: // BVLCOriginalBroadcastNPDU
-		_parent, typeSwitchError = BVLCOriginalBroadcastNPDUParse(readBuffer, bvlcPayloadLength)
+		_child, typeSwitchError = BVLCOriginalBroadcastNPDUParse(readBuffer, bvlcPayloadLength)
 	case bvlcFunction == 0x0C: // BVLCSecureBVLL
-		_parent, typeSwitchError = BVLCSecureBVLLParse(readBuffer)
+		_child, typeSwitchError = BVLCSecureBVLLParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -200,8 +204,8 @@ func BVLCParse(readBuffer utils.ReadBuffer) (*BVLC, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *BVLC) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
index 074e3d2..47b3de8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
@@ -103,7 +103,7 @@ func (m *BVLCDeleteForeignDeviceTableEntry) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCDeleteForeignDeviceTableEntryParse(readBuffer utils.ReadBuffer) (*BVLC, error) {
+func BVLCDeleteForeignDeviceTableEntryParse(readBuffer utils.ReadBuffer) (*BVLCDeleteForeignDeviceTableEntry, error) {
 	if pullErr := readBuffer.PullContext("BVLCDeleteForeignDeviceTableEntry"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BVLCDeleteForeignDeviceTableEntryParse(readBuffer utils.ReadBuffer) (*BVLC,
 		BVLC: &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCDeleteForeignDeviceTableEntry) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
index 3de6359..461b962 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
@@ -127,7 +127,7 @@ func (m *BVLCDistributeBroadcastToNetwork) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCDistributeBroadcastToNetworkParse(readBuffer utils.ReadBuffer, bvlcPayloadLength uint16) (*BVLC, error) {
+func BVLCDistributeBroadcastToNetworkParse(readBuffer utils.ReadBuffer, bvlcPayloadLength uint16) (*BVLCDistributeBroadcastToNetwork, error) {
 	if pullErr := readBuffer.PullContext("BVLCDistributeBroadcastToNetwork"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -157,7 +157,7 @@ func BVLCDistributeBroadcastToNetworkParse(readBuffer utils.ReadBuffer, bvlcPayl
 		BVLC: &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCDistributeBroadcastToNetwork) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
index 2147f46..4dce91b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
@@ -151,7 +151,7 @@ func (m *BVLCForwardedNPDU) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCForwardedNPDUParse(readBuffer utils.ReadBuffer, bvlcPayloadLength uint16) (*BVLC, error) {
+func BVLCForwardedNPDUParse(readBuffer utils.ReadBuffer, bvlcPayloadLength uint16) (*BVLCForwardedNPDU, error) {
 	if pullErr := readBuffer.PullContext("BVLCForwardedNPDU"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -209,7 +209,7 @@ func BVLCForwardedNPDUParse(readBuffer utils.ReadBuffer, bvlcPayloadLength uint1
 		BVLC: &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCForwardedNPDU) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
index c985e94..d1c3b7d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
@@ -127,7 +127,7 @@ func (m *BVLCOriginalBroadcastNPDU) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCOriginalBroadcastNPDUParse(readBuffer utils.ReadBuffer, bvlcPayloadLength uint16) (*BVLC, error) {
+func BVLCOriginalBroadcastNPDUParse(readBuffer utils.ReadBuffer, bvlcPayloadLength uint16) (*BVLCOriginalBroadcastNPDU, error) {
 	if pullErr := readBuffer.PullContext("BVLCOriginalBroadcastNPDU"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -157,7 +157,7 @@ func BVLCOriginalBroadcastNPDUParse(readBuffer utils.ReadBuffer, bvlcPayloadLeng
 		BVLC: &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCOriginalBroadcastNPDU) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
index ac31ec5..f2624d6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
@@ -127,7 +127,7 @@ func (m *BVLCOriginalUnicastNPDU) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCOriginalUnicastNPDUParse(readBuffer utils.ReadBuffer, bvlcPayloadLength uint16) (*BVLC, error) {
+func BVLCOriginalUnicastNPDUParse(readBuffer utils.ReadBuffer, bvlcPayloadLength uint16) (*BVLCOriginalUnicastNPDU, error) {
 	if pullErr := readBuffer.PullContext("BVLCOriginalUnicastNPDU"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -157,7 +157,7 @@ func BVLCOriginalUnicastNPDUParse(readBuffer utils.ReadBuffer, bvlcPayloadLength
 		BVLC: &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCOriginalUnicastNPDU) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
index a5d6cb1..9d7143c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
@@ -103,7 +103,7 @@ func (m *BVLCReadBroadcastDistributionTable) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCReadBroadcastDistributionTableParse(readBuffer utils.ReadBuffer) (*BVLC, error) {
+func BVLCReadBroadcastDistributionTableParse(readBuffer utils.ReadBuffer) (*BVLCReadBroadcastDistributionTable, error) {
 	if pullErr := readBuffer.PullContext("BVLCReadBroadcastDistributionTable"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BVLCReadBroadcastDistributionTableParse(readBuffer utils.ReadBuffer) (*BVLC
 		BVLC: &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCReadBroadcastDistributionTable) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
index cf2ea64..fbd6162 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
@@ -103,7 +103,7 @@ func (m *BVLCReadBroadcastDistributionTableAck) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCReadBroadcastDistributionTableAckParse(readBuffer utils.ReadBuffer) (*BVLC, error) {
+func BVLCReadBroadcastDistributionTableAckParse(readBuffer utils.ReadBuffer) (*BVLCReadBroadcastDistributionTableAck, error) {
 	if pullErr := readBuffer.PullContext("BVLCReadBroadcastDistributionTableAck"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BVLCReadBroadcastDistributionTableAckParse(readBuffer utils.ReadBuffer) (*B
 		BVLC: &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCReadBroadcastDistributionTableAck) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
index f7b207c..db52193 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
@@ -103,7 +103,7 @@ func (m *BVLCReadForeignDeviceTable) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCReadForeignDeviceTableParse(readBuffer utils.ReadBuffer) (*BVLC, error) {
+func BVLCReadForeignDeviceTableParse(readBuffer utils.ReadBuffer) (*BVLCReadForeignDeviceTable, error) {
 	if pullErr := readBuffer.PullContext("BVLCReadForeignDeviceTable"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BVLCReadForeignDeviceTableParse(readBuffer utils.ReadBuffer) (*BVLC, error)
 		BVLC: &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCReadForeignDeviceTable) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
index 4d332f5..c7a8d8c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
@@ -103,7 +103,7 @@ func (m *BVLCReadForeignDeviceTableAck) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCReadForeignDeviceTableAckParse(readBuffer utils.ReadBuffer) (*BVLC, error) {
+func BVLCReadForeignDeviceTableAckParse(readBuffer utils.ReadBuffer) (*BVLCReadForeignDeviceTableAck, error) {
 	if pullErr := readBuffer.PullContext("BVLCReadForeignDeviceTableAck"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BVLCReadForeignDeviceTableAckParse(readBuffer utils.ReadBuffer) (*BVLC, err
 		BVLC: &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCReadForeignDeviceTableAck) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
index 394c18e..2bbdad7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
@@ -124,7 +124,7 @@ func (m *BVLCRegisterForeignDevice) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCRegisterForeignDeviceParse(readBuffer utils.ReadBuffer) (*BVLC, error) {
+func BVLCRegisterForeignDeviceParse(readBuffer utils.ReadBuffer) (*BVLCRegisterForeignDevice, error) {
 	if pullErr := readBuffer.PullContext("BVLCRegisterForeignDevice"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -148,7 +148,7 @@ func BVLCRegisterForeignDeviceParse(readBuffer utils.ReadBuffer) (*BVLC, error)
 		BVLC: &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCRegisterForeignDevice) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
index 25dd761..e0c6fa2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
@@ -124,7 +124,7 @@ func (m *BVLCResult) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCResultParse(readBuffer utils.ReadBuffer) (*BVLC, error) {
+func BVLCResultParse(readBuffer utils.ReadBuffer) (*BVLCResult, error) {
 	if pullErr := readBuffer.PullContext("BVLCResult"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -154,7 +154,7 @@ func BVLCResultParse(readBuffer utils.ReadBuffer) (*BVLC, error) {
 		BVLC: &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCResult) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
index de593af..554dd7e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
@@ -103,7 +103,7 @@ func (m *BVLCSecureBVLL) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCSecureBVLLParse(readBuffer utils.ReadBuffer) (*BVLC, error) {
+func BVLCSecureBVLLParse(readBuffer utils.ReadBuffer) (*BVLCSecureBVLL, error) {
 	if pullErr := readBuffer.PullContext("BVLCSecureBVLL"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func BVLCSecureBVLLParse(readBuffer utils.ReadBuffer) (*BVLC, error) {
 		BVLC: &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCSecureBVLL) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWriteBroadcastDistributionTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWriteBroadcastDistributionTable.go
index 8f574ea..c7b4e85 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWriteBroadcastDistributionTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWriteBroadcastDistributionTable.go
@@ -131,7 +131,7 @@ func (m *BVLCWriteBroadcastDistributionTable) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BVLCWriteBroadcastDistributionTableParse(readBuffer utils.ReadBuffer, bvlcPayloadLength uint16) (*BVLC, error) {
+func BVLCWriteBroadcastDistributionTableParse(readBuffer utils.ReadBuffer, bvlcPayloadLength uint16) (*BVLCWriteBroadcastDistributionTable, error) {
 	if pullErr := readBuffer.PullContext("BVLCWriteBroadcastDistributionTable"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -169,7 +169,7 @@ func BVLCWriteBroadcastDistributionTableParse(readBuffer utils.ReadBuffer, bvlcP
 		BVLC:  &BVLC{},
 	}
 	_child.BVLC.Child = _child
-	return _child.BVLC, nil
+	return _child, nil
 }
 
 func (m *BVLCWriteBroadcastDistributionTable) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
index 55a1a79..e977127 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
@@ -144,29 +144,33 @@ func NLMParse(readBuffer utils.ReadBuffer, apduLength uint16) (*NLM, error) {
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *NLM
+	type NLMChild interface {
+		InitializeParent(*NLM, *uint16)
+		GetParent() *NLM
+	}
+	var _child NLMChild
 	var typeSwitchError error
 	switch {
 	case messageType == 0x00: // NLMWhoIsRouterToNetwork
-		_parent, typeSwitchError = NLMWhoIsRouterToNetworkParse(readBuffer, apduLength, messageType)
+		_child, typeSwitchError = NLMWhoIsRouterToNetworkParse(readBuffer, apduLength, messageType)
 	case messageType == 0x01: // NLMIAmRouterToNetwork
-		_parent, typeSwitchError = NLMIAmRouterToNetworkParse(readBuffer, apduLength, messageType)
+		_child, typeSwitchError = NLMIAmRouterToNetworkParse(readBuffer, apduLength, messageType)
 	case messageType == 0x02: // NLMICouldBeRouterToNetwork
-		_parent, typeSwitchError = NLMICouldBeRouterToNetworkParse(readBuffer, apduLength, messageType)
+		_child, typeSwitchError = NLMICouldBeRouterToNetworkParse(readBuffer, apduLength, messageType)
 	case messageType == 0x03: // NLMRejectRouterToNetwork
-		_parent, typeSwitchError = NLMRejectRouterToNetworkParse(readBuffer, apduLength, messageType)
+		_child, typeSwitchError = NLMRejectRouterToNetworkParse(readBuffer, apduLength, messageType)
 	case messageType == 0x04: // NLMRouterBusyToNetwork
-		_parent, typeSwitchError = NLMRouterBusyToNetworkParse(readBuffer, apduLength, messageType)
+		_child, typeSwitchError = NLMRouterBusyToNetworkParse(readBuffer, apduLength, messageType)
 	case messageType == 0x05: // NLMRouterAvailableToNetwork
-		_parent, typeSwitchError = NLMRouterAvailableToNetworkParse(readBuffer, apduLength, messageType)
+		_child, typeSwitchError = NLMRouterAvailableToNetworkParse(readBuffer, apduLength, messageType)
 	case messageType == 0x06: // NLMInitalizeRoutingTable
-		_parent, typeSwitchError = NLMInitalizeRoutingTableParse(readBuffer, apduLength, messageType)
+		_child, typeSwitchError = NLMInitalizeRoutingTableParse(readBuffer, apduLength, messageType)
 	case messageType == 0x07: // NLMInitalizeRoutingTableAck
-		_parent, typeSwitchError = NLMInitalizeRoutingTableAckParse(readBuffer, apduLength, messageType)
+		_child, typeSwitchError = NLMInitalizeRoutingTableAckParse(readBuffer, apduLength, messageType)
 	case messageType == 0x08: // NLMEstablishConnectionToNetwork
-		_parent, typeSwitchError = NLMEstablishConnectionToNetworkParse(readBuffer, apduLength, messageType)
+		_child, typeSwitchError = NLMEstablishConnectionToNetworkParse(readBuffer, apduLength, messageType)
 	case messageType == 0x09: // NLMDisconnectConnectionToNetwork
-		_parent, typeSwitchError = NLMDisconnectConnectionToNetworkParse(readBuffer, apduLength, messageType)
+		_child, typeSwitchError = NLMDisconnectConnectionToNetworkParse(readBuffer, apduLength, messageType)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -180,8 +184,8 @@ func NLMParse(readBuffer utils.ReadBuffer, apduLength uint16) (*NLM, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, vendorId)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), vendorId)
+	return _child.GetParent(), nil
 }
 
 func (m *NLM) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMDisconnectConnectionToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMDisconnectConnectionToNetwork.go
index 771c9d0..93961a4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMDisconnectConnectionToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMDisconnectConnectionToNetwork.go
@@ -129,7 +129,7 @@ func (m *NLMDisconnectConnectionToNetwork) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NLMDisconnectConnectionToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLM, error) {
+func NLMDisconnectConnectionToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLMDisconnectConnectionToNetwork, error) {
 	if pullErr := readBuffer.PullContext("NLMDisconnectConnectionToNetwork"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -153,7 +153,7 @@ func NLMDisconnectConnectionToNetworkParse(readBuffer utils.ReadBuffer, apduLeng
 		NLM:                       &NLM{},
 	}
 	_child.NLM.Child = _child
-	return _child.NLM, nil
+	return _child, nil
 }
 
 func (m *NLMDisconnectConnectionToNetwork) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMEstablishConnectionToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMEstablishConnectionToNetwork.go
index c606f83..9f4d5fb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMEstablishConnectionToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMEstablishConnectionToNetwork.go
@@ -140,7 +140,7 @@ func (m *NLMEstablishConnectionToNetwork) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NLMEstablishConnectionToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLM, error) {
+func NLMEstablishConnectionToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLMEstablishConnectionToNetwork, error) {
 	if pullErr := readBuffer.PullContext("NLMEstablishConnectionToNetwork"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -172,7 +172,7 @@ func NLMEstablishConnectionToNetworkParse(readBuffer utils.ReadBuffer, apduLengt
 		NLM:                       &NLM{},
 	}
 	_child.NLM.Child = _child
-	return _child.NLM, nil
+	return _child, nil
 }
 
 func (m *NLMEstablishConnectionToNetwork) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
index 1cbf8c6..529dc9c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
@@ -131,7 +131,7 @@ func (m *NLMIAmRouterToNetwork) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NLMIAmRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLM, error) {
+func NLMIAmRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLMIAmRouterToNetwork, error) {
 	if pullErr := readBuffer.PullContext("NLMIAmRouterToNetwork"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -169,7 +169,7 @@ func NLMIAmRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16,
 		NLM:                       &NLM{},
 	}
 	_child.NLM.Child = _child
-	return _child.NLM, nil
+	return _child, nil
 }
 
 func (m *NLMIAmRouterToNetwork) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMICouldBeRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMICouldBeRouterToNetwork.go
index eb49c73..219c2d3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMICouldBeRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMICouldBeRouterToNetwork.go
@@ -140,7 +140,7 @@ func (m *NLMICouldBeRouterToNetwork) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NLMICouldBeRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLM, error) {
+func NLMICouldBeRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLMICouldBeRouterToNetwork, error) {
 	if pullErr := readBuffer.PullContext("NLMICouldBeRouterToNetwork"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -172,7 +172,7 @@ func NLMICouldBeRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uin
 		NLM:                       &NLM{},
 	}
 	_child.NLM.Child = _child
-	return _child.NLM, nil
+	return _child, nil
 }
 
 func (m *NLMICouldBeRouterToNetwork) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTable.go
index 371bca6..493d11c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTable.go
@@ -145,7 +145,7 @@ func (m *NLMInitalizeRoutingTable) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NLMInitalizeRoutingTableParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLM, error) {
+func NLMInitalizeRoutingTableParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLMInitalizeRoutingTable, error) {
 	if pullErr := readBuffer.PullContext("NLMInitalizeRoutingTable"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -189,7 +189,7 @@ func NLMInitalizeRoutingTableParse(readBuffer utils.ReadBuffer, apduLength uint1
 		NLM:           &NLM{},
 	}
 	_child.NLM.Child = _child
-	return _child.NLM, nil
+	return _child, nil
 }
 
 func (m *NLMInitalizeRoutingTable) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTableAck.go
index 843c37b..b9a4303 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMInitalizeRoutingTableAck.go
@@ -145,7 +145,7 @@ func (m *NLMInitalizeRoutingTableAck) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NLMInitalizeRoutingTableAckParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLM, error) {
+func NLMInitalizeRoutingTableAckParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLMInitalizeRoutingTableAck, error) {
 	if pullErr := readBuffer.PullContext("NLMInitalizeRoutingTableAck"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -189,7 +189,7 @@ func NLMInitalizeRoutingTableAckParse(readBuffer utils.ReadBuffer, apduLength ui
 		NLM:           &NLM{},
 	}
 	_child.NLM.Child = _child
-	return _child.NLM, nil
+	return _child, nil
 }
 
 func (m *NLMInitalizeRoutingTableAck) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetwork.go
index 48d50d9..1010e57 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRejectRouterToNetwork.go
@@ -140,7 +140,7 @@ func (m *NLMRejectRouterToNetwork) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NLMRejectRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLM, error) {
+func NLMRejectRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLMRejectRouterToNetwork, error) {
 	if pullErr := readBuffer.PullContext("NLMRejectRouterToNetwork"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -178,7 +178,7 @@ func NLMRejectRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint1
 		NLM:                       &NLM{},
 	}
 	_child.NLM.Child = _child
-	return _child.NLM, nil
+	return _child, nil
 }
 
 func (m *NLMRejectRouterToNetwork) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterAvailableToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterAvailableToNetwork.go
index 4e41ac0..1ef939a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterAvailableToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterAvailableToNetwork.go
@@ -131,7 +131,7 @@ func (m *NLMRouterAvailableToNetwork) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NLMRouterAvailableToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLM, error) {
+func NLMRouterAvailableToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLMRouterAvailableToNetwork, error) {
 	if pullErr := readBuffer.PullContext("NLMRouterAvailableToNetwork"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -169,7 +169,7 @@ func NLMRouterAvailableToNetworkParse(readBuffer utils.ReadBuffer, apduLength ui
 		NLM:                       &NLM{},
 	}
 	_child.NLM.Child = _child
-	return _child.NLM, nil
+	return _child, nil
 }
 
 func (m *NLMRouterAvailableToNetwork) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterBusyToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterBusyToNetwork.go
index a078a17..3a2af2a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterBusyToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMRouterBusyToNetwork.go
@@ -131,7 +131,7 @@ func (m *NLMRouterBusyToNetwork) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NLMRouterBusyToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLM, error) {
+func NLMRouterBusyToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLMRouterBusyToNetwork, error) {
 	if pullErr := readBuffer.PullContext("NLMRouterBusyToNetwork"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -169,7 +169,7 @@ func NLMRouterBusyToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16,
 		NLM:                       &NLM{},
 	}
 	_child.NLM.Child = _child
-	return _child.NLM, nil
+	return _child, nil
 }
 
 func (m *NLMRouterBusyToNetwork) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
index deb02c2..9bd5716 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
@@ -131,7 +131,7 @@ func (m *NLMWhoIsRouterToNetwork) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NLMWhoIsRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLM, error) {
+func NLMWhoIsRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16, messageType uint8) (*NLMWhoIsRouterToNetwork, error) {
 	if pullErr := readBuffer.PullContext("NLMWhoIsRouterToNetwork"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -169,7 +169,7 @@ func NLMWhoIsRouterToNetworkParse(readBuffer utils.ReadBuffer, apduLength uint16
 		NLM:                       &NLM{},
 	}
 	_child.NLM.Child = _child
-	return _child.NLM, nil
+	return _child, nil
 }
 
 func (m *NLMWhoIsRouterToNetwork) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALData.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALData.go
index e854e31..d22a349 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALData.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALData.go
@@ -153,25 +153,29 @@ func CALDataParse(readBuffer utils.ReadBuffer) (*CALData, error) {
 	_ = commandType
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *CALData
+	type CALDataChild interface {
+		InitializeParent(*CALData, CALCommandTypeContainer)
+		GetParent() *CALData
+	}
+	var _child CALDataChild
 	var typeSwitchError error
 	switch {
 	case commandType == CALCommandType_RESET: // CALDataRequestReset
-		_parent, typeSwitchError = CALDataRequestResetParse(readBuffer)
+		_child, typeSwitchError = CALDataRequestResetParse(readBuffer)
 	case commandType == CALCommandType_RECALL: // CALDataRequestRecall
-		_parent, typeSwitchError = CALDataRequestRecallParse(readBuffer)
+		_child, typeSwitchError = CALDataRequestRecallParse(readBuffer)
 	case commandType == CALCommandType_IDENTIFY: // CALDataRequestIdentify
-		_parent, typeSwitchError = CALDataRequestIdentifyParse(readBuffer)
+		_child, typeSwitchError = CALDataRequestIdentifyParse(readBuffer)
 	case commandType == CALCommandType_GET_STATUS: // CALDataRequestGetStatus
-		_parent, typeSwitchError = CALDataRequestGetStatusParse(readBuffer)
+		_child, typeSwitchError = CALDataRequestGetStatusParse(readBuffer)
 	case commandType == CALCommandType_REPLY: // CALDataReplyReply
-		_parent, typeSwitchError = CALDataReplyReplyParse(readBuffer, commandTypeContainer)
+		_child, typeSwitchError = CALDataReplyReplyParse(readBuffer, commandTypeContainer)
 	case commandType == CALCommandType_ACKNOWLEDGE: // CALDataReplyAcknowledge
-		_parent, typeSwitchError = CALDataReplyAcknowledgeParse(readBuffer)
+		_child, typeSwitchError = CALDataReplyAcknowledgeParse(readBuffer)
 	case commandType == CALCommandType_STATUS: // CALDataReplyStatus
-		_parent, typeSwitchError = CALDataReplyStatusParse(readBuffer, commandTypeContainer)
+		_child, typeSwitchError = CALDataReplyStatusParse(readBuffer, commandTypeContainer)
 	case commandType == CALCommandType_STATUS_EXTENDED: // CALDataReplyStatusExtended
-		_parent, typeSwitchError = CALDataReplyStatusExtendedParse(readBuffer, commandTypeContainer)
+		_child, typeSwitchError = CALDataReplyStatusExtendedParse(readBuffer, commandTypeContainer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -185,8 +189,8 @@ func CALDataParse(readBuffer utils.ReadBuffer) (*CALData, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, commandTypeContainer)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), commandTypeContainer)
+	return _child.GetParent(), nil
 }
 
 func (m *CALData) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyAcknowledge.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyAcknowledge.go
index 946f8af..7739378 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyAcknowledge.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyAcknowledge.go
@@ -133,7 +133,7 @@ func (m *CALDataReplyAcknowledge) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CALDataReplyAcknowledgeParse(readBuffer utils.ReadBuffer) (*CALData, error) {
+func CALDataReplyAcknowledgeParse(readBuffer utils.ReadBuffer) (*CALDataReplyAcknowledge, error) {
 	if pullErr := readBuffer.PullContext("CALDataReplyAcknowledge"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -165,7 +165,7 @@ func CALDataReplyAcknowledgeParse(readBuffer utils.ReadBuffer) (*CALData, error)
 		CALData: &CALData{},
 	}
 	_child.CALData.Child = _child
-	return _child.CALData, nil
+	return _child, nil
 }
 
 func (m *CALDataReplyAcknowledge) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyReply.go
index bd576d3..c36778f 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyReply.go
@@ -135,7 +135,7 @@ func (m *CALDataReplyReply) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CALDataReplyReplyParse(readBuffer utils.ReadBuffer, commandTypeContainer CALCommandTypeContainer) (*CALData, error) {
+func CALDataReplyReplyParse(readBuffer utils.ReadBuffer, commandTypeContainer CALCommandTypeContainer) (*CALDataReplyReply, error) {
 	if pullErr := readBuffer.PullContext("CALDataReplyReply"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -166,7 +166,7 @@ func CALDataReplyReplyParse(readBuffer utils.ReadBuffer, commandTypeContainer CA
 		CALData:     &CALData{},
 	}
 	_child.CALData.Child = _child
-	return _child.CALData, nil
+	return _child, nil
 }
 
 func (m *CALDataReplyReply) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatus.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatus.go
index 11d55ee..2757582 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatus.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatus.go
@@ -146,7 +146,7 @@ func (m *CALDataReplyStatus) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CALDataReplyStatusParse(readBuffer utils.ReadBuffer, commandTypeContainer CALCommandTypeContainer) (*CALData, error) {
+func CALDataReplyStatusParse(readBuffer utils.ReadBuffer, commandTypeContainer CALCommandTypeContainer) (*CALDataReplyStatus, error) {
 	if pullErr := readBuffer.PullContext("CALDataReplyStatus"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -191,7 +191,7 @@ func CALDataReplyStatusParse(readBuffer utils.ReadBuffer, commandTypeContainer C
 		CALData:     &CALData{},
 	}
 	_child.CALData.Child = _child
-	return _child.CALData, nil
+	return _child, nil
 }
 
 func (m *CALDataReplyStatus) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatusExtended.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatusExtended.go
index 4f0d69d..fdd46a0 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatusExtended.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataReplyStatusExtended.go
@@ -157,7 +157,7 @@ func (m *CALDataReplyStatusExtended) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CALDataReplyStatusExtendedParse(readBuffer utils.ReadBuffer, commandTypeContainer CALCommandTypeContainer) (*CALData, error) {
+func CALDataReplyStatusExtendedParse(readBuffer utils.ReadBuffer, commandTypeContainer CALCommandTypeContainer) (*CALDataReplyStatusExtended, error) {
 	if pullErr := readBuffer.PullContext("CALDataReplyStatusExtended"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -210,7 +210,7 @@ func CALDataReplyStatusExtendedParse(readBuffer utils.ReadBuffer, commandTypeCon
 		CALData:     &CALData{},
 	}
 	_child.CALData.Child = _child
-	return _child.CALData, nil
+	return _child, nil
 }
 
 func (m *CALDataReplyStatusExtended) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestGetStatus.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestGetStatus.go
index aa84c63..76b96cb 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestGetStatus.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestGetStatus.go
@@ -133,7 +133,7 @@ func (m *CALDataRequestGetStatus) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CALDataRequestGetStatusParse(readBuffer utils.ReadBuffer) (*CALData, error) {
+func CALDataRequestGetStatusParse(readBuffer utils.ReadBuffer) (*CALDataRequestGetStatus, error) {
 	if pullErr := readBuffer.PullContext("CALDataRequestGetStatus"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -165,7 +165,7 @@ func CALDataRequestGetStatusParse(readBuffer utils.ReadBuffer) (*CALData, error)
 		CALData: &CALData{},
 	}
 	_child.CALData.Child = _child
-	return _child.CALData, nil
+	return _child, nil
 }
 
 func (m *CALDataRequestGetStatus) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestIdentify.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestIdentify.go
index 4bed6c5..8fbc398 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestIdentify.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestIdentify.go
@@ -122,7 +122,7 @@ func (m *CALDataRequestIdentify) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CALDataRequestIdentifyParse(readBuffer utils.ReadBuffer) (*CALData, error) {
+func CALDataRequestIdentifyParse(readBuffer utils.ReadBuffer) (*CALDataRequestIdentify, error) {
 	if pullErr := readBuffer.PullContext("CALDataRequestIdentify"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func CALDataRequestIdentifyParse(readBuffer utils.ReadBuffer) (*CALData, error)
 		CALData:   &CALData{},
 	}
 	_child.CALData.Child = _child
-	return _child.CALData, nil
+	return _child, nil
 }
 
 func (m *CALDataRequestIdentify) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestRecall.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestRecall.go
index c2dcd34..4cbaece 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestRecall.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestRecall.go
@@ -133,7 +133,7 @@ func (m *CALDataRequestRecall) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CALDataRequestRecallParse(readBuffer utils.ReadBuffer) (*CALData, error) {
+func CALDataRequestRecallParse(readBuffer utils.ReadBuffer) (*CALDataRequestRecall, error) {
 	if pullErr := readBuffer.PullContext("CALDataRequestRecall"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -165,7 +165,7 @@ func CALDataRequestRecallParse(readBuffer utils.ReadBuffer) (*CALData, error) {
 		CALData: &CALData{},
 	}
 	_child.CALData.Child = _child
-	return _child.CALData, nil
+	return _child, nil
 }
 
 func (m *CALDataRequestRecall) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestReset.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestReset.go
index cb32693..169ca5d 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestReset.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALDataRequestReset.go
@@ -101,7 +101,7 @@ func (m *CALDataRequestReset) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CALDataRequestResetParse(readBuffer utils.ReadBuffer) (*CALData, error) {
+func CALDataRequestResetParse(readBuffer utils.ReadBuffer) (*CALDataRequestReset, error) {
 	if pullErr := readBuffer.PullContext("CALDataRequestReset"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -117,7 +117,7 @@ func CALDataRequestResetParse(readBuffer utils.ReadBuffer) (*CALData, error) {
 		CALData: &CALData{},
 	}
 	_child.CALData.Child = _child
-	return _child.CALData, nil
+	return _child, nil
 }
 
 func (m *CALDataRequestReset) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALReply.go
index ab9a7a8..e14684d 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALReply.go
@@ -146,13 +146,17 @@ func CALReplyParse(readBuffer utils.ReadBuffer) (*CALReply, error) {
 	readBuffer.Reset(currentPos)
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *CALReply
+	type CALReplyChild interface {
+		InitializeParent(*CALReply, byte, *CALData)
+		GetParent() *CALReply
+	}
+	var _child CALReplyChild
 	var typeSwitchError error
 	switch {
 	case calType == 0x86: // CALReplyLong
-		_parent, typeSwitchError = CALReplyLongParse(readBuffer)
+		_child, typeSwitchError = CALReplyLongParse(readBuffer)
 	case true: // CALReplyShort
-		_parent, typeSwitchError = CALReplyShortParse(readBuffer)
+		_child, typeSwitchError = CALReplyShortParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -197,8 +201,8 @@ func CALReplyParse(readBuffer utils.ReadBuffer) (*CALReply, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, calType, calData)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), calType, calData)
+	return _child.GetParent(), nil
 }
 
 func (m *CALReply) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyLong.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyLong.go
index ea777df..3fd8e53 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyLong.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyLong.go
@@ -212,7 +212,7 @@ func (m *CALReplyLong) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CALReplyLongParse(readBuffer utils.ReadBuffer) (*CALReply, error) {
+func CALReplyLongParse(readBuffer utils.ReadBuffer) (*CALReplyLong, error) {
 	if pullErr := readBuffer.PullContext("CALReplyLong"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -353,7 +353,7 @@ func CALReplyLongParse(readBuffer utils.ReadBuffer) (*CALReply, error) {
 		CALReply:               &CALReply{},
 	}
 	_child.CALReply.Child = _child
-	return _child.CALReply, nil
+	return _child, nil
 }
 
 func (m *CALReplyLong) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyReply.go
index a02c27d..8c41f22 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyReply.go
@@ -122,7 +122,7 @@ func (m *CALReplyReply) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CALReplyReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
+func CALReplyReplyParse(readBuffer utils.ReadBuffer) (*CALReplyReply, error) {
 	if pullErr := readBuffer.PullContext("CALReplyReply"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func CALReplyReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
 		Reply: &Reply{},
 	}
 	_child.Reply.Child = _child
-	return _child.Reply, nil
+	return _child, nil
 }
 
 func (m *CALReplyReply) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyShort.go b/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyShort.go
index 8cba40c..f2c8c77 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyShort.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CALReplyShort.go
@@ -102,7 +102,7 @@ func (m *CALReplyShort) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CALReplyShortParse(readBuffer utils.ReadBuffer) (*CALReply, error) {
+func CALReplyShortParse(readBuffer utils.ReadBuffer) (*CALReplyShort, error) {
 	if pullErr := readBuffer.PullContext("CALReplyShort"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -118,7 +118,7 @@ func CALReplyShortParse(readBuffer utils.ReadBuffer) (*CALReply, error) {
 		CALReply: &CALReply{},
 	}
 	_child.CALReply.Child = _child
-	return _child.CALReply, nil
+	return _child, nil
 }
 
 func (m *CALReplyShort) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommand.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommand.go
index 53a86bc..4693848 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommand.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommand.go
@@ -172,15 +172,19 @@ func CBusCommandParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusCommand, er
 	_ = destinationAddressType
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *CBusCommand
+	type CBusCommandChild interface {
+		InitializeParent(*CBusCommand, *CBusHeader)
+		GetParent() *CBusCommand
+	}
+	var _child CBusCommandChild
 	var typeSwitchError error
 	switch {
 	case destinationAddressType == DestinationAddressType_PointToPointToMultiPoint: // CBusCommandPointToPointToMultiPoint
-		_parent, typeSwitchError = CBusCommandPointToPointToMultiPointParse(readBuffer, srchk)
+		_child, typeSwitchError = CBusCommandPointToPointToMultiPointParse(readBuffer, srchk)
 	case destinationAddressType == DestinationAddressType_PointToMultiPoint: // CBusCommandPointToMultiPoint
-		_parent, typeSwitchError = CBusCommandPointToMultiPointParse(readBuffer, srchk)
+		_child, typeSwitchError = CBusCommandPointToMultiPointParse(readBuffer, srchk)
 	case destinationAddressType == DestinationAddressType_PointToPoint: // CBusCommandPointToPoint
-		_parent, typeSwitchError = CBusCommandPointToPointParse(readBuffer, srchk)
+		_child, typeSwitchError = CBusCommandPointToPointParse(readBuffer, srchk)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -194,8 +198,8 @@ func CBusCommandParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusCommand, er
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, header)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), header)
+	return _child.GetParent(), nil
 }
 
 func (m *CBusCommand) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToMultiPoint.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToMultiPoint.go
index 5c42a88..2720b01 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToMultiPoint.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToMultiPoint.go
@@ -125,7 +125,7 @@ func (m *CBusCommandPointToMultiPoint) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CBusCommandPointToMultiPointParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusCommand, error) {
+func CBusCommandPointToMultiPointParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusCommandPointToMultiPoint, error) {
 	if pullErr := readBuffer.PullContext("CBusCommandPointToMultiPoint"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -155,7 +155,7 @@ func CBusCommandPointToMultiPointParse(readBuffer utils.ReadBuffer, srchk bool)
 		CBusCommand: &CBusCommand{},
 	}
 	_child.CBusCommand.Child = _child
-	return _child.CBusCommand, nil
+	return _child, nil
 }
 
 func (m *CBusCommandPointToMultiPoint) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPoint.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPoint.go
index a270aa7..7931921 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPoint.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPoint.go
@@ -125,7 +125,7 @@ func (m *CBusCommandPointToPoint) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CBusCommandPointToPointParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusCommand, error) {
+func CBusCommandPointToPointParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusCommandPointToPoint, error) {
 	if pullErr := readBuffer.PullContext("CBusCommandPointToPoint"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -155,7 +155,7 @@ func CBusCommandPointToPointParse(readBuffer utils.ReadBuffer, srchk bool) (*CBu
 		CBusCommand: &CBusCommand{},
 	}
 	_child.CBusCommand.Child = _child
-	return _child.CBusCommand, nil
+	return _child, nil
 }
 
 func (m *CBusCommandPointToPoint) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPoint.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPoint.go
index 9b1eb55..c9f4305 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPoint.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPoint.go
@@ -125,7 +125,7 @@ func (m *CBusCommandPointToPointToMultiPoint) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CBusCommandPointToPointToMultiPointParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusCommand, error) {
+func CBusCommandPointToPointToMultiPointParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusCommandPointToPointToMultiPoint, error) {
 	if pullErr := readBuffer.PullContext("CBusCommandPointToPointToMultiPoint"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -155,7 +155,7 @@ func CBusCommandPointToPointToMultiPointParse(readBuffer utils.ReadBuffer, srchk
 		CBusCommand: &CBusCommand{},
 	}
 	_child.CBusCommand.Child = _child
-	return _child.CBusCommand, nil
+	return _child, nil
 }
 
 func (m *CBusCommandPointToPointToMultiPoint) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointNormal.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointNormal.go
index 241b765..0508a62 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointNormal.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointNormal.go
@@ -180,7 +180,7 @@ func (m *CBusCommandPointToPointToMultiPointNormal) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CBusCommandPointToPointToMultiPointNormalParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusPointToPointToMultipointCommand, error) {
+func CBusCommandPointToPointToMultiPointNormalParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusCommandPointToPointToMultiPointNormal, error) {
 	if pullErr := readBuffer.PullContext("CBusCommandPointToPointToMultiPointNormal"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -287,7 +287,7 @@ func CBusCommandPointToPointToMultiPointNormalParse(readBuffer utils.ReadBuffer,
 		CBusPointToPointToMultipointCommand: &CBusPointToPointToMultipointCommand{},
 	}
 	_child.CBusPointToPointToMultipointCommand.Child = _child
-	return _child.CBusPointToPointToMultipointCommand, nil
+	return _child, nil
 }
 
 func (m *CBusCommandPointToPointToMultiPointNormal) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointStatus.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointStatus.go
index 3411654..50382b2 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointStatus.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusCommandPointToPointToMultiPointStatus.go
@@ -173,7 +173,7 @@ func (m *CBusCommandPointToPointToMultiPointStatus) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CBusCommandPointToPointToMultiPointStatusParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusPointToPointToMultipointCommand, error) {
+func CBusCommandPointToPointToMultiPointStatusParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusCommandPointToPointToMultiPointStatus, error) {
 	if pullErr := readBuffer.PullContext("CBusCommandPointToPointToMultiPointStatus"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -280,7 +280,7 @@ func CBusCommandPointToPointToMultiPointStatusParse(readBuffer utils.ReadBuffer,
 		CBusPointToPointToMultipointCommand: &CBusPointToPointToMultipointCommand{},
 	}
 	_child.CBusPointToPointToMultipointCommand.Child = _child
-	return _child.CBusPointToPointToMultipointCommand, nil
+	return _child, nil
 }
 
 func (m *CBusCommandPointToPointToMultiPointStatus) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommand.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommand.go
index 4793296..05e75a2 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommand.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommand.go
@@ -128,13 +128,17 @@ func CBusPointToMultiPointCommandParse(readBuffer utils.ReadBuffer, srchk bool)
 	readBuffer.Reset(currentPos)
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *CBusPointToMultiPointCommand
+	type CBusPointToMultiPointCommandChild interface {
+		InitializeParent(*CBusPointToMultiPointCommand, byte)
+		GetParent() *CBusPointToMultiPointCommand
+	}
+	var _child CBusPointToMultiPointCommandChild
 	var typeSwitchError error
 	switch {
 	case peekedApplication == 0xFF: // CBusPointToMultiPointCommandStatus
-		_parent, typeSwitchError = CBusPointToMultiPointCommandStatusParse(readBuffer, srchk)
+		_child, typeSwitchError = CBusPointToMultiPointCommandStatusParse(readBuffer, srchk)
 	case true: // CBusPointToMultiPointCommandNormal
-		_parent, typeSwitchError = CBusPointToMultiPointCommandNormalParse(readBuffer, srchk)
+		_child, typeSwitchError = CBusPointToMultiPointCommandNormalParse(readBuffer, srchk)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -148,8 +152,8 @@ func CBusPointToMultiPointCommandParse(readBuffer utils.ReadBuffer, srchk bool)
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, peekedApplication)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), peekedApplication)
+	return _child.GetParent(), nil
 }
 
 func (m *CBusPointToMultiPointCommand) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandNormal.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandNormal.go
index ee0133f..2d11578 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandNormal.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandNormal.go
@@ -182,7 +182,7 @@ func (m *CBusPointToMultiPointCommandNormal) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CBusPointToMultiPointCommandNormalParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusPointToMultiPointCommand, error) {
+func CBusPointToMultiPointCommandNormalParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusPointToMultiPointCommandNormal, error) {
 	if pullErr := readBuffer.PullContext("CBusPointToMultiPointCommandNormal"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -303,7 +303,7 @@ func CBusPointToMultiPointCommandNormalParse(readBuffer utils.ReadBuffer, srchk
 		CBusPointToMultiPointCommand: &CBusPointToMultiPointCommand{},
 	}
 	_child.CBusPointToMultiPointCommand.Child = _child
-	return _child.CBusPointToMultiPointCommand, nil
+	return _child, nil
 }
 
 func (m *CBusPointToMultiPointCommandNormal) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandStatus.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandStatus.go
index b394c3d..01f6dc2 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandStatus.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToMultiPointCommandStatus.go
@@ -174,7 +174,7 @@ func (m *CBusPointToMultiPointCommandStatus) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CBusPointToMultiPointCommandStatusParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusPointToMultiPointCommand, error) {
+func CBusPointToMultiPointCommandStatusParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusPointToMultiPointCommandStatus, error) {
 	if pullErr := readBuffer.PullContext("CBusPointToMultiPointCommandStatus"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -295,7 +295,7 @@ func CBusPointToMultiPointCommandStatusParse(readBuffer utils.ReadBuffer, srchk
 		CBusPointToMultiPointCommand: &CBusPointToMultiPointCommand{},
 	}
 	_child.CBusPointToMultiPointCommand.Child = _child
-	return _child.CBusPointToMultiPointCommand, nil
+	return _child, nil
 }
 
 func (m *CBusPointToMultiPointCommandStatus) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommand.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommand.go
index e6dded7..0887d4e 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommand.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommand.go
@@ -202,13 +202,17 @@ func CBusPointToPointCommandParse(readBuffer utils.ReadBuffer, srchk bool) (*CBu
 	_ = isDirect
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *CBusPointToPointCommand
+	type CBusPointToPointCommandChild interface {
+		InitializeParent(*CBusPointToPointCommand, uint16, *CALData, *Checksum, byte, *Alpha)
+		GetParent() *CBusPointToPointCommand
+	}
+	var _child CBusPointToPointCommandChild
 	var typeSwitchError error
 	switch {
 	case isDirect == bool(true): // CBusPointToPointCommandDirect
-		_parent, typeSwitchError = CBusPointToPointCommandDirectParse(readBuffer, srchk)
+		_child, typeSwitchError = CBusPointToPointCommandDirectParse(readBuffer, srchk)
 	case isDirect == bool(false): // CBusPointToPointCommandIndirect
-		_parent, typeSwitchError = CBusPointToPointCommandIndirectParse(readBuffer, srchk)
+		_child, typeSwitchError = CBusPointToPointCommandIndirectParse(readBuffer, srchk)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -295,8 +299,8 @@ func CBusPointToPointCommandParse(readBuffer utils.ReadBuffer, srchk bool) (*CBu
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, bridgeAddressCountPeek, calData, crc, peekAlpha, alpha)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), bridgeAddressCountPeek, calData, crc, peekAlpha, alpha)
+	return _child.GetParent(), nil
 }
 
 func (m *CBusPointToPointCommand) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandDirect.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandDirect.go
index 5576a21..d99c9fc 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandDirect.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandDirect.go
@@ -133,7 +133,7 @@ func (m *CBusPointToPointCommandDirect) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CBusPointToPointCommandDirectParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusPointToPointCommand, error) {
+func CBusPointToPointCommandDirectParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusPointToPointCommandDirect, error) {
 	if pullErr := readBuffer.PullContext("CBusPointToPointCommandDirect"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -177,7 +177,7 @@ func CBusPointToPointCommandDirectParse(readBuffer utils.ReadBuffer, srchk bool)
 		CBusPointToPointCommand: &CBusPointToPointCommand{},
 	}
 	_child.CBusPointToPointCommand.Child = _child
-	return _child.CBusPointToPointCommand, nil
+	return _child, nil
 }
 
 func (m *CBusPointToPointCommandDirect) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandIndirect.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandIndirect.go
index 0fb7ab3..a9bf3d5 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandIndirect.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointCommandIndirect.go
@@ -151,7 +151,7 @@ func (m *CBusPointToPointCommandIndirect) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CBusPointToPointCommandIndirectParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusPointToPointCommand, error) {
+func CBusPointToPointCommandIndirectParse(readBuffer utils.ReadBuffer, srchk bool) (*CBusPointToPointCommandIndirect, error) {
 	if pullErr := readBuffer.PullContext("CBusPointToPointCommandIndirect"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -209,7 +209,7 @@ func CBusPointToPointCommandIndirectParse(readBuffer utils.ReadBuffer, srchk boo
 		CBusPointToPointCommand: &CBusPointToPointCommand{},
 	}
 	_child.CBusPointToPointCommand.Child = _child
-	return _child.CBusPointToPointCommand, nil
+	return _child, nil
 }
 
 func (m *CBusPointToPointCommandIndirect) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointToMultipointCommand.go b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointToMultipointCommand.go
index 8be405b..d0160b1 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointToMultipointCommand.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/CBusPointToPointToMultipointCommand.go
@@ -174,13 +174,17 @@ func CBusPointToPointToMultipointCommandParse(readBuffer utils.ReadBuffer, srchk
 	readBuffer.Reset(currentPos)
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *CBusPointToPointToMultipointCommand
+	type CBusPointToPointToMultipointCommandChild interface {
+		InitializeParent(*CBusPointToPointToMultipointCommand, *BridgeAddress, *NetworkRoute, byte)
+		GetParent() *CBusPointToPointToMultipointCommand
+	}
+	var _child CBusPointToPointToMultipointCommandChild
 	var typeSwitchError error
 	switch {
 	case peekedApplication == 0xFF: // CBusCommandPointToPointToMultiPointStatus
-		_parent, typeSwitchError = CBusCommandPointToPointToMultiPointStatusParse(readBuffer, srchk)
+		_child, typeSwitchError = CBusCommandPointToPointToMultiPointStatusParse(readBuffer, srchk)
 	case true: // CBusCommandPointToPointToMultiPointNormal
-		_parent, typeSwitchError = CBusCommandPointToPointToMultiPointNormalParse(readBuffer, srchk)
+		_child, typeSwitchError = CBusCommandPointToPointToMultiPointNormalParse(readBuffer, srchk)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -194,8 +198,8 @@ func CBusPointToPointToMultipointCommandParse(readBuffer utils.ReadBuffer, srchk
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, bridgeAddress, networkRoute, peekedApplication)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), bridgeAddress, networkRoute, peekedApplication)
+	return _child.GetParent(), nil
 }
 
 func (m *CBusPointToPointToMultipointCommand) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/Confirmation.go b/plc4go/internal/plc4go/cbus/readwrite/model/Confirmation.go
index 2384be2..6974fbb 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/Confirmation.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/Confirmation.go
@@ -142,19 +142,23 @@ func ConfirmationParse(readBuffer utils.ReadBuffer) (*Confirmation, error) {
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *Confirmation
+	type ConfirmationChild interface {
+		InitializeParent(*Confirmation, *Alpha)
+		GetParent() *Confirmation
+	}
+	var _child ConfirmationChild
 	var typeSwitchError error
 	switch {
 	case confirmationType == 0x2E: // ConfirmationSuccessful
-		_parent, typeSwitchError = ConfirmationSuccessfulParse(readBuffer)
+		_child, typeSwitchError = ConfirmationSuccessfulParse(readBuffer)
 	case confirmationType == 0x23: // NotTransmittedToManyReTransmissions
-		_parent, typeSwitchError = NotTransmittedToManyReTransmissionsParse(readBuffer)
+		_child, typeSwitchError = NotTransmittedToManyReTransmissionsParse(readBuffer)
 	case confirmationType == 0x24: // NotTransmittedCorruption
-		_parent, typeSwitchError = NotTransmittedCorruptionParse(readBuffer)
+		_child, typeSwitchError = NotTransmittedCorruptionParse(readBuffer)
 	case confirmationType == 0x25: // NotTransmittedSyncLoss
-		_parent, typeSwitchError = NotTransmittedSyncLossParse(readBuffer)
+		_child, typeSwitchError = NotTransmittedSyncLossParse(readBuffer)
 	case confirmationType == 0x27: // NotTransmittedTooLong
-		_parent, typeSwitchError = NotTransmittedTooLongParse(readBuffer)
+		_child, typeSwitchError = NotTransmittedTooLongParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -168,8 +172,8 @@ func ConfirmationParse(readBuffer utils.ReadBuffer) (*Confirmation, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, alpha)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), alpha)
+	return _child.GetParent(), nil
 }
 
 func (m *Confirmation) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationReply.go
index fc24bac..53b0883 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationReply.go
@@ -122,7 +122,7 @@ func (m *ConfirmationReply) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func ConfirmationReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
+func ConfirmationReplyParse(readBuffer utils.ReadBuffer) (*ConfirmationReply, error) {
 	if pullErr := readBuffer.PullContext("ConfirmationReply"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func ConfirmationReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
 		Reply: &Reply{},
 	}
 	_child.Reply.Child = _child
-	return _child.Reply, nil
+	return _child, nil
 }
 
 func (m *ConfirmationReply) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationSuccessful.go b/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationSuccessful.go
index 60482dc..ed3eb0d 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationSuccessful.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/ConfirmationSuccessful.go
@@ -105,7 +105,7 @@ func (m *ConfirmationSuccessful) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func ConfirmationSuccessfulParse(readBuffer utils.ReadBuffer) (*Confirmation, error) {
+func ConfirmationSuccessfulParse(readBuffer utils.ReadBuffer) (*ConfirmationSuccessful, error) {
 	if pullErr := readBuffer.PullContext("ConfirmationSuccessful"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -121,7 +121,7 @@ func ConfirmationSuccessfulParse(readBuffer utils.ReadBuffer) (*Confirmation, er
 		Confirmation: &Confirmation{},
 	}
 	_child.Confirmation.Child = _child
-	return _child.Confirmation, nil
+	return _child, nil
 }
 
 func (m *ConfirmationSuccessful) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/ExclamationMarkReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/ExclamationMarkReply.go
index f9154c1..dc722d3 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/ExclamationMarkReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/ExclamationMarkReply.go
@@ -122,7 +122,7 @@ func (m *ExclamationMarkReply) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func ExclamationMarkReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
+func ExclamationMarkReplyParse(readBuffer utils.ReadBuffer) (*ExclamationMarkReply, error) {
 	if pullErr := readBuffer.PullContext("ExclamationMarkReply"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func ExclamationMarkReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
 		Reply: &Reply{},
 	}
 	_child.Reply.Child = _child
-	return _child.Reply, nil
+	return _child, nil
 }
 
 func (m *ExclamationMarkReply) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommand.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommand.go
index bce9124..0fb8a68 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommand.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommand.go
@@ -102,45 +102,49 @@ func IdentifyReplyCommandParse(readBuffer utils.ReadBuffer, attribute Attribute)
 	_ = currentPos
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *IdentifyReplyCommand
+	type IdentifyReplyCommandChild interface {
+		InitializeParent(*IdentifyReplyCommand)
+		GetParent() *IdentifyReplyCommand
+	}
+	var _child IdentifyReplyCommandChild
 	var typeSwitchError error
 	switch {
 	case attribute == Attribute_Manufacturer: // IdentifyReplyCommandManufacturer
-		_parent, typeSwitchError = IdentifyReplyCommandManufacturerParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandManufacturerParse(readBuffer, attribute)
 	case attribute == Attribute_Type: // IdentifyReplyCommandType
-		_parent, typeSwitchError = IdentifyReplyCommandTypeParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandTypeParse(readBuffer, attribute)
 	case attribute == Attribute_FirmwareVersion: // IdentifyReplyCommandFirmwareVersion
-		_parent, typeSwitchError = IdentifyReplyCommandFirmwareVersionParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandFirmwareVersionParse(readBuffer, attribute)
 	case attribute == Attribute_Summary: // IdentifyReplyCommandFirmwareSummary
-		_parent, typeSwitchError = IdentifyReplyCommandFirmwareSummaryParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandFirmwareSummaryParse(readBuffer, attribute)
 	case attribute == Attribute_ExtendedDiagnosticSummary: // IdentifyReplyCommandExtendedDiagnosticSummary
-		_parent, typeSwitchError = IdentifyReplyCommandExtendedDiagnosticSummaryParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandExtendedDiagnosticSummaryParse(readBuffer, attribute)
 	case attribute == Attribute_NetworkTerminalLevels: // IdentifyReplyCommandNetworkTerminalLevels
-		_parent, typeSwitchError = IdentifyReplyCommandNetworkTerminalLevelsParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandNetworkTerminalLevelsParse(readBuffer, attribute)
 	case attribute == Attribute_TerminalLevel: // IdentifyReplyCommandTerminalLevels
-		_parent, typeSwitchError = IdentifyReplyCommandTerminalLevelsParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandTerminalLevelsParse(readBuffer, attribute)
 	case attribute == Attribute_NetworkVoltage: // IdentifyReplyCommandNetworkVoltage
-		_parent, typeSwitchError = IdentifyReplyCommandNetworkVoltageParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandNetworkVoltageParse(readBuffer, attribute)
 	case attribute == Attribute_GAVValuesCurrent: // IdentifyReplyCommandGAVValuesCurrent
-		_parent, typeSwitchError = IdentifyReplyCommandGAVValuesCurrentParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandGAVValuesCurrentParse(readBuffer, attribute)
 	case attribute == Attribute_GAVValuesStored: // IdentifyReplyCommandGAVValuesStored
-		_parent, typeSwitchError = IdentifyReplyCommandGAVValuesStoredParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandGAVValuesStoredParse(readBuffer, attribute)
 	case attribute == Attribute_GAVPhysicalAddresses: // IdentifyReplyCommandGAVPhysicalAddresses
-		_parent, typeSwitchError = IdentifyReplyCommandGAVPhysicalAddressesParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandGAVPhysicalAddressesParse(readBuffer, attribute)
 	case attribute == Attribute_LogicalAssignment: // IdentifyReplyCommandLogicalAssignment
-		_parent, typeSwitchError = IdentifyReplyCommandLogicalAssignmentParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandLogicalAssignmentParse(readBuffer, attribute)
 	case attribute == Attribute_Delays: // IdentifyReplyCommandDelays
-		_parent, typeSwitchError = IdentifyReplyCommandDelaysParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandDelaysParse(readBuffer, attribute)
 	case attribute == Attribute_MinimumLevels: // IdentifyReplyCommandMinimumLevels
-		_parent, typeSwitchError = IdentifyReplyCommandMinimumLevelsParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandMinimumLevelsParse(readBuffer, attribute)
 	case attribute == Attribute_MaximumLevels: // IdentifyReplyCommandMaximumLevels
-		_parent, typeSwitchError = IdentifyReplyCommandMaximumLevelsParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandMaximumLevelsParse(readBuffer, attribute)
 	case attribute == Attribute_CurrentSenseLevels: // IdentifyReplyCommandCurrentSenseLevels
-		_parent, typeSwitchError = IdentifyReplyCommandCurrentSenseLevelsParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandCurrentSenseLevelsParse(readBuffer, attribute)
 	case attribute == Attribute_OutputUnitSummary: // IdentifyReplyCommandOutputUnitSummary
-		_parent, typeSwitchError = IdentifyReplyCommandOutputUnitSummaryParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandOutputUnitSummaryParse(readBuffer, attribute)
 	case attribute == Attribute_DSIStatus: // IdentifyReplyCommandDSIStatus
-		_parent, typeSwitchError = IdentifyReplyCommandDSIStatusParse(readBuffer, attribute)
+		_child, typeSwitchError = IdentifyReplyCommandDSIStatusParse(readBuffer, attribute)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -154,8 +158,8 @@ func IdentifyReplyCommandParse(readBuffer utils.ReadBuffer, attribute Attribute)
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *IdentifyReplyCommand) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandCurrentSenseLevels.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandCurrentSenseLevels.go
index d38becf..c4a9611 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandCurrentSenseLevels.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandCurrentSenseLevels.go
@@ -103,7 +103,7 @@ func (m *IdentifyReplyCommandCurrentSenseLevels) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandCurrentSenseLevelsParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandCurrentSenseLevelsParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandCurrentSenseLevels, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandCurrentSenseLevels"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func IdentifyReplyCommandCurrentSenseLevelsParse(readBuffer utils.ReadBuffer, at
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandCurrentSenseLevels) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDSIStatus.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDSIStatus.go
index 020f33d..8994649 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDSIStatus.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDSIStatus.go
@@ -223,7 +223,7 @@ func (m *IdentifyReplyCommandDSIStatus) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandDSIStatusParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandDSIStatusParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandDSIStatus, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandDSIStatus"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -373,7 +373,7 @@ func IdentifyReplyCommandDSIStatusParse(readBuffer utils.ReadBuffer, attribute A
 		IdentifyReplyCommand:    &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandDSIStatus) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDelays.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDelays.go
index 8302997..e8760e6 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDelays.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandDelays.go
@@ -103,7 +103,7 @@ func (m *IdentifyReplyCommandDelays) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandDelaysParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandDelaysParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandDelays, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandDelays"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func IdentifyReplyCommandDelaysParse(readBuffer utils.ReadBuffer, attribute Attr
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandDelays) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandExtendedDiagnosticSummary.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandExtendedDiagnosticSummary.go
index 163bee2..a9ab5e8 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandExtendedDiagnosticSummary.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandExtendedDiagnosticSummary.go
@@ -333,7 +333,7 @@ func (m *IdentifyReplyCommandExtendedDiagnosticSummary) GetLengthInBytes() uint1
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandExtendedDiagnosticSummaryParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandExtendedDiagnosticSummaryParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandExtendedDiagnosticSummary, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandExtendedDiagnosticSummary"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -555,7 +555,7 @@ func IdentifyReplyCommandExtendedDiagnosticSummaryParse(readBuffer utils.ReadBuf
 		IdentifyReplyCommand:   &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandExtendedDiagnosticSummary) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareSummary.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareSummary.go
index 3ad6eac..ffd562a 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareSummary.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareSummary.go
@@ -146,7 +146,7 @@ func (m *IdentifyReplyCommandFirmwareSummary) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandFirmwareSummaryParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandFirmwareSummaryParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandFirmwareSummary, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandFirmwareSummary"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -186,7 +186,7 @@ func IdentifyReplyCommandFirmwareSummaryParse(readBuffer utils.ReadBuffer, attri
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandFirmwareSummary) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareVersion.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareVersion.go
index bfa5238..9e4bc8d 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareVersion.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandFirmwareVersion.go
@@ -124,7 +124,7 @@ func (m *IdentifyReplyCommandFirmwareVersion) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandFirmwareVersionParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandFirmwareVersionParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandFirmwareVersion, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandFirmwareVersion"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -148,7 +148,7 @@ func IdentifyReplyCommandFirmwareVersionParse(readBuffer utils.ReadBuffer, attri
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandFirmwareVersion) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVPhysicalAddresses.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVPhysicalAddresses.go
index 37bf62b..55377fe 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVPhysicalAddresses.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVPhysicalAddresses.go
@@ -126,7 +126,7 @@ func (m *IdentifyReplyCommandGAVPhysicalAddresses) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandGAVPhysicalAddressesParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandGAVPhysicalAddressesParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandGAVPhysicalAddresses, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandGAVPhysicalAddresses"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -149,7 +149,7 @@ func IdentifyReplyCommandGAVPhysicalAddressesParse(readBuffer utils.ReadBuffer,
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandGAVPhysicalAddresses) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesCurrent.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesCurrent.go
index 82ae80c..93f8d12 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesCurrent.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesCurrent.go
@@ -126,7 +126,7 @@ func (m *IdentifyReplyCommandGAVValuesCurrent) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandGAVValuesCurrentParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandGAVValuesCurrentParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandGAVValuesCurrent, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandGAVValuesCurrent"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -149,7 +149,7 @@ func IdentifyReplyCommandGAVValuesCurrentParse(readBuffer utils.ReadBuffer, attr
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandGAVValuesCurrent) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesStored.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesStored.go
index 1be5ffe..787ce95 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesStored.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandGAVValuesStored.go
@@ -126,7 +126,7 @@ func (m *IdentifyReplyCommandGAVValuesStored) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandGAVValuesStoredParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandGAVValuesStoredParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandGAVValuesStored, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandGAVValuesStored"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -149,7 +149,7 @@ func IdentifyReplyCommandGAVValuesStoredParse(readBuffer utils.ReadBuffer, attri
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandGAVValuesStored) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandLogicalAssignment.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandLogicalAssignment.go
index 7fbe08e..2bbc682 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandLogicalAssignment.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandLogicalAssignment.go
@@ -103,7 +103,7 @@ func (m *IdentifyReplyCommandLogicalAssignment) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandLogicalAssignmentParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandLogicalAssignmentParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandLogicalAssignment, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandLogicalAssignment"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func IdentifyReplyCommandLogicalAssignmentParse(readBuffer utils.ReadBuffer, att
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandLogicalAssignment) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandManufacturer.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandManufacturer.go
index 85f51c7..bef84b8 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandManufacturer.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandManufacturer.go
@@ -124,7 +124,7 @@ func (m *IdentifyReplyCommandManufacturer) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandManufacturerParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandManufacturerParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandManufacturer, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandManufacturer"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -148,7 +148,7 @@ func IdentifyReplyCommandManufacturerParse(readBuffer utils.ReadBuffer, attribut
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandManufacturer) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMaximumLevels.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMaximumLevels.go
index 989eb87..7c25dff 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMaximumLevels.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMaximumLevels.go
@@ -103,7 +103,7 @@ func (m *IdentifyReplyCommandMaximumLevels) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandMaximumLevelsParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandMaximumLevelsParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandMaximumLevels, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandMaximumLevels"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func IdentifyReplyCommandMaximumLevelsParse(readBuffer utils.ReadBuffer, attribu
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandMaximumLevels) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMinimumLevels.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMinimumLevels.go
index 3bf868c..810810e 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMinimumLevels.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandMinimumLevels.go
@@ -103,7 +103,7 @@ func (m *IdentifyReplyCommandMinimumLevels) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandMinimumLevelsParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandMinimumLevelsParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandMinimumLevels, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandMinimumLevels"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func IdentifyReplyCommandMinimumLevelsParse(readBuffer utils.ReadBuffer, attribu
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandMinimumLevels) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkTerminalLevels.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkTerminalLevels.go
index 3612fb0..3587662 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkTerminalLevels.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkTerminalLevels.go
@@ -103,7 +103,7 @@ func (m *IdentifyReplyCommandNetworkTerminalLevels) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandNetworkTerminalLevelsParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandNetworkTerminalLevelsParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandNetworkTerminalLevels, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandNetworkTerminalLevels"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func IdentifyReplyCommandNetworkTerminalLevelsParse(readBuffer utils.ReadBuffer,
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandNetworkTerminalLevels) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkVoltage.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkVoltage.go
index 55d149b..70f2f6f 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkVoltage.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandNetworkVoltage.go
@@ -146,7 +146,7 @@ func (m *IdentifyReplyCommandNetworkVoltage) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandNetworkVoltageParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandNetworkVoltageParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandNetworkVoltage, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandNetworkVoltage"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -196,7 +196,7 @@ func IdentifyReplyCommandNetworkVoltageParse(readBuffer utils.ReadBuffer, attrib
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandNetworkVoltage) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandOutputUnitSummary.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandOutputUnitSummary.go
index 4272cda..1b162a8 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandOutputUnitSummary.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandOutputUnitSummary.go
@@ -103,7 +103,7 @@ func (m *IdentifyReplyCommandOutputUnitSummary) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandOutputUnitSummaryParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandOutputUnitSummaryParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandOutputUnitSummary, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandOutputUnitSummary"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func IdentifyReplyCommandOutputUnitSummaryParse(readBuffer utils.ReadBuffer, att
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandOutputUnitSummary) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandTerminalLevels.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandTerminalLevels.go
index 43c1004..fe97732 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandTerminalLevels.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandTerminalLevels.go
@@ -103,7 +103,7 @@ func (m *IdentifyReplyCommandTerminalLevels) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandTerminalLevelsParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandTerminalLevelsParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandTerminalLevels, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandTerminalLevels"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func IdentifyReplyCommandTerminalLevelsParse(readBuffer utils.ReadBuffer, attrib
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandTerminalLevels) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandType.go b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandType.go
index 503d7ab..ccf6008 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandType.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/IdentifyReplyCommandType.go
@@ -124,7 +124,7 @@ func (m *IdentifyReplyCommandType) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func IdentifyReplyCommandTypeParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommand, error) {
+func IdentifyReplyCommandTypeParse(readBuffer utils.ReadBuffer, attribute Attribute) (*IdentifyReplyCommandType, error) {
 	if pullErr := readBuffer.PullContext("IdentifyReplyCommandType"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -148,7 +148,7 @@ func IdentifyReplyCommandTypeParse(readBuffer utils.ReadBuffer, attribute Attrib
 		IdentifyReplyCommand: &IdentifyReplyCommand{},
 	}
 	_child.IdentifyReplyCommand.Child = _child
-	return _child.IdentifyReplyCommand, nil
+	return _child, nil
 }
 
 func (m *IdentifyReplyCommandType) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSAL.go b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSAL.go
index 392d1a2..bb6e464 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSAL.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSAL.go
@@ -149,13 +149,17 @@ func MonitoredSALParse(readBuffer utils.ReadBuffer) (*MonitoredSAL, error) {
 	readBuffer.Reset(currentPos)
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *MonitoredSAL
+	type MonitoredSALChild interface {
+		InitializeParent(*MonitoredSAL, byte, *SALData)
+		GetParent() *MonitoredSAL
+	}
+	var _child MonitoredSALChild
 	var typeSwitchError error
 	switch {
 	case salType == 0x05: // MonitoredSALLongFormSmartMode
-		_parent, typeSwitchError = MonitoredSALLongFormSmartModeParse(readBuffer)
+		_child, typeSwitchError = MonitoredSALLongFormSmartModeParse(readBuffer)
 	case true: // MonitoredSALShortFormBasicMode
-		_parent, typeSwitchError = MonitoredSALShortFormBasicModeParse(readBuffer)
+		_child, typeSwitchError = MonitoredSALShortFormBasicModeParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -208,8 +212,8 @@ func MonitoredSALParse(readBuffer utils.ReadBuffer) (*MonitoredSAL, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, salType, salData)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), salType, salData)
+	return _child.GetParent(), nil
 }
 
 func (m *MonitoredSAL) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALLongFormSmartMode.go b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALLongFormSmartMode.go
index 95b74f4..ce69903 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALLongFormSmartMode.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALLongFormSmartMode.go
@@ -212,7 +212,7 @@ func (m *MonitoredSALLongFormSmartMode) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func MonitoredSALLongFormSmartModeParse(readBuffer utils.ReadBuffer) (*MonitoredSAL, error) {
+func MonitoredSALLongFormSmartModeParse(readBuffer utils.ReadBuffer) (*MonitoredSALLongFormSmartMode, error) {
 	if pullErr := readBuffer.PullContext("MonitoredSALLongFormSmartMode"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -353,7 +353,7 @@ func MonitoredSALLongFormSmartModeParse(readBuffer utils.ReadBuffer) (*Monitored
 		MonitoredSAL:           &MonitoredSAL{},
 	}
 	_child.MonitoredSAL.Child = _child
-	return _child.MonitoredSAL, nil
+	return _child, nil
 }
 
 func (m *MonitoredSALLongFormSmartMode) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALReply.go
index 60d15e9..9d2530f 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALReply.go
@@ -122,7 +122,7 @@ func (m *MonitoredSALReply) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func MonitoredSALReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
+func MonitoredSALReplyParse(readBuffer utils.ReadBuffer) (*MonitoredSALReply, error) {
 	if pullErr := readBuffer.PullContext("MonitoredSALReply"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func MonitoredSALReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
 		Reply: &Reply{},
 	}
 	_child.Reply.Child = _child
-	return _child.Reply, nil
+	return _child, nil
 }
 
 func (m *MonitoredSALReply) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALShortFormBasicMode.go b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALShortFormBasicMode.go
index c0fc1ee..da6962e 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALShortFormBasicMode.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/MonitoredSALShortFormBasicMode.go
@@ -171,7 +171,7 @@ func (m *MonitoredSALShortFormBasicMode) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func MonitoredSALShortFormBasicModeParse(readBuffer utils.ReadBuffer) (*MonitoredSAL, error) {
+func MonitoredSALShortFormBasicModeParse(readBuffer utils.ReadBuffer) (*MonitoredSALShortFormBasicMode, error) {
 	if pullErr := readBuffer.PullContext("MonitoredSALShortFormBasicMode"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -266,7 +266,7 @@ func MonitoredSALShortFormBasicModeParse(readBuffer utils.ReadBuffer) (*Monitore
 		MonitoredSAL:  &MonitoredSAL{},
 	}
 	_child.MonitoredSAL.Child = _child
-	return _child.MonitoredSAL, nil
+	return _child, nil
 }
 
 func (m *MonitoredSALShortFormBasicMode) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedCorruption.go b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedCorruption.go
index 034e76f..1fc2578 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedCorruption.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedCorruption.go
@@ -105,7 +105,7 @@ func (m *NotTransmittedCorruption) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NotTransmittedCorruptionParse(readBuffer utils.ReadBuffer) (*Confirmation, error) {
+func NotTransmittedCorruptionParse(readBuffer utils.ReadBuffer) (*NotTransmittedCorruption, error) {
 	if pullErr := readBuffer.PullContext("NotTransmittedCorruption"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -121,7 +121,7 @@ func NotTransmittedCorruptionParse(readBuffer utils.ReadBuffer) (*Confirmation,
 		Confirmation: &Confirmation{},
 	}
 	_child.Confirmation.Child = _child
-	return _child.Confirmation, nil
+	return _child, nil
 }
 
 func (m *NotTransmittedCorruption) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedSyncLoss.go b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedSyncLoss.go
index a92aa27..1206ead 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedSyncLoss.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedSyncLoss.go
@@ -105,7 +105,7 @@ func (m *NotTransmittedSyncLoss) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NotTransmittedSyncLossParse(readBuffer utils.ReadBuffer) (*Confirmation, error) {
+func NotTransmittedSyncLossParse(readBuffer utils.ReadBuffer) (*NotTransmittedSyncLoss, error) {
 	if pullErr := readBuffer.PullContext("NotTransmittedSyncLoss"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -121,7 +121,7 @@ func NotTransmittedSyncLossParse(readBuffer utils.ReadBuffer) (*Confirmation, er
 		Confirmation: &Confirmation{},
 	}
 	_child.Confirmation.Child = _child
-	return _child.Confirmation, nil
+	return _child, nil
 }
 
 func (m *NotTransmittedSyncLoss) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedToManyReTransmissions.go b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedToManyReTransmissions.go
index 38ee814..70c5fc9 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedToManyReTransmissions.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedToManyReTransmissions.go
@@ -105,7 +105,7 @@ func (m *NotTransmittedToManyReTransmissions) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NotTransmittedToManyReTransmissionsParse(readBuffer utils.ReadBuffer) (*Confirmation, error) {
+func NotTransmittedToManyReTransmissionsParse(readBuffer utils.ReadBuffer) (*NotTransmittedToManyReTransmissions, error) {
 	if pullErr := readBuffer.PullContext("NotTransmittedToManyReTransmissions"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -121,7 +121,7 @@ func NotTransmittedToManyReTransmissionsParse(readBuffer utils.ReadBuffer) (*Con
 		Confirmation: &Confirmation{},
 	}
 	_child.Confirmation.Child = _child
-	return _child.Confirmation, nil
+	return _child, nil
 }
 
 func (m *NotTransmittedToManyReTransmissions) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedTooLong.go b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedTooLong.go
index 37db73f..b28db52 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedTooLong.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/NotTransmittedTooLong.go
@@ -105,7 +105,7 @@ func (m *NotTransmittedTooLong) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func NotTransmittedTooLongParse(readBuffer utils.ReadBuffer) (*Confirmation, error) {
+func NotTransmittedTooLongParse(readBuffer utils.ReadBuffer) (*NotTransmittedTooLong, error) {
 	if pullErr := readBuffer.PullContext("NotTransmittedTooLong"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -121,7 +121,7 @@ func NotTransmittedTooLongParse(readBuffer utils.ReadBuffer) (*Confirmation, err
 		Confirmation: &Confirmation{},
 	}
 	_child.Confirmation.Child = _child
-	return _child.Confirmation, nil
+	return _child, nil
 }
 
 func (m *NotTransmittedTooLong) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/ParameterChangeReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/ParameterChangeReply.go
index e448f1e..7cfe0c3 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/ParameterChangeReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/ParameterChangeReply.go
@@ -122,7 +122,7 @@ func (m *ParameterChangeReply) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func ParameterChangeReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
+func ParameterChangeReplyParse(readBuffer utils.ReadBuffer) (*ParameterChangeReply, error) {
 	if pullErr := readBuffer.PullContext("ParameterChangeReply"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func ParameterChangeReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
 		Reply: &Reply{},
 	}
 	_child.Reply.Child = _child
-	return _child.Reply, nil
+	return _child, nil
 }
 
 func (m *ParameterChangeReply) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/PowerUpReply.go b/plc4go/internal/plc4go/cbus/readwrite/model/PowerUpReply.go
index d89434a..2edea72 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/PowerUpReply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/PowerUpReply.go
@@ -122,7 +122,7 @@ func (m *PowerUpReply) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func PowerUpReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
+func PowerUpReplyParse(readBuffer utils.ReadBuffer) (*PowerUpReply, error) {
 	if pullErr := readBuffer.PullContext("PowerUpReply"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func PowerUpReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
 		Reply: &Reply{},
 	}
 	_child.Reply.Child = _child
-	return _child.Reply, nil
+	return _child, nil
 }
 
 func (m *PowerUpReply) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/Reply.go b/plc4go/internal/plc4go/cbus/readwrite/model/Reply.go
index e29858f..2c48198 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/Reply.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/Reply.go
@@ -125,21 +125,25 @@ func ReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
 	readBuffer.Reset(currentPos)
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *Reply
+	type ReplyChild interface {
+		InitializeParent(*Reply, byte)
+		GetParent() *Reply
+	}
+	var _child ReplyChild
 	var typeSwitchError error
 	switch {
 	case magicByte == 0x0: // CALReplyReply
-		_parent, typeSwitchError = CALReplyReplyParse(readBuffer)
+		_child, typeSwitchError = CALReplyReplyParse(readBuffer)
 	case magicByte == 0x0: // MonitoredSALReply
-		_parent, typeSwitchError = MonitoredSALReplyParse(readBuffer)
+		_child, typeSwitchError = MonitoredSALReplyParse(readBuffer)
 	case magicByte == 0x0: // ConfirmationReply
-		_parent, typeSwitchError = ConfirmationReplyParse(readBuffer)
+		_child, typeSwitchError = ConfirmationReplyParse(readBuffer)
 	case magicByte == 0x0: // PowerUpReply
-		_parent, typeSwitchError = PowerUpReplyParse(readBuffer)
+		_child, typeSwitchError = PowerUpReplyParse(readBuffer)
 	case magicByte == 0x0: // ParameterChangeReply
-		_parent, typeSwitchError = ParameterChangeReplyParse(readBuffer)
+		_child, typeSwitchError = ParameterChangeReplyParse(readBuffer)
 	case magicByte == 0x0: // ExclamationMarkReply
-		_parent, typeSwitchError = ExclamationMarkReplyParse(readBuffer)
+		_child, typeSwitchError = ExclamationMarkReplyParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -153,8 +157,8 @@ func ReplyParse(readBuffer utils.ReadBuffer) (*Reply, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, magicByte)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), magicByte)
+	return _child.GetParent(), nil
 }
 
 func (m *Reply) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/SALData.go b/plc4go/internal/plc4go/cbus/readwrite/model/SALData.go
index 5d5da0b..0004f06 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/SALData.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/SALData.go
@@ -153,17 +153,21 @@ func SALDataParse(readBuffer utils.ReadBuffer) (*SALData, error) {
 	_ = commandType
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *SALData
+	type SALDataChild interface {
+		InitializeParent(*SALData, SALCommandTypeContainer)
+		GetParent() *SALData
+	}
+	var _child SALDataChild
 	var typeSwitchError error
 	switch {
 	case commandType == SALCommandType_OFF: // SALDataOff
-		_parent, typeSwitchError = SALDataOffParse(readBuffer)
+		_child, typeSwitchError = SALDataOffParse(readBuffer)
 	case commandType == SALCommandType_ON: // SALDataOn
-		_parent, typeSwitchError = SALDataOnParse(readBuffer)
+		_child, typeSwitchError = SALDataOnParse(readBuffer)
 	case commandType == SALCommandType_RAMP_TO_LEVEL: // SALDataRampToLevel
-		_parent, typeSwitchError = SALDataRampToLevelParse(readBuffer)
+		_child, typeSwitchError = SALDataRampToLevelParse(readBuffer)
 	case commandType == SALCommandType_TERMINATE_RAMP: // SALDataTerminateRamp
-		_parent, typeSwitchError = SALDataTerminateRampParse(readBuffer)
+		_child, typeSwitchError = SALDataTerminateRampParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -177,8 +181,8 @@ func SALDataParse(readBuffer utils.ReadBuffer) (*SALData, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, commandTypeContainer)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), commandTypeContainer)
+	return _child.GetParent(), nil
 }
 
 func (m *SALData) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOff.go b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOff.go
index 1da4d0d..17d3d00 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOff.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOff.go
@@ -122,7 +122,7 @@ func (m *SALDataOff) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SALDataOffParse(readBuffer utils.ReadBuffer) (*SALData, error) {
+func SALDataOffParse(readBuffer utils.ReadBuffer) (*SALDataOff, error) {
 	if pullErr := readBuffer.PullContext("SALDataOff"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -146,7 +146,7 @@ func SALDataOffParse(readBuffer utils.ReadBuffer) (*SALData, error) {
 		SALData: &SALData{},
 	}
 	_child.SALData.Child = _child
-	return _child.SALData, nil
+	return _child, nil
 }
 
 func (m *SALDataOff) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOn.go b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOn.go
index 2af0dcf..ccd7713 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOn.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataOn.go
@@ -122,7 +122,7 @@ func (m *SALDataOn) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SALDataOnParse(readBuffer utils.ReadBuffer) (*SALData, error) {
+func SALDataOnParse(readBuffer utils.ReadBuffer) (*SALDataOn, error) {
 	if pullErr := readBuffer.PullContext("SALDataOn"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -146,7 +146,7 @@ func SALDataOnParse(readBuffer utils.ReadBuffer) (*SALData, error) {
 		SALData: &SALData{},
 	}
 	_child.SALData.Child = _child
-	return _child.SALData, nil
+	return _child, nil
 }
 
 func (m *SALDataOn) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataRampToLevel.go b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataRampToLevel.go
index aba1214..74e969e 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataRampToLevel.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataRampToLevel.go
@@ -133,7 +133,7 @@ func (m *SALDataRampToLevel) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SALDataRampToLevelParse(readBuffer utils.ReadBuffer) (*SALData, error) {
+func SALDataRampToLevelParse(readBuffer utils.ReadBuffer) (*SALDataRampToLevel, error) {
 	if pullErr := readBuffer.PullContext("SALDataRampToLevel"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -165,7 +165,7 @@ func SALDataRampToLevelParse(readBuffer utils.ReadBuffer) (*SALData, error) {
 		SALData: &SALData{},
 	}
 	_child.SALData.Child = _child
-	return _child.SALData, nil
+	return _child, nil
 }
 
 func (m *SALDataRampToLevel) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataTerminateRamp.go b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataTerminateRamp.go
index 3312cce..16321e2 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/SALDataTerminateRamp.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/SALDataTerminateRamp.go
@@ -122,7 +122,7 @@ func (m *SALDataTerminateRamp) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SALDataTerminateRampParse(readBuffer utils.ReadBuffer) (*SALData, error) {
+func SALDataTerminateRampParse(readBuffer utils.ReadBuffer) (*SALDataTerminateRamp, error) {
 	if pullErr := readBuffer.PullContext("SALDataTerminateRamp"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -146,7 +146,7 @@ func SALDataTerminateRampParse(readBuffer utils.ReadBuffer) (*SALData, error) {
 		SALData: &SALData{},
 	}
 	_child.SALData.Child = _child
-	return _child.SALData, nil
+	return _child, nil
 }
 
 func (m *SALDataTerminateRamp) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequest.go b/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequest.go
index 28b9603..5d68cfc 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequest.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequest.go
@@ -125,13 +125,17 @@ func StatusRequestParse(readBuffer utils.ReadBuffer) (*StatusRequest, error) {
 	readBuffer.Reset(currentPos)
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *StatusRequest
+	type StatusRequestChild interface {
+		InitializeParent(*StatusRequest, byte)
+		GetParent() *StatusRequest
+	}
+	var _child StatusRequestChild
 	var typeSwitchError error
 	switch {
 	case statusType == 0x7A: // StatusRequestBinaryState
-		_parent, typeSwitchError = StatusRequestBinaryStateParse(readBuffer)
+		_child, typeSwitchError = StatusRequestBinaryStateParse(readBuffer)
 	case statusType == 0x73: // StatusRequestLevel
-		_parent, typeSwitchError = StatusRequestLevelParse(readBuffer)
+		_child, typeSwitchError = StatusRequestLevelParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -145,8 +149,8 @@ func StatusRequestParse(readBuffer utils.ReadBuffer) (*StatusRequest, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, statusType)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), statusType)
+	return _child.GetParent(), nil
 }
 
 func (m *StatusRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestBinaryState.go b/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestBinaryState.go
index b788faf..fffba19 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestBinaryState.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestBinaryState.go
@@ -129,7 +129,7 @@ func (m *StatusRequestBinaryState) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func StatusRequestBinaryStateParse(readBuffer utils.ReadBuffer) (*StatusRequest, error) {
+func StatusRequestBinaryStateParse(readBuffer utils.ReadBuffer) (*StatusRequestBinaryState, error) {
 	if pullErr := readBuffer.PullContext("StatusRequestBinaryState"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -181,7 +181,7 @@ func StatusRequestBinaryStateParse(readBuffer utils.ReadBuffer) (*StatusRequest,
 		StatusRequest: &StatusRequest{},
 	}
 	_child.StatusRequest.Child = _child
-	return _child.StatusRequest, nil
+	return _child, nil
 }
 
 func (m *StatusRequestBinaryState) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestLevel.go b/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestLevel.go
index 3d59059..ee2fc88 100644
--- a/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestLevel.go
+++ b/plc4go/internal/plc4go/cbus/readwrite/model/StatusRequestLevel.go
@@ -140,7 +140,7 @@ func (m *StatusRequestLevel) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func StatusRequestLevelParse(readBuffer utils.ReadBuffer) (*StatusRequest, error) {
+func StatusRequestLevelParse(readBuffer utils.ReadBuffer) (*StatusRequestLevel, error) {
 	if pullErr := readBuffer.PullContext("StatusRequestLevel"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -205,7 +205,7 @@ func StatusRequestLevelParse(readBuffer utils.ReadBuffer) (*StatusRequest, error
 		StatusRequest:             &StatusRequest{},
 	}
 	_child.StatusRequest.Child = _child
-	return _child.StatusRequest, nil
+	return _child, nil
 }
 
 func (m *StatusRequestLevel) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1Command.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1Command.go
index fc9d364..42892bd 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1Command.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1Command.go
@@ -153,13 +153,17 @@ func DF1CommandParse(readBuffer utils.ReadBuffer) (*DF1Command, error) {
 	transactionCounter := _transactionCounter
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *DF1Command
+	type DF1CommandChild interface {
+		InitializeParent(*DF1Command, uint8, uint16)
+		GetParent() *DF1Command
+	}
+	var _child DF1CommandChild
 	var typeSwitchError error
 	switch {
 	case commandCode == 0x01: // DF1UnprotectedReadRequest
-		_parent, typeSwitchError = DF1UnprotectedReadRequestParse(readBuffer)
+		_child, typeSwitchError = DF1UnprotectedReadRequestParse(readBuffer)
 	case commandCode == 0x41: // DF1UnprotectedReadResponse
-		_parent, typeSwitchError = DF1UnprotectedReadResponseParse(readBuffer)
+		_child, typeSwitchError = DF1UnprotectedReadResponseParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -173,8 +177,8 @@ func DF1CommandParse(readBuffer utils.ReadBuffer) (*DF1Command, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, status, transactionCounter)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), status, transactionCounter)
+	return _child.GetParent(), nil
 }
 
 func (m *DF1Command) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1Symbol.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1Symbol.go
index 77b0ea0..b307bfc 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1Symbol.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1Symbol.go
@@ -126,15 +126,19 @@ func DF1SymbolParse(readBuffer utils.ReadBuffer) (*DF1Symbol, error) {
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *DF1Symbol
+	type DF1SymbolChild interface {
+		InitializeParent(*DF1Symbol)
+		GetParent() *DF1Symbol
+	}
+	var _child DF1SymbolChild
 	var typeSwitchError error
 	switch {
 	case symbolType == 0x02: // DF1SymbolMessageFrame
-		_parent, typeSwitchError = DF1SymbolMessageFrameParse(readBuffer)
+		_child, typeSwitchError = DF1SymbolMessageFrameParse(readBuffer)
 	case symbolType == 0x06: // DF1SymbolMessageFrameACK
-		_parent, typeSwitchError = DF1SymbolMessageFrameACKParse(readBuffer)
+		_child, typeSwitchError = DF1SymbolMessageFrameACKParse(readBuffer)
 	case symbolType == 0x15: // DF1SymbolMessageFrameNAK
-		_parent, typeSwitchError = DF1SymbolMessageFrameNAKParse(readBuffer)
+		_child, typeSwitchError = DF1SymbolMessageFrameNAKParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -148,8 +152,8 @@ func DF1SymbolParse(readBuffer utils.ReadBuffer) (*DF1Symbol, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *DF1Symbol) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrame.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrame.go
index f25af03..7b26f28 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrame.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrame.go
@@ -160,7 +160,7 @@ func (m *DF1SymbolMessageFrame) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func DF1SymbolMessageFrameParse(readBuffer utils.ReadBuffer) (*DF1Symbol, error) {
+func DF1SymbolMessageFrameParse(readBuffer utils.ReadBuffer) (*DF1SymbolMessageFrame, error) {
 	if pullErr := readBuffer.PullContext("DF1SymbolMessageFrame"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -236,7 +236,7 @@ func DF1SymbolMessageFrameParse(readBuffer utils.ReadBuffer) (*DF1Symbol, error)
 		DF1Symbol:          &DF1Symbol{},
 	}
 	_child.DF1Symbol.Child = _child
-	return _child.DF1Symbol, nil
+	return _child, nil
 }
 
 func (m *DF1SymbolMessageFrame) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameACK.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameACK.go
index d2b0150..6d7748d 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameACK.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameACK.go
@@ -103,7 +103,7 @@ func (m *DF1SymbolMessageFrameACK) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func DF1SymbolMessageFrameACKParse(readBuffer utils.ReadBuffer) (*DF1Symbol, error) {
+func DF1SymbolMessageFrameACKParse(readBuffer utils.ReadBuffer) (*DF1SymbolMessageFrameACK, error) {
 	if pullErr := readBuffer.PullContext("DF1SymbolMessageFrameACK"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func DF1SymbolMessageFrameACKParse(readBuffer utils.ReadBuffer) (*DF1Symbol, err
 		DF1Symbol: &DF1Symbol{},
 	}
 	_child.DF1Symbol.Child = _child
-	return _child.DF1Symbol, nil
+	return _child, nil
 }
 
 func (m *DF1SymbolMessageFrameACK) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameNAK.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameNAK.go
index 352adfb..9186432 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameNAK.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1SymbolMessageFrameNAK.go
@@ -103,7 +103,7 @@ func (m *DF1SymbolMessageFrameNAK) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func DF1SymbolMessageFrameNAKParse(readBuffer utils.ReadBuffer) (*DF1Symbol, error) {
+func DF1SymbolMessageFrameNAKParse(readBuffer utils.ReadBuffer) (*DF1SymbolMessageFrameNAK, error) {
 	if pullErr := readBuffer.PullContext("DF1SymbolMessageFrameNAK"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func DF1SymbolMessageFrameNAKParse(readBuffer utils.ReadBuffer) (*DF1Symbol, err
 		DF1Symbol: &DF1Symbol{},
 	}
 	_child.DF1Symbol.Child = _child
-	return _child.DF1Symbol, nil
+	return _child, nil
 }
 
 func (m *DF1SymbolMessageFrameNAK) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadRequest.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadRequest.go
index 4ddd266..155d708 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadRequest.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadRequest.go
@@ -138,7 +138,7 @@ func (m *DF1UnprotectedReadRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func DF1UnprotectedReadRequestParse(readBuffer utils.ReadBuffer) (*DF1Command, error) {
+func DF1UnprotectedReadRequestParse(readBuffer utils.ReadBuffer) (*DF1UnprotectedReadRequest, error) {
 	if pullErr := readBuffer.PullContext("DF1UnprotectedReadRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -170,7 +170,7 @@ func DF1UnprotectedReadRequestParse(readBuffer utils.ReadBuffer) (*DF1Command, e
 		DF1Command: &DF1Command{},
 	}
 	_child.DF1Command.Child = _child
-	return _child.DF1Command, nil
+	return _child, nil
 }
 
 func (m *DF1UnprotectedReadRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadResponse.go b/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadResponse.go
index 3b26a0d..1ff0af3 100644
--- a/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadResponse.go
+++ b/plc4go/internal/plc4go/df1/readwrite/model/DF1UnprotectedReadResponse.go
@@ -127,7 +127,7 @@ func (m *DF1UnprotectedReadResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func DF1UnprotectedReadResponseParse(readBuffer utils.ReadBuffer) (*DF1Command, error) {
+func DF1UnprotectedReadResponseParse(readBuffer utils.ReadBuffer) (*DF1UnprotectedReadResponse, error) {
 	if pullErr := readBuffer.PullContext("DF1UnprotectedReadResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -162,7 +162,7 @@ func DF1UnprotectedReadResponseParse(readBuffer utils.ReadBuffer) (*DF1Command,
 		DF1Command: &DF1Command{},
 	}
 	_child.DF1Command.Child = _child
-	return _child.DF1Command, nil
+	return _child, nil
 }
 
 func (m *DF1UnprotectedReadResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipRRData.go b/plc4go/internal/plc4go/eip/readwrite/model/CipRRData.go
index 906593e..5423cfc 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipRRData.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipRRData.go
@@ -139,7 +139,7 @@ func (m *CipRRData) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CipRRDataParse(readBuffer utils.ReadBuffer, len uint16) (*EipPacket, error) {
+func CipRRDataParse(readBuffer utils.ReadBuffer, len uint16) (*CipRRData, error) {
 	if pullErr := readBuffer.PullContext("CipRRData"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -197,7 +197,7 @@ func CipRRDataParse(readBuffer utils.ReadBuffer, len uint16) (*EipPacket, error)
 		EipPacket: &EipPacket{},
 	}
 	_child.EipPacket.Child = _child
-	return _child.EipPacket, nil
+	return _child, nil
 }
 
 func (m *CipRRData) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipReadRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/CipReadRequest.go
index 19b9c7c..882aae7 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipReadRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipReadRequest.go
@@ -151,7 +151,7 @@ func (m *CipReadRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CipReadRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipService, error) {
+func CipReadRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipReadRequest, error) {
 	if pullErr := readBuffer.PullContext("CipReadRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -190,7 +190,7 @@ func CipReadRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipSe
 		CipService:      &CipService{},
 	}
 	_child.CipService.Child = _child
-	return _child.CipService, nil
+	return _child, nil
 }
 
 func (m *CipReadRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipReadResponse.go b/plc4go/internal/plc4go/eip/readwrite/model/CipReadResponse.go
index da2d70e..2218a6f 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipReadResponse.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipReadResponse.go
@@ -166,7 +166,7 @@ func (m *CipReadResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CipReadResponseParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipService, error) {
+func CipReadResponseParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipReadResponse, error) {
 	if pullErr := readBuffer.PullContext("CipReadResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -233,7 +233,7 @@ func CipReadResponseParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipS
 		CipService: &CipService{},
 	}
 	_child.CipService.Child = _child
-	return _child.CipService, nil
+	return _child, nil
 }
 
 func (m *CipReadResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipService.go b/plc4go/internal/plc4go/eip/readwrite/model/CipService.go
index 9bdc7ae..5f24f0b 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipService.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipService.go
@@ -113,23 +113,27 @@ func CipServiceParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipServic
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *CipService
+	type CipServiceChild interface {
+		InitializeParent(*CipService)
+		GetParent() *CipService
+	}
+	var _child CipServiceChild
 	var typeSwitchError error
 	switch {
 	case service == 0x4C: // CipReadRequest
-		_parent, typeSwitchError = CipReadRequestParse(readBuffer, serviceLen)
+		_child, typeSwitchError = CipReadRequestParse(readBuffer, serviceLen)
 	case service == 0xCC: // CipReadResponse
-		_parent, typeSwitchError = CipReadResponseParse(readBuffer, serviceLen)
+		_child, typeSwitchError = CipReadResponseParse(readBuffer, serviceLen)
 	case service == 0x4D: // CipWriteRequest
-		_parent, typeSwitchError = CipWriteRequestParse(readBuffer, serviceLen)
+		_child, typeSwitchError = CipWriteRequestParse(readBuffer, serviceLen)
 	case service == 0xCD: // CipWriteResponse
-		_parent, typeSwitchError = CipWriteResponseParse(readBuffer, serviceLen)
+		_child, typeSwitchError = CipWriteResponseParse(readBuffer, serviceLen)
 	case service == 0x0A: // MultipleServiceRequest
-		_parent, typeSwitchError = MultipleServiceRequestParse(readBuffer, serviceLen)
+		_child, typeSwitchError = MultipleServiceRequestParse(readBuffer, serviceLen)
 	case service == 0x8A: // MultipleServiceResponse
-		_parent, typeSwitchError = MultipleServiceResponseParse(readBuffer, serviceLen)
+		_child, typeSwitchError = MultipleServiceResponseParse(readBuffer, serviceLen)
 	case service == 0x52: // CipUnconnectedRequest
-		_parent, typeSwitchError = CipUnconnectedRequestParse(readBuffer, serviceLen)
+		_child, typeSwitchError = CipUnconnectedRequestParse(readBuffer, serviceLen)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -143,8 +147,8 @@ func CipServiceParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipServic
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *CipService) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipUnconnectedRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/CipUnconnectedRequest.go
index f7977d1..dfd0fa0 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipUnconnectedRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipUnconnectedRequest.go
@@ -178,7 +178,7 @@ func (m *CipUnconnectedRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CipUnconnectedRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipService, error) {
+func CipUnconnectedRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipUnconnectedRequest, error) {
 	if pullErr := readBuffer.PullContext("CipUnconnectedRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -324,7 +324,7 @@ func CipUnconnectedRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16)
 		CipService:         &CipService{},
 	}
 	_child.CipService.Child = _child
-	return _child.CipService, nil
+	return _child, nil
 }
 
 func (m *CipUnconnectedRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipWriteRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/CipWriteRequest.go
index cfe8490..00c1553 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipWriteRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipWriteRequest.go
@@ -175,7 +175,7 @@ func (m *CipWriteRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CipWriteRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipService, error) {
+func CipWriteRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipWriteRequest, error) {
 	if pullErr := readBuffer.PullContext("CipWriteRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -235,7 +235,7 @@ func CipWriteRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipS
 		CipService:      &CipService{},
 	}
 	_child.CipService.Child = _child
-	return _child.CipService, nil
+	return _child, nil
 }
 
 func (m *CipWriteRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/CipWriteResponse.go b/plc4go/internal/plc4go/eip/readwrite/model/CipWriteResponse.go
index fdf9d12..1762973 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/CipWriteResponse.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/CipWriteResponse.go
@@ -142,7 +142,7 @@ func (m *CipWriteResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func CipWriteResponseParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipService, error) {
+func CipWriteResponseParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipWriteResponse, error) {
 	if pullErr := readBuffer.PullContext("CipWriteResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -188,7 +188,7 @@ func CipWriteResponseParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*Cip
 		CipService: &CipService{},
 	}
 	_child.CipService.Child = _child
-	return _child.CipService, nil
+	return _child, nil
 }
 
 func (m *CipWriteResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/EipConnectionRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/EipConnectionRequest.go
index 29db91f..18a1551 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/EipConnectionRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/EipConnectionRequest.go
@@ -120,7 +120,7 @@ func (m *EipConnectionRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func EipConnectionRequestParse(readBuffer utils.ReadBuffer) (*EipPacket, error) {
+func EipConnectionRequestParse(readBuffer utils.ReadBuffer) (*EipConnectionRequest, error) {
 	if pullErr := readBuffer.PullContext("EipConnectionRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -154,7 +154,7 @@ func EipConnectionRequestParse(readBuffer utils.ReadBuffer) (*EipPacket, error)
 		EipPacket: &EipPacket{},
 	}
 	_child.EipPacket.Child = _child
-	return _child.EipPacket, nil
+	return _child, nil
 }
 
 func (m *EipConnectionRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/EipDisconnectRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/EipDisconnectRequest.go
index 213462a..dfb377d 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/EipDisconnectRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/EipDisconnectRequest.go
@@ -108,7 +108,7 @@ func (m *EipDisconnectRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func EipDisconnectRequestParse(readBuffer utils.ReadBuffer) (*EipPacket, error) {
+func EipDisconnectRequestParse(readBuffer utils.ReadBuffer) (*EipDisconnectRequest, error) {
 	if pullErr := readBuffer.PullContext("EipDisconnectRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -124,7 +124,7 @@ func EipDisconnectRequestParse(readBuffer utils.ReadBuffer) (*EipPacket, error)
 		EipPacket: &EipPacket{},
 	}
 	_child.EipPacket.Child = _child
-	return _child.EipPacket, nil
+	return _child, nil
 }
 
 func (m *EipDisconnectRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/EipPacket.go b/plc4go/internal/plc4go/eip/readwrite/model/EipPacket.go
index 84c4fad..aeda675 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/EipPacket.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/EipPacket.go
@@ -211,15 +211,19 @@ func EipPacketParse(readBuffer utils.ReadBuffer) (*EipPacket, error) {
 	options := _options
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *EipPacket
+	type EipPacketChild interface {
+		InitializeParent(*EipPacket, uint32, uint32, []uint8, uint32)
+		GetParent() *EipPacket
+	}
+	var _child EipPacketChild
 	var typeSwitchError error
 	switch {
 	case command == 0x0065: // EipConnectionRequest
-		_parent, typeSwitchError = EipConnectionRequestParse(readBuffer)
+		_child, typeSwitchError = EipConnectionRequestParse(readBuffer)
 	case command == 0x0066: // EipDisconnectRequest
-		_parent, typeSwitchError = EipDisconnectRequestParse(readBuffer)
+		_child, typeSwitchError = EipDisconnectRequestParse(readBuffer)
 	case command == 0x006F: // CipRRData
-		_parent, typeSwitchError = CipRRDataParse(readBuffer, len)
+		_child, typeSwitchError = CipRRDataParse(readBuffer, len)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -233,8 +237,8 @@ func EipPacketParse(readBuffer utils.ReadBuffer) (*EipPacket, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, sessionHandle, status, senderContext, options)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), sessionHandle, status, senderContext, options)
+	return _child.GetParent(), nil
 }
 
 func (m *EipPacket) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceRequest.go b/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceRequest.go
index 4e54c7b..6c4ade2 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceRequest.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceRequest.go
@@ -138,7 +138,7 @@ func (m *MultipleServiceRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func MultipleServiceRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipService, error) {
+func MultipleServiceRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*MultipleServiceRequest, error) {
 	if pullErr := readBuffer.PullContext("MultipleServiceRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -186,7 +186,7 @@ func MultipleServiceRequestParse(readBuffer utils.ReadBuffer, serviceLen uint16)
 		CipService: &CipService{},
 	}
 	_child.CipService.Child = _child
-	return _child.CipService, nil
+	return _child, nil
 }
 
 func (m *MultipleServiceRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceResponse.go b/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceResponse.go
index eaeb3f3..1ec3ed4 100644
--- a/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceResponse.go
+++ b/plc4go/internal/plc4go/eip/readwrite/model/MultipleServiceResponse.go
@@ -179,7 +179,7 @@ func (m *MultipleServiceResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func MultipleServiceResponseParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*CipService, error) {
+func MultipleServiceResponseParse(readBuffer utils.ReadBuffer, serviceLen uint16) (*MultipleServiceResponse, error) {
 	if pullErr := readBuffer.PullContext("MultipleServiceResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -260,7 +260,7 @@ func MultipleServiceResponseParse(readBuffer utils.ReadBuffer, serviceLen uint16
 		CipService:   &CipService{},
 	}
 	_child.CipService.Child = _child
-	return _child.CipService, nil
+	return _child, nil
 }
 
 func (m *MultipleServiceResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommand.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommand.go
index b3ae01e..d95a358 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommand.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommand.go
@@ -113,19 +113,23 @@ func FirmataCommandParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCo
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *FirmataCommand
+	type FirmataCommandChild interface {
+		InitializeParent(*FirmataCommand)
+		GetParent() *FirmataCommand
+	}
+	var _child FirmataCommandChild
 	var typeSwitchError error
 	switch {
 	case commandCode == 0x0: // FirmataCommandSysex
-		_parent, typeSwitchError = FirmataCommandSysexParse(readBuffer, response)
+		_child, typeSwitchError = FirmataCommandSysexParse(readBuffer, response)
 	case commandCode == 0x4: // FirmataCommandSetPinMode
-		_parent, typeSwitchError = FirmataCommandSetPinModeParse(readBuffer, response)
+		_child, typeSwitchError = FirmataCommandSetPinModeParse(readBuffer, response)
 	case commandCode == 0x5: // FirmataCommandSetDigitalPinValue
-		_parent, typeSwitchError = FirmataCommandSetDigitalPinValueParse(readBuffer, response)
+		_child, typeSwitchError = FirmataCommandSetDigitalPinValueParse(readBuffer, response)
 	case commandCode == 0x9: // FirmataCommandProtocolVersion
-		_parent, typeSwitchError = FirmataCommandProtocolVersionParse(readBuffer, response)
+		_child, typeSwitchError = FirmataCommandProtocolVersionParse(readBuffer, response)
 	case commandCode == 0xF: // FirmataCommandSystemReset
-		_parent, typeSwitchError = FirmataCommandSystemResetParse(readBuffer, response)
+		_child, typeSwitchError = FirmataCommandSystemResetParse(readBuffer, response)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -139,8 +143,8 @@ func FirmataCommandParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCo
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *FirmataCommand) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandProtocolVersion.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandProtocolVersion.go
index c7d9554..e9f32ce 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandProtocolVersion.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandProtocolVersion.go
@@ -138,7 +138,7 @@ func (m *FirmataCommandProtocolVersion) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func FirmataCommandProtocolVersionParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommand, error) {
+func FirmataCommandProtocolVersionParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommandProtocolVersion, error) {
 	if pullErr := readBuffer.PullContext("FirmataCommandProtocolVersion"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -170,7 +170,7 @@ func FirmataCommandProtocolVersionParse(readBuffer utils.ReadBuffer, response bo
 		FirmataCommand: &FirmataCommand{},
 	}
 	_child.FirmataCommand.Child = _child
-	return _child.FirmataCommand, nil
+	return _child, nil
 }
 
 func (m *FirmataCommandProtocolVersion) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetDigitalPinValue.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetDigitalPinValue.go
index cdf1627..ee7a580 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetDigitalPinValue.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetDigitalPinValue.go
@@ -142,7 +142,7 @@ func (m *FirmataCommandSetDigitalPinValue) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func FirmataCommandSetDigitalPinValueParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommand, error) {
+func FirmataCommandSetDigitalPinValueParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommandSetDigitalPinValue, error) {
 	if pullErr := readBuffer.PullContext("FirmataCommandSetDigitalPinValue"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -188,7 +188,7 @@ func FirmataCommandSetDigitalPinValueParse(readBuffer utils.ReadBuffer, response
 		FirmataCommand: &FirmataCommand{},
 	}
 	_child.FirmataCommand.Child = _child
-	return _child.FirmataCommand, nil
+	return _child, nil
 }
 
 func (m *FirmataCommandSetDigitalPinValue) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetPinMode.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetPinMode.go
index 6d61e1a..8c8e271 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetPinMode.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSetPinMode.go
@@ -138,7 +138,7 @@ func (m *FirmataCommandSetPinMode) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func FirmataCommandSetPinModeParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommand, error) {
+func FirmataCommandSetPinModeParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommandSetPinMode, error) {
 	if pullErr := readBuffer.PullContext("FirmataCommandSetPinMode"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -176,7 +176,7 @@ func FirmataCommandSetPinModeParse(readBuffer utils.ReadBuffer, response bool) (
 		FirmataCommand: &FirmataCommand{},
 	}
 	_child.FirmataCommand.Child = _child
-	return _child.FirmataCommand, nil
+	return _child, nil
 }
 
 func (m *FirmataCommandSetPinMode) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSysex.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSysex.go
index bab348e..7c59b9d 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSysex.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSysex.go
@@ -131,7 +131,7 @@ func (m *FirmataCommandSysex) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func FirmataCommandSysexParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommand, error) {
+func FirmataCommandSysexParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommandSysex, error) {
 	if pullErr := readBuffer.PullContext("FirmataCommandSysex"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -175,7 +175,7 @@ func FirmataCommandSysexParse(readBuffer utils.ReadBuffer, response bool) (*Firm
 		FirmataCommand: &FirmataCommand{},
 	}
 	_child.FirmataCommand.Child = _child
-	return _child.FirmataCommand, nil
+	return _child, nil
 }
 
 func (m *FirmataCommandSysex) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSystemReset.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSystemReset.go
index 171e7d1..fe0f58d 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSystemReset.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataCommandSystemReset.go
@@ -106,7 +106,7 @@ func (m *FirmataCommandSystemReset) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func FirmataCommandSystemResetParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommand, error) {
+func FirmataCommandSystemResetParse(readBuffer utils.ReadBuffer, response bool) (*FirmataCommandSystemReset, error) {
 	if pullErr := readBuffer.PullContext("FirmataCommandSystemReset"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func FirmataCommandSystemResetParse(readBuffer utils.ReadBuffer, response bool)
 		FirmataCommand: &FirmataCommand{},
 	}
 	_child.FirmataCommand.Child = _child
-	return _child.FirmataCommand, nil
+	return _child, nil
 }
 
 func (m *FirmataCommandSystemReset) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessage.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessage.go
index 5a8e665..ac9aba9 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessage.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessage.go
@@ -113,19 +113,23 @@ func FirmataMessageParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMe
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *FirmataMessage
+	type FirmataMessageChild interface {
+		InitializeParent(*FirmataMessage)
+		GetParent() *FirmataMessage
+	}
+	var _child FirmataMessageChild
 	var typeSwitchError error
 	switch {
 	case messageType == 0xE: // FirmataMessageAnalogIO
-		_parent, typeSwitchError = FirmataMessageAnalogIOParse(readBuffer, response)
+		_child, typeSwitchError = FirmataMessageAnalogIOParse(readBuffer, response)
 	case messageType == 0x9: // FirmataMessageDigitalIO
-		_parent, typeSwitchError = FirmataMessageDigitalIOParse(readBuffer, response)
+		_child, typeSwitchError = FirmataMessageDigitalIOParse(readBuffer, response)
 	case messageType == 0xC: // FirmataMessageSubscribeAnalogPinValue
-		_parent, typeSwitchError = FirmataMessageSubscribeAnalogPinValueParse(readBuffer, response)
+		_child, typeSwitchError = FirmataMessageSubscribeAnalogPinValueParse(readBuffer, response)
 	case messageType == 0xD: // FirmataMessageSubscribeDigitalPinValue
-		_parent, typeSwitchError = FirmataMessageSubscribeDigitalPinValueParse(readBuffer, response)
+		_child, typeSwitchError = FirmataMessageSubscribeDigitalPinValueParse(readBuffer, response)
 	case messageType == 0xF: // FirmataMessageCommand
-		_parent, typeSwitchError = FirmataMessageCommandParse(readBuffer, response)
+		_child, typeSwitchError = FirmataMessageCommandParse(readBuffer, response)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -139,8 +143,8 @@ func FirmataMessageParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMe
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *FirmataMessage) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageAnalogIO.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageAnalogIO.go
index 51fbb40..de341cc 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageAnalogIO.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageAnalogIO.go
@@ -140,7 +140,7 @@ func (m *FirmataMessageAnalogIO) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func FirmataMessageAnalogIOParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessage, error) {
+func FirmataMessageAnalogIOParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessageAnalogIO, error) {
 	if pullErr := readBuffer.PullContext("FirmataMessageAnalogIO"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -184,7 +184,7 @@ func FirmataMessageAnalogIOParse(readBuffer utils.ReadBuffer, response bool) (*F
 		FirmataMessage: &FirmataMessage{},
 	}
 	_child.FirmataMessage.Child = _child
-	return _child.FirmataMessage, nil
+	return _child, nil
 }
 
 func (m *FirmataMessageAnalogIO) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageCommand.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageCommand.go
index 9d64d3c..6e377a7 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageCommand.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageCommand.go
@@ -127,7 +127,7 @@ func (m *FirmataMessageCommand) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func FirmataMessageCommandParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessage, error) {
+func FirmataMessageCommandParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessageCommand, error) {
 	if pullErr := readBuffer.PullContext("FirmataMessageCommand"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -157,7 +157,7 @@ func FirmataMessageCommandParse(readBuffer utils.ReadBuffer, response bool) (*Fi
 		FirmataMessage: &FirmataMessage{},
 	}
 	_child.FirmataMessage.Child = _child
-	return _child.FirmataMessage, nil
+	return _child, nil
 }
 
 func (m *FirmataMessageCommand) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageDigitalIO.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageDigitalIO.go
index 3058551..9aa386d 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageDigitalIO.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageDigitalIO.go
@@ -140,7 +140,7 @@ func (m *FirmataMessageDigitalIO) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func FirmataMessageDigitalIOParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessage, error) {
+func FirmataMessageDigitalIOParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessageDigitalIO, error) {
 	if pullErr := readBuffer.PullContext("FirmataMessageDigitalIO"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -184,7 +184,7 @@ func FirmataMessageDigitalIOParse(readBuffer utils.ReadBuffer, response bool) (*
 		FirmataMessage: &FirmataMessage{},
 	}
 	_child.FirmataMessage.Child = _child
-	return _child.FirmataMessage, nil
+	return _child, nil
 }
 
 func (m *FirmataMessageDigitalIO) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeAnalogPinValue.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeAnalogPinValue.go
index 233da9b..11450fe 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeAnalogPinValue.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeAnalogPinValue.go
@@ -142,7 +142,7 @@ func (m *FirmataMessageSubscribeAnalogPinValue) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func FirmataMessageSubscribeAnalogPinValueParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessage, error) {
+func FirmataMessageSubscribeAnalogPinValueParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessageSubscribeAnalogPinValue, error) {
 	if pullErr := readBuffer.PullContext("FirmataMessageSubscribeAnalogPinValue"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -188,7 +188,7 @@ func FirmataMessageSubscribeAnalogPinValueParse(readBuffer utils.ReadBuffer, res
 		FirmataMessage: &FirmataMessage{},
 	}
 	_child.FirmataMessage.Child = _child
-	return _child.FirmataMessage, nil
+	return _child, nil
 }
 
 func (m *FirmataMessageSubscribeAnalogPinValue) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeDigitalPinValue.go b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeDigitalPinValue.go
index d31e25f..cfcd157 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeDigitalPinValue.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/FirmataMessageSubscribeDigitalPinValue.go
@@ -142,7 +142,7 @@ func (m *FirmataMessageSubscribeDigitalPinValue) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func FirmataMessageSubscribeDigitalPinValueParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessage, error) {
+func FirmataMessageSubscribeDigitalPinValueParse(readBuffer utils.ReadBuffer, response bool) (*FirmataMessageSubscribeDigitalPinValue, error) {
 	if pullErr := readBuffer.PullContext("FirmataMessageSubscribeDigitalPinValue"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -188,7 +188,7 @@ func FirmataMessageSubscribeDigitalPinValueParse(readBuffer utils.ReadBuffer, re
 		FirmataMessage: &FirmataMessage{},
 	}
 	_child.FirmataMessage.Child = _child
-	return _child.FirmataMessage, nil
+	return _child, nil
 }
 
 func (m *FirmataMessageSubscribeDigitalPinValue) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommand.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommand.go
index 81d80dc..faa4dc9 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommand.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommand.go
@@ -112,39 +112,43 @@ func SysexCommandParse(readBuffer utils.ReadBuffer, response bool) (*SysexComman
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *SysexCommand
+	type SysexCommandChild interface {
+		InitializeParent(*SysexCommand)
+		GetParent() *SysexCommand
+	}
+	var _child SysexCommandChild
 	var typeSwitchError error
 	switch {
 	case commandType == 0x00: // SysexCommandExtendedId
-		_parent, typeSwitchError = SysexCommandExtendedIdParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandExtendedIdParse(readBuffer, response)
 	case commandType == 0x69 && response == bool(false): // SysexCommandAnalogMappingQueryRequest
-		_parent, typeSwitchError = SysexCommandAnalogMappingQueryRequestParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandAnalogMappingQueryRequestParse(readBuffer, response)
 	case commandType == 0x69 && response == bool(true): // SysexCommandAnalogMappingQueryResponse
-		_parent, typeSwitchError = SysexCommandAnalogMappingQueryResponseParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandAnalogMappingQueryResponseParse(readBuffer, response)
 	case commandType == 0x6A: // SysexCommandAnalogMappingResponse
-		_parent, typeSwitchError = SysexCommandAnalogMappingResponseParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandAnalogMappingResponseParse(readBuffer, response)
 	case commandType == 0x6B: // SysexCommandCapabilityQuery
-		_parent, typeSwitchError = SysexCommandCapabilityQueryParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandCapabilityQueryParse(readBuffer, response)
 	case commandType == 0x6C: // SysexCommandCapabilityResponse
-		_parent, typeSwitchError = SysexCommandCapabilityResponseParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandCapabilityResponseParse(readBuffer, response)
 	case commandType == 0x6D: // SysexCommandPinStateQuery
-		_parent, typeSwitchError = SysexCommandPinStateQueryParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandPinStateQueryParse(readBuffer, response)
 	case commandType == 0x6E: // SysexCommandPinStateResponse
-		_parent, typeSwitchError = SysexCommandPinStateResponseParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandPinStateResponseParse(readBuffer, response)
 	case commandType == 0x6F: // SysexCommandExtendedAnalog
-		_parent, typeSwitchError = SysexCommandExtendedAnalogParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandExtendedAnalogParse(readBuffer, response)
 	case commandType == 0x71: // SysexCommandStringData
-		_parent, typeSwitchError = SysexCommandStringDataParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandStringDataParse(readBuffer, response)
 	case commandType == 0x79 && response == bool(false): // SysexCommandReportFirmwareRequest
-		_parent, typeSwitchError = SysexCommandReportFirmwareRequestParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandReportFirmwareRequestParse(readBuffer, response)
 	case commandType == 0x79 && response == bool(true): // SysexCommandReportFirmwareResponse
-		_parent, typeSwitchError = SysexCommandReportFirmwareResponseParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandReportFirmwareResponseParse(readBuffer, response)
 	case commandType == 0x7A: // SysexCommandSamplingInterval
-		_parent, typeSwitchError = SysexCommandSamplingIntervalParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandSamplingIntervalParse(readBuffer, response)
 	case commandType == 0x7E: // SysexCommandSysexNonRealtime
-		_parent, typeSwitchError = SysexCommandSysexNonRealtimeParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandSysexNonRealtimeParse(readBuffer, response)
 	case commandType == 0x7F: // SysexCommandSysexRealtime
-		_parent, typeSwitchError = SysexCommandSysexRealtimeParse(readBuffer, response)
+		_child, typeSwitchError = SysexCommandSysexRealtimeParse(readBuffer, response)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -158,8 +162,8 @@ func SysexCommandParse(readBuffer utils.ReadBuffer, response bool) (*SysexComman
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *SysexCommand) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryRequest.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryRequest.go
index 078cfa5..8832992 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryRequest.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryRequest.go
@@ -107,7 +107,7 @@ func (m *SysexCommandAnalogMappingQueryRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandAnalogMappingQueryRequestParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandAnalogMappingQueryRequestParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandAnalogMappingQueryRequest, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandAnalogMappingQueryRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func SysexCommandAnalogMappingQueryRequestParse(readBuffer utils.ReadBuffer, res
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandAnalogMappingQueryRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryResponse.go
index 554d6db..3ad2acb 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingQueryResponse.go
@@ -128,7 +128,7 @@ func (m *SysexCommandAnalogMappingQueryResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandAnalogMappingQueryResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandAnalogMappingQueryResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandAnalogMappingQueryResponse, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandAnalogMappingQueryResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func SysexCommandAnalogMappingQueryResponseParse(readBuffer utils.ReadBuffer, re
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandAnalogMappingQueryResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingResponse.go
index f9e5fce..4a8b5f9 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandAnalogMappingResponse.go
@@ -107,7 +107,7 @@ func (m *SysexCommandAnalogMappingResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandAnalogMappingResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandAnalogMappingResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandAnalogMappingResponse, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandAnalogMappingResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func SysexCommandAnalogMappingResponseParse(readBuffer utils.ReadBuffer, respons
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandAnalogMappingResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityQuery.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityQuery.go
index 7d6fc04..0b8a84d 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityQuery.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityQuery.go
@@ -107,7 +107,7 @@ func (m *SysexCommandCapabilityQuery) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandCapabilityQueryParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandCapabilityQueryParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandCapabilityQuery, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandCapabilityQuery"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func SysexCommandCapabilityQueryParse(readBuffer utils.ReadBuffer, response bool
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandCapabilityQuery) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityResponse.go
index 4661f5b..59a8a95 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandCapabilityResponse.go
@@ -107,7 +107,7 @@ func (m *SysexCommandCapabilityResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandCapabilityResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandCapabilityResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandCapabilityResponse, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandCapabilityResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func SysexCommandCapabilityResponseParse(readBuffer utils.ReadBuffer, response b
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandCapabilityResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedAnalog.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedAnalog.go
index 5f40560..e25168c 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedAnalog.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedAnalog.go
@@ -107,7 +107,7 @@ func (m *SysexCommandExtendedAnalog) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandExtendedAnalogParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandExtendedAnalogParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandExtendedAnalog, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandExtendedAnalog"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func SysexCommandExtendedAnalogParse(readBuffer utils.ReadBuffer, response bool)
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandExtendedAnalog) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedId.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedId.go
index 6fe7fd7..43a6ffa 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedId.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandExtendedId.go
@@ -130,7 +130,7 @@ func (m *SysexCommandExtendedId) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandExtendedIdParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandExtendedIdParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandExtendedId, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandExtendedId"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -166,7 +166,7 @@ func SysexCommandExtendedIdParse(readBuffer utils.ReadBuffer, response bool) (*S
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandExtendedId) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateQuery.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateQuery.go
index 7e2d672..93c2104 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateQuery.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateQuery.go
@@ -128,7 +128,7 @@ func (m *SysexCommandPinStateQuery) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandPinStateQueryParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandPinStateQueryParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandPinStateQuery, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandPinStateQuery"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -152,7 +152,7 @@ func SysexCommandPinStateQueryParse(readBuffer utils.ReadBuffer, response bool)
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandPinStateQuery) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateResponse.go
index ae54fd7..09bfeaa 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandPinStateResponse.go
@@ -150,7 +150,7 @@ func (m *SysexCommandPinStateResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandPinStateResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandPinStateResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandPinStateResponse, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandPinStateResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -190,7 +190,7 @@ func SysexCommandPinStateResponseParse(readBuffer utils.ReadBuffer, response boo
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandPinStateResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareRequest.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareRequest.go
index d346759..e72f7a0 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareRequest.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareRequest.go
@@ -107,7 +107,7 @@ func (m *SysexCommandReportFirmwareRequest) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandReportFirmwareRequestParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandReportFirmwareRequestParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandReportFirmwareRequest, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandReportFirmwareRequest"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func SysexCommandReportFirmwareRequestParse(readBuffer utils.ReadBuffer, respons
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandReportFirmwareRequest) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareResponse.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareResponse.go
index ce5b9a5..ad64c1b 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareResponse.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandReportFirmwareResponse.go
@@ -151,7 +151,7 @@ func (m *SysexCommandReportFirmwareResponse) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandReportFirmwareResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandReportFirmwareResponseParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandReportFirmwareResponse, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandReportFirmwareResponse"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -202,7 +202,7 @@ func SysexCommandReportFirmwareResponseParse(readBuffer utils.ReadBuffer, respon
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandReportFirmwareResponse) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSamplingInterval.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSamplingInterval.go
index ea11c98..2dbdc78 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSamplingInterval.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSamplingInterval.go
@@ -107,7 +107,7 @@ func (m *SysexCommandSamplingInterval) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandSamplingIntervalParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandSamplingIntervalParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandSamplingInterval, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandSamplingInterval"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func SysexCommandSamplingIntervalParse(readBuffer utils.ReadBuffer, response boo
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandSamplingInterval) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandStringData.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandStringData.go
index d32c3b3..6d107fc 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandStringData.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandStringData.go
@@ -107,7 +107,7 @@ func (m *SysexCommandStringData) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandStringDataParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandStringDataParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandStringData, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandStringData"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func SysexCommandStringDataParse(readBuffer utils.ReadBuffer, response bool) (*S
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandStringData) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexNonRealtime.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexNonRealtime.go
index 83506fd..5035170 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexNonRealtime.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexNonRealtime.go
@@ -107,7 +107,7 @@ func (m *SysexCommandSysexNonRealtime) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandSysexNonRealtimeParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandSysexNonRealtimeParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandSysexNonRealtime, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandSysexNonRealtime"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func SysexCommandSysexNonRealtimeParse(readBuffer utils.ReadBuffer, response boo
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandSysexNonRealtime) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexRealtime.go b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexRealtime.go
index 7e17d08..e2b1de6 100644
--- a/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexRealtime.go
+++ b/plc4go/internal/plc4go/firmata/readwrite/model/SysexCommandSysexRealtime.go
@@ -107,7 +107,7 @@ func (m *SysexCommandSysexRealtime) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func SysexCommandSysexRealtimeParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommand, error) {
+func SysexCommandSysexRealtimeParse(readBuffer utils.ReadBuffer, response bool) (*SysexCommandSysexRealtime, error) {
 	if pullErr := readBuffer.PullContext("SysexCommandSysexRealtime"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -123,7 +123,7 @@ func SysexCommandSysexRealtimeParse(readBuffer utils.ReadBuffer, response bool)
 		SysexCommand: &SysexCommand{},
 	}
 	_child.SysexCommand.Child = _child
-	return _child.SysexCommand, nil
+	return _child, nil
 }
 
 func (m *SysexCommandSysexRealtime) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go
index 48986f6..191ead6 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go
@@ -156,13 +156,17 @@ func ApduParse(readBuffer utils.ReadBuffer, dataLength uint8) (*Apdu, error) {
 	counter := _counter
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *Apdu
+	type ApduChild interface {
+		InitializeParent(*Apdu, bool, uint8)
+		GetParent() *Apdu
+	}
+	var _child ApduChild
 	var typeSwitchError error
 	switch {
 	case control == uint8(1): // ApduControlContainer
-		_parent, typeSwitchError = ApduControlContainerParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduControlContainerParse(readBuffer, dataLength)
 	case control == uint8(0): // ApduDataContainer
-		_parent, typeSwitchError = ApduDataContainerParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataContainerParse(readBuffer, dataLength)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -176,8 +180,8 @@ func ApduParse(readBuffer utils.ReadBuffer, dataLength uint8) (*Apdu, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, numbered, counter)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent(), numbered, counter)
+	return _child.GetParent(), nil
 }
 
 func (m *Apdu) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControl.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControl.go
index df5eced..1f24454 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControl.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControl.go
@@ -110,17 +110,21 @@ func ApduControlParse(readBuffer utils.ReadBuffer) (*ApduControl, error) {
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *ApduControl
+	type ApduControlChild interface {
+		InitializeParent(*ApduControl)
+		GetParent() *ApduControl
+	}
+	var _child ApduControlChild
 	var typeSwitchError error
 	switch {
 	case controlType == 0x0: // ApduControlConnect
-		_parent, typeSwitchError = ApduControlConnectParse(readBuffer)
+		_child, typeSwitchError = ApduControlConnectParse(readBuffer)
 	case controlType == 0x1: // ApduControlDisconnect
-		_parent, typeSwitchError = ApduControlDisconnectParse(readBuffer)
+		_child, typeSwitchError = ApduControlDisconnectParse(readBuffer)
 	case controlType == 0x2: // ApduControlAck
-		_parent, typeSwitchError = ApduControlAckParse(readBuffer)
+		_child, typeSwitchError = ApduControlAckParse(readBuffer)
 	case controlType == 0x3: // ApduControlNack
-		_parent, typeSwitchError = ApduControlNackParse(readBuffer)
+		_child, typeSwitchError = ApduControlNackParse(readBuffer)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -134,8 +138,8 @@ func ApduControlParse(readBuffer utils.ReadBuffer) (*ApduControl, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *ApduControl) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlAck.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlAck.go
index 6ff3189..7a689c5 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlAck.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlAck.go
@@ -103,7 +103,7 @@ func (m *ApduControlAck) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func ApduControlAckParse(readBuffer utils.ReadBuffer) (*ApduControl, error) {
+func ApduControlAckParse(readBuffer utils.ReadBuffer) (*ApduControlAck, error) {
 	if pullErr := readBuffer.PullContext("ApduControlAck"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func ApduControlAckParse(readBuffer utils.ReadBuffer) (*ApduControl, error) {
 		ApduControl: &ApduControl{},
 	}
 	_child.ApduControl.Child = _child
-	return _child.ApduControl, nil
+	return _child, nil
 }
 
 func (m *ApduControlAck) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlConnect.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlConnect.go
index 1e1454d..90c21d4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlConnect.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlConnect.go
@@ -103,7 +103,7 @@ func (m *ApduControlConnect) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func ApduControlConnectParse(readBuffer utils.ReadBuffer) (*ApduControl, error) {
+func ApduControlConnectParse(readBuffer utils.ReadBuffer) (*ApduControlConnect, error) {
 	if pullErr := readBuffer.PullContext("ApduControlConnect"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func ApduControlConnectParse(readBuffer utils.ReadBuffer) (*ApduControl, error)
 		ApduControl: &ApduControl{},
 	}
 	_child.ApduControl.Child = _child
-	return _child.ApduControl, nil
+	return _child, nil
 }
 
 func (m *ApduControlConnect) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go
index 676141c..a7a99fd 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go
@@ -130,7 +130,7 @@ func (m *ApduControlContainer) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func ApduControlContainerParse(readBuffer utils.ReadBuffer, dataLength uint8) (*Apdu, error) {
+func ApduControlContainerParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduControlContainer, error) {
 	if pullErr := readBuffer.PullContext("ApduControlContainer"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -160,7 +160,7 @@ func ApduControlContainerParse(readBuffer utils.ReadBuffer, dataLength uint8) (*
 		Apdu:        &Apdu{},
 	}
 	_child.Apdu.Child = _child
-	return _child.Apdu, nil
+	return _child, nil
 }
 
 func (m *ApduControlContainer) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlDisconnect.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlDisconnect.go
index 730f593..debed83 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlDisconnect.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlDisconnect.go
@@ -103,7 +103,7 @@ func (m *ApduControlDisconnect) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func ApduControlDisconnectParse(readBuffer utils.ReadBuffer) (*ApduControl, error) {
+func ApduControlDisconnectParse(readBuffer utils.ReadBuffer) (*ApduControlDisconnect, error) {
 	if pullErr := readBuffer.PullContext("ApduControlDisconnect"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func ApduControlDisconnectParse(readBuffer utils.ReadBuffer) (*ApduControl, erro
 		ApduControl: &ApduControl{},
 	}
 	_child.ApduControl.Child = _child
-	return _child.ApduControl, nil
+	return _child, nil
 }
 
 func (m *ApduControlDisconnect) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlNack.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlNack.go
index 11730cf..5a6ae00 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlNack.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlNack.go
@@ -103,7 +103,7 @@ func (m *ApduControlNack) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func ApduControlNackParse(readBuffer utils.ReadBuffer) (*ApduControl, error) {
+func ApduControlNackParse(readBuffer utils.ReadBuffer) (*ApduControlNack, error) {
 	if pullErr := readBuffer.PullContext("ApduControlNack"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -119,7 +119,7 @@ func ApduControlNackParse(readBuffer utils.ReadBuffer) (*ApduControl, error) {
 		ApduControl: &ApduControl{},
 	}
 	_child.ApduControl.Child = _child
-	return _child.ApduControl, nil
+	return _child, nil
 }
 
 func (m *ApduControlNack) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
index 040daeb..0a1b34f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
@@ -113,41 +113,45 @@ func ApduDataParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, er
 	}
 
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
-	var _parent *ApduData
+	type ApduDataChild interface {
+		InitializeParent(*ApduData)
+		GetParent() *ApduData
+	}
+	var _child ApduDataChild
 	var typeSwitchError error
 	switch {
 	case apciType == 0x0: // ApduDataGroupValueRead
-		_parent, typeSwitchError = ApduDataGroupValueReadParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataGroupValueReadParse(readBuffer, dataLength)
 	case apciType == 0x1: // ApduDataGroupValueResponse
-		_parent, typeSwitchError = ApduDataGroupValueResponseParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataGroupValueResponseParse(readBuffer, dataLength)
 	case apciType == 0x2: // ApduDataGroupValueWrite
-		_parent, typeSwitchError = ApduDataGroupValueWriteParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataGroupValueWriteParse(readBuffer, dataLength)
 	case apciType == 0x3: // ApduDataIndividualAddressWrite
-		_parent, typeSwitchError = ApduDataIndividualAddressWriteParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataIndividualAddressWriteParse(readBuffer, dataLength)
 	case apciType == 0x4: // ApduDataIndividualAddressRead
-		_parent, typeSwitchError = ApduDataIndividualAddressReadParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataIndividualAddressReadParse(readBuffer, dataLength)
 	case apciType == 0x5: // ApduDataIndividualAddressResponse
-		_parent, typeSwitchError = ApduDataIndividualAddressResponseParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataIndividualAddressResponseParse(readBuffer, dataLength)
 	case apciType == 0x6: // ApduDataAdcRead
-		_parent, typeSwitchError = ApduDataAdcReadParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataAdcReadParse(readBuffer, dataLength)
 	case apciType == 0x7: // ApduDataAdcResponse
-		_parent, typeSwitchError = ApduDataAdcResponseParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataAdcResponseParse(readBuffer, dataLength)
 	case apciType == 0x8: // ApduDataMemoryRead
-		_parent, typeSwitchError = ApduDataMemoryReadParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataMemoryReadParse(readBuffer, dataLength)
 	case apciType == 0x9: // ApduDataMemoryResponse
-		_parent, typeSwitchError = ApduDataMemoryResponseParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataMemoryResponseParse(readBuffer, dataLength)
 	case apciType == 0xA: // ApduDataMemoryWrite
-		_parent, typeSwitchError = ApduDataMemoryWriteParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataMemoryWriteParse(readBuffer, dataLength)
 	case apciType == 0xB: // ApduDataUserMessage
-		_parent, typeSwitchError = ApduDataUserMessageParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataUserMessageParse(readBuffer, dataLength)
 	case apciType == 0xC: // ApduDataDeviceDescriptorRead
-		_parent, typeSwitchError = ApduDataDeviceDescriptorReadParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataDeviceDescriptorReadParse(readBuffer, dataLength)
 	case apciType == 0xD: // ApduDataDeviceDescriptorResponse
-		_parent, typeSwitchError = ApduDataDeviceDescriptorResponseParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataDeviceDescriptorResponseParse(readBuffer, dataLength)
 	case apciType == 0xE: // ApduDataRestart
-		_parent, typeSwitchError = ApduDataRestartParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataRestartParse(readBuffer, dataLength)
 	case apciType == 0xF: // ApduDataOther
-		_parent, typeSwitchError = ApduDataOtherParse(readBuffer, dataLength)
+		_child, typeSwitchError = ApduDataOtherParse(readBuffer, dataLength)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -161,8 +165,8 @@ func ApduDataParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, er
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent)
-	return _parent, nil
+	_child.InitializeParent(_child.GetParent())
+	return _child.GetParent(), nil
 }
 
 func (m *ApduData) Serialize(writeBuffer utils.WriteBuffer) error {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go
index b41c59e..0b676fe 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go
@@ -106,7 +106,7 @@ func (m *ApduDataAdcRead) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func ApduDataAdcReadParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduData, error) {
+func ApduDataAdcReadParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduDataAdcRead, error) {
 	if pullErr := readBuffer.PullContext("ApduDataAdcRead"); pullErr != nil {
 		return nil, pullErr
 	}
@@ -122,7 +122,7 @@ func ApduDataAdcReadParse(readBuffer utils.ReadBuffer, dataLength uint8) (*ApduD
... 5740 lines suppressed ...