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 2021/04/14 16:29:34 UTC

[plc4x] branch develop updated (1a71fd5 -> dcac5a3)

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

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


    from 1a71fd5  plc4go: added ${enum}Values to enums for easy list access
     new 204e225  plc4go: switch fatals to error so we don't os.exit()
     new dcac5a3  plc4go: fixed length calculation on discriminated childs

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


Summary of changes:
 .../resources/templates/go/model-template.go.ftlh  | 210 ++++++++++++++++++---
 go.mod                                             |   2 +-
 go.sum                                             |   2 +
 .../model/AdsAddDeviceNotificationRequest.go       |   2 +-
 .../model/AdsAddDeviceNotificationResponse.go      |   2 +-
 .../internal/plc4go/ads/readwrite/model/AdsData.go |   7 +-
 .../model/AdsDeleteDeviceNotificationRequest.go    |   2 +-
 .../model/AdsDeleteDeviceNotificationResponse.go   |   2 +-
 .../model/AdsDeviceNotificationRequest.go          |   2 +-
 .../model/AdsDeviceNotificationResponse.go         |   2 +-
 .../ads/readwrite/model/AdsInvalidRequest.go       |   2 +-
 .../ads/readwrite/model/AdsInvalidResponse.go      |   2 +-
 .../ads/readwrite/model/AdsMultiRequestItem.go     |   7 +-
 .../ads/readwrite/model/AdsMultiRequestItemRead.go |   2 +-
 .../model/AdsMultiRequestItemReadWrite.go          |   2 +-
 .../readwrite/model/AdsMultiRequestItemWrite.go    |   2 +-
 .../readwrite/model/AdsReadDeviceInfoRequest.go    |   2 +-
 .../readwrite/model/AdsReadDeviceInfoResponse.go   |   2 +-
 .../plc4go/ads/readwrite/model/AdsReadRequest.go   |   2 +-
 .../plc4go/ads/readwrite/model/AdsReadResponse.go  |   2 +-
 .../ads/readwrite/model/AdsReadStateRequest.go     |   2 +-
 .../ads/readwrite/model/AdsReadStateResponse.go    |   2 +-
 .../ads/readwrite/model/AdsReadWriteRequest.go     |   2 +-
 .../ads/readwrite/model/AdsReadWriteResponse.go    |   2 +-
 .../ads/readwrite/model/AdsWriteControlRequest.go  |   2 +-
 .../ads/readwrite/model/AdsWriteControlResponse.go |   2 +-
 .../plc4go/ads/readwrite/model/AdsWriteRequest.go  |   2 +-
 .../plc4go/ads/readwrite/model/AdsWriteResponse.go |   2 +-
 .../plc4go/bacnetip/readwrite/model/APDU.go        |   7 +-
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   |   2 +-
 .../bacnetip/readwrite/model/APDUComplexAck.go     |   2 +-
 .../readwrite/model/APDUConfirmedRequest.go        |   2 +-
 .../plc4go/bacnetip/readwrite/model/APDUError.go   |   2 +-
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  |   2 +-
 .../bacnetip/readwrite/model/APDUSegmentAck.go     |   2 +-
 .../bacnetip/readwrite/model/APDUSimpleAck.go      |   2 +-
 .../readwrite/model/APDUUnconfirmedRequest.go      |   2 +-
 .../readwrite/model/BACnetConfirmedServiceACK.go   |   7 +-
 .../BACnetConfirmedServiceACKAtomicReadFile.go     |   2 +-
 .../BACnetConfirmedServiceACKAtomicWriteFile.go    |   2 +-
 ...tConfirmedServiceACKConfirmedPrivateTransfer.go |   2 +-
 .../model/BACnetConfirmedServiceACKCreateObject.go |   2 +-
 .../BACnetConfirmedServiceACKGetAlarmSummary.go    |   2 +-
 ...ACnetConfirmedServiceACKGetEnrollmentSummary.go |   2 +-
 ...BACnetConfirmedServiceACKGetEventInformation.go |   2 +-
 .../model/BACnetConfirmedServiceACKReadProperty.go |   2 +-
 ...ACnetConfirmedServiceACKReadPropertyMultiple.go |   2 +-
 .../model/BACnetConfirmedServiceACKReadRange.go    |   2 +-
 ...BACnetConfirmedServiceACKRemovedAuthenticate.go |   2 +-
 ...rmedServiceACKRemovedReadPropertyConditional.go |   2 +-
 .../model/BACnetConfirmedServiceACKVTData.go       |   2 +-
 .../model/BACnetConfirmedServiceACKVTOpen.go       |   2 +-
 .../model/BACnetConfirmedServiceRequest.go         |   7 +-
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |   2 +-
 .../BACnetConfirmedServiceRequestAddListElement.go |   2 +-
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |   2 +-
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |   2 +-
 ...firmedServiceRequestConfirmedCOVNotification.go |   2 +-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |   2 +-
 ...rmedServiceRequestConfirmedEventNotification.go |   2 +-
 ...firmedServiceRequestConfirmedPrivateTransfer.go |   2 +-
 ...tConfirmedServiceRequestConfirmedTextMessage.go |   2 +-
 .../BACnetConfirmedServiceRequestCreateObject.go   |   2 +-
 .../BACnetConfirmedServiceRequestDeleteObject.go   |   2 +-
 ...rmedServiceRequestDeviceCommunicationControl.go |   2 +-
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |   2 +-
 ...etConfirmedServiceRequestGetEventInformation.go |   2 +-
 ...etConfirmedServiceRequestLifeSafetyOperation.go |   2 +-
 .../BACnetConfirmedServiceRequestReadProperty.go   |   2 +-
 ...tConfirmedServiceRequestReadPropertyMultiple.go |   2 +-
 .../BACnetConfirmedServiceRequestReadRange.go      |   2 +-
 ...netConfirmedServiceRequestReinitializeDevice.go |   2 +-
 ...CnetConfirmedServiceRequestRemoveListElement.go |   2 +-
 ...etConfirmedServiceRequestRemovedAuthenticate.go |   2 +-
 ...ServiceRequestRemovedReadPropertyConditional.go |   2 +-
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |   2 +-
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |   2 +-
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |   2 +-
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |   2 +-
 .../model/BACnetConfirmedServiceRequestVTClose.go  |   2 +-
 .../model/BACnetConfirmedServiceRequestVTData.go   |   2 +-
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |   2 +-
 .../BACnetConfirmedServiceRequestWriteProperty.go  |   2 +-
 ...ConfirmedServiceRequestWritePropertyMultiple.go |   2 +-
 .../plc4go/bacnetip/readwrite/model/BACnetError.go |   7 +-
 .../readwrite/model/BACnetErrorAtomicReadFile.go   |   2 +-
 .../readwrite/model/BACnetErrorAtomicWriteFile.go  |   2 +-
 .../model/BACnetErrorConfirmedPrivateTransfer.go   |   2 +-
 .../readwrite/model/BACnetErrorCreateObject.go     |   2 +-
 .../readwrite/model/BACnetErrorGetAlarmSummary.go  |   2 +-
 .../model/BACnetErrorGetEnrollmentSummary.go       |   2 +-
 .../model/BACnetErrorGetEventInformation.go        |   2 +-
 .../readwrite/model/BACnetErrorReadProperty.go     |   2 +-
 .../model/BACnetErrorReadPropertyMultiple.go       |   2 +-
 .../readwrite/model/BACnetErrorReadRange.go        |   2 +-
 .../model/BACnetErrorRemovedAuthenticate.go        |   2 +-
 .../BACnetErrorRemovedReadPropertyConditional.go   |   2 +-
 .../bacnetip/readwrite/model/BACnetErrorVTData.go  |   2 +-
 .../bacnetip/readwrite/model/BACnetErrorVTOpen.go  |   2 +-
 .../bacnetip/readwrite/model/BACnetServiceAck.go   |   7 +-
 .../model/BACnetServiceAckAtomicReadFile.go        |   2 +-
 .../model/BACnetServiceAckAtomicWriteFile.go       |   2 +-
 .../BACnetServiceAckConfirmedPrivateTransfer.go    |   2 +-
 .../model/BACnetServiceAckCreateObject.go          |   2 +-
 .../model/BACnetServiceAckGetAlarmSummary.go       |   2 +-
 .../model/BACnetServiceAckGetEnrollmentSummary.go  |   2 +-
 .../model/BACnetServiceAckGetEventInformation.go   |   2 +-
 .../model/BACnetServiceAckReadProperty.go          |   2 +-
 .../model/BACnetServiceAckReadPropertyMultiple.go  |   2 +-
 .../readwrite/model/BACnetServiceAckReadRange.go   |   2 +-
 .../model/BACnetServiceAckRemovedAuthenticate.go   |   2 +-
 ...CnetServiceAckRemovedReadPropertyConditional.go |   2 +-
 .../readwrite/model/BACnetServiceAckVTData.go      |   2 +-
 .../readwrite/model/BACnetServiceAckVTOpen.go      |   2 +-
 .../plc4go/bacnetip/readwrite/model/BACnetTag.go   |   7 +-
 .../model/BACnetTagApplicationBitString.go         |   2 +-
 .../readwrite/model/BACnetTagApplicationBoolean.go |   2 +-
 .../model/BACnetTagApplicationCharacterString.go   |   2 +-
 .../readwrite/model/BACnetTagApplicationDate.go    |   2 +-
 .../readwrite/model/BACnetTagApplicationDouble.go  |   2 +-
 .../model/BACnetTagApplicationEnumerated.go        |   2 +-
 .../readwrite/model/BACnetTagApplicationNull.go    |   2 +-
 .../model/BACnetTagApplicationObjectIdentifier.go  |   2 +-
 .../model/BACnetTagApplicationOctetString.go       |   2 +-
 .../readwrite/model/BACnetTagApplicationReal.go    |   2 +-
 .../model/BACnetTagApplicationSignedInteger.go     |   2 +-
 .../readwrite/model/BACnetTagApplicationTime.go    |   2 +-
 .../model/BACnetTagApplicationUnsignedInteger.go   |   2 +-
 .../bacnetip/readwrite/model/BACnetTagContext.go   |   2 +-
 .../model/BACnetUnconfirmedServiceRequest.go       |   7 +-
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |   2 +-
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |   2 +-
 ...UnconfirmedServiceRequestTimeSynchronization.go |   2 +-
 ...onfirmedServiceRequestUTCTimeSynchronization.go |   2 +-
 ...rmedServiceRequestUnconfirmedCOVNotification.go |   2 +-
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |   2 +-
 ...edServiceRequestUnconfirmedEventNotification.go |   2 +-
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go |   2 +-
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |   2 +-
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |   2 +-
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |   2 +-
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |   2 +-
 .../plc4go/bacnetip/readwrite/model/BVLC.go        |   7 +-
 .../model/BVLCDeleteForeignDeviceTableEntry.go     |   2 +-
 .../model/BVLCDistributeBroadcastToNetwork.go      |   2 +-
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |   2 +-
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |   2 +-
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |   2 +-
 .../model/BVLCReadBroadcastDistributionTable.go    |   2 +-
 .../model/BVLCReadBroadcastDistributionTableAck.go |   2 +-
 .../readwrite/model/BVLCReadForeignDeviceTable.go  |   2 +-
 .../model/BVLCReadForeignDeviceTableAck.go         |   2 +-
 .../readwrite/model/BVLCRegisterForeignDevice.go   |   2 +-
 .../plc4go/bacnetip/readwrite/model/BVLCResult.go  |   2 +-
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |   2 +-
 .../model/BVLCWideBroadcastDistributionTable.go    |   2 +-
 .../plc4go/bacnetip/readwrite/model/NLM.go         |   7 +-
 .../readwrite/model/NLMIAmRouterToNetwork.go       |   2 +-
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |   2 +-
 .../plc4go/knxnetip/readwrite/model/Apdu.go        |   7 +-
 .../plc4go/knxnetip/readwrite/model/ApduControl.go |   7 +-
 .../knxnetip/readwrite/model/ApduControlAck.go     |   2 +-
 .../knxnetip/readwrite/model/ApduControlConnect.go |   2 +-
 .../readwrite/model/ApduControlContainer.go        |   2 +-
 .../readwrite/model/ApduControlDisconnect.go       |   2 +-
 .../knxnetip/readwrite/model/ApduControlNack.go    |   2 +-
 .../plc4go/knxnetip/readwrite/model/ApduData.go    |   7 +-
 .../knxnetip/readwrite/model/ApduDataAdcRead.go    |   2 +-
 .../readwrite/model/ApduDataAdcResponse.go         |   2 +-
 .../knxnetip/readwrite/model/ApduDataContainer.go  |   2 +-
 .../model/ApduDataDeviceDescriptorRead.go          |   2 +-
 .../model/ApduDataDeviceDescriptorResponse.go      |   2 +-
 .../plc4go/knxnetip/readwrite/model/ApduDataExt.go |   7 +-
 .../readwrite/model/ApduDataExtAuthorizeRequest.go |   2 +-
 .../model/ApduDataExtAuthorizeResponse.go          |   2 +-
 .../model/ApduDataExtDomainAddressRead.go          |   2 +-
 .../model/ApduDataExtDomainAddressResponse.go      |   2 +-
 .../model/ApduDataExtDomainAddressSelectiveRead.go |   2 +-
 .../ApduDataExtDomainAddressSerialNumberRead.go    |   2 +-
 ...ApduDataExtDomainAddressSerialNumberResponse.go |   2 +-
 .../ApduDataExtDomainAddressSerialNumberWrite.go   |   2 +-
 .../model/ApduDataExtDomainAddressWrite.go         |   2 +-
 .../model/ApduDataExtFileStreamInfoReport.go       |   2 +-
 .../ApduDataExtGroupPropertyValueInfoReport.go     |   2 +-
 .../model/ApduDataExtGroupPropertyValueRead.go     |   2 +-
 .../model/ApduDataExtGroupPropertyValueResponse.go |   2 +-
 .../model/ApduDataExtGroupPropertyValueWrite.go    |   2 +-
 ...ApduDataExtIndividualAddressSerialNumberRead.go |   2 +-
 ...DataExtIndividualAddressSerialNumberResponse.go |   2 +-
 ...pduDataExtIndividualAddressSerialNumberWrite.go |   2 +-
 .../readwrite/model/ApduDataExtKeyResponse.go      |   2 +-
 .../readwrite/model/ApduDataExtKeyWrite.go         |   2 +-
 .../readwrite/model/ApduDataExtLinkRead.go         |   2 +-
 .../readwrite/model/ApduDataExtLinkResponse.go     |   2 +-
 .../readwrite/model/ApduDataExtLinkWrite.go        |   2 +-
 .../readwrite/model/ApduDataExtMemoryBitWrite.go   |   2 +-
 .../model/ApduDataExtNetworkParameterRead.go       |   2 +-
 .../model/ApduDataExtNetworkParameterResponse.go   |   2 +-
 .../model/ApduDataExtNetworkParameterWrite.go      |   2 +-
 .../model/ApduDataExtOpenRoutingTableRequest.go    |   2 +-
 .../model/ApduDataExtPropertyDescriptionRead.go    |   2 +-
 .../ApduDataExtPropertyDescriptionResponse.go      |   2 +-
 .../model/ApduDataExtPropertyValueRead.go          |   2 +-
 .../model/ApduDataExtPropertyValueResponse.go      |   2 +-
 .../model/ApduDataExtPropertyValueWrite.go         |   2 +-
 .../model/ApduDataExtReadRouterMemoryRequest.go    |   2 +-
 .../model/ApduDataExtReadRouterMemoryResponse.go   |   2 +-
 .../model/ApduDataExtReadRouterStatusRequest.go    |   2 +-
 .../model/ApduDataExtReadRouterStatusResponse.go   |   2 +-
 .../model/ApduDataExtReadRoutingTableRequest.go    |   2 +-
 .../model/ApduDataExtReadRoutingTableResponse.go   |   2 +-
 .../model/ApduDataExtWriteRouterMemoryRequest.go   |   2 +-
 .../model/ApduDataExtWriteRouterStatusRequest.go   |   2 +-
 .../model/ApduDataExtWriteRoutingTableRequest.go   |   2 +-
 .../readwrite/model/ApduDataGroupValueRead.go      |   2 +-
 .../readwrite/model/ApduDataGroupValueResponse.go  |   2 +-
 .../readwrite/model/ApduDataGroupValueWrite.go     |   2 +-
 .../model/ApduDataIndividualAddressRead.go         |   2 +-
 .../model/ApduDataIndividualAddressResponse.go     |   2 +-
 .../model/ApduDataIndividualAddressWrite.go        |   2 +-
 .../knxnetip/readwrite/model/ApduDataMemoryRead.go |   2 +-
 .../readwrite/model/ApduDataMemoryResponse.go      |   2 +-
 .../readwrite/model/ApduDataMemoryWrite.go         |   2 +-
 .../knxnetip/readwrite/model/ApduDataOther.go      |   2 +-
 .../knxnetip/readwrite/model/ApduDataRestart.go    |   2 +-
 .../readwrite/model/ApduDataUserMessage.go         |   2 +-
 .../plc4go/knxnetip/readwrite/model/CEMI.go        |   7 +-
 .../readwrite/model/CEMIAdditionalInformation.go   |   7 +-
 .../CEMIAdditionalInformationBusmonitorInfo.go     |   2 +-
 .../CEMIAdditionalInformationRelativeTimestamp.go  |   2 +-
 .../knxnetip/readwrite/model/ComObjectTable.go     |   7 +-
 .../model/ComObjectTableRealisationType1.go        |   2 +-
 .../model/ComObjectTableRealisationType2.go        |   2 +-
 .../model/ComObjectTableRealisationType6.go        |   2 +-
 .../knxnetip/readwrite/model/ConnectionRequest.go  |   2 +-
 .../model/ConnectionRequestInformation.go          |   7 +-
 ...ConnectionRequestInformationDeviceManagement.go |   2 +-
 ...ConnectionRequestInformationTunnelConnection.go |   2 +-
 .../knxnetip/readwrite/model/ConnectionResponse.go |   2 +-
 .../readwrite/model/ConnectionResponseDataBlock.go |   7 +-
 .../ConnectionResponseDataBlockDeviceManagement.go |   2 +-
 .../ConnectionResponseDataBlockTunnelConnection.go |   2 +-
 .../readwrite/model/ConnectionStateRequest.go      |   2 +-
 .../readwrite/model/ConnectionStateResponse.go     |   2 +-
 .../knxnetip/readwrite/model/DescriptionRequest.go |   2 +-
 .../readwrite/model/DescriptionResponse.go         |   2 +-
 .../readwrite/model/DeviceConfigurationAck.go      |   2 +-
 .../readwrite/model/DeviceConfigurationRequest.go  |   2 +-
 .../knxnetip/readwrite/model/DisconnectRequest.go  |   2 +-
 .../knxnetip/readwrite/model/DisconnectResponse.go |   2 +-
 .../knxnetip/readwrite/model/KnxGroupAddress.go    |   7 +-
 .../readwrite/model/KnxGroupAddress2Level.go       |   2 +-
 .../readwrite/model/KnxGroupAddress3Level.go       |   2 +-
 .../readwrite/model/KnxGroupAddressFreeLevel.go    |   2 +-
 .../knxnetip/readwrite/model/KnxNetIpCore.go       |   2 +-
 .../readwrite/model/KnxNetIpDeviceManagement.go    |   2 +-
 .../knxnetip/readwrite/model/KnxNetIpMessage.go    |   7 +-
 .../knxnetip/readwrite/model/KnxNetIpRouting.go    |   2 +-
 .../knxnetip/readwrite/model/KnxNetIpTunneling.go  |   2 +-
 .../knxnetip/readwrite/model/KnxNetObjectServer.go |   2 +-
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |   2 +-
 .../readwrite/model/KnxNetRemoteLogging.go         |   2 +-
 .../plc4go/knxnetip/readwrite/model/LBusmonInd.go  |   2 +-
 .../plc4go/knxnetip/readwrite/model/LDataCon.go    |   2 +-
 .../knxnetip/readwrite/model/LDataExtended.go      |   2 +-
 .../plc4go/knxnetip/readwrite/model/LDataFrame.go  |   7 +-
 .../knxnetip/readwrite/model/LDataFrameACK.go      |   2 +-
 .../plc4go/knxnetip/readwrite/model/LDataInd.go    |   2 +-
 .../plc4go/knxnetip/readwrite/model/LDataReq.go    |   2 +-
 .../plc4go/knxnetip/readwrite/model/LPollData.go   |   2 +-
 .../knxnetip/readwrite/model/LPollDataCon.go       |   2 +-
 .../knxnetip/readwrite/model/LPollDataReq.go       |   2 +-
 .../plc4go/knxnetip/readwrite/model/LRawCon.go     |   2 +-
 .../plc4go/knxnetip/readwrite/model/LRawInd.go     |   2 +-
 .../plc4go/knxnetip/readwrite/model/LRawReq.go     |   2 +-
 .../readwrite/model/MFuncPropCommandReq.go         |   2 +-
 .../knxnetip/readwrite/model/MFuncPropCon.go       |   2 +-
 .../readwrite/model/MFuncPropStateReadReq.go       |   2 +-
 .../knxnetip/readwrite/model/MPropInfoInd.go       |   2 +-
 .../knxnetip/readwrite/model/MPropReadCon.go       |   2 +-
 .../knxnetip/readwrite/model/MPropReadReq.go       |   2 +-
 .../knxnetip/readwrite/model/MPropWriteCon.go      |   2 +-
 .../knxnetip/readwrite/model/MPropWriteReq.go      |   2 +-
 .../plc4go/knxnetip/readwrite/model/MResetInd.go   |   2 +-
 .../plc4go/knxnetip/readwrite/model/MResetReq.go   |   2 +-
 .../knxnetip/readwrite/model/RoutingIndication.go  |   2 +-
 .../knxnetip/readwrite/model/SearchRequest.go      |   2 +-
 .../knxnetip/readwrite/model/SearchResponse.go     |   2 +-
 .../plc4go/knxnetip/readwrite/model/ServiceId.go   |   7 +-
 .../knxnetip/readwrite/model/TDataConnectedInd.go  |   2 +-
 .../knxnetip/readwrite/model/TDataConnectedReq.go  |   2 +-
 .../knxnetip/readwrite/model/TDataIndividualInd.go |   2 +-
 .../knxnetip/readwrite/model/TDataIndividualReq.go |   2 +-
 .../knxnetip/readwrite/model/TunnelingRequest.go   |   2 +-
 .../knxnetip/readwrite/model/TunnelingResponse.go  |   2 +-
 .../knxnetip/readwrite/model/UnknownMessage.go     |   2 +-
 .../plc4go/modbus/readwrite/model/ModbusPDU.go     |   7 +-
 .../readwrite/model/ModbusPDUDiagnosticRequest.go  |   2 +-
 .../readwrite/model/ModbusPDUDiagnosticResponse.go |   2 +-
 .../modbus/readwrite/model/ModbusPDUError.go       |   2 +-
 .../model/ModbusPDUGetComEventCounterRequest.go    |   2 +-
 .../model/ModbusPDUGetComEventCounterResponse.go   |   2 +-
 .../model/ModbusPDUGetComEventLogRequest.go        |   2 +-
 .../model/ModbusPDUGetComEventLogResponse.go       |   2 +-
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |   2 +-
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |   2 +-
 .../readwrite/model/ModbusPDUReadCoilsRequest.go   |   2 +-
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |   2 +-
 .../ModbusPDUReadDeviceIdentificationRequest.go    |   2 +-
 .../ModbusPDUReadDeviceIdentificationResponse.go   |   2 +-
 .../model/ModbusPDUReadDiscreteInputsRequest.go    |   2 +-
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |   2 +-
 .../model/ModbusPDUReadExceptionStatusRequest.go   |   2 +-
 .../model/ModbusPDUReadExceptionStatusResponse.go  |   2 +-
 .../model/ModbusPDUReadFifoQueueRequest.go         |   2 +-
 .../model/ModbusPDUReadFifoQueueResponse.go        |   2 +-
 .../model/ModbusPDUReadFileRecordRequest.go        |   2 +-
 .../model/ModbusPDUReadFileRecordResponse.go       |   2 +-
 .../model/ModbusPDUReadHoldingRegistersRequest.go  |   2 +-
 .../model/ModbusPDUReadHoldingRegistersResponse.go |   2 +-
 .../model/ModbusPDUReadInputRegistersRequest.go    |   2 +-
 .../model/ModbusPDUReadInputRegistersResponse.go   |   2 +-
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |   2 +-
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |   2 +-
 .../model/ModbusPDUReportServerIdRequest.go        |   2 +-
 .../model/ModbusPDUReportServerIdResponse.go       |   2 +-
 .../model/ModbusPDUWriteFileRecordRequest.go       |   2 +-
 .../model/ModbusPDUWriteFileRecordResponse.go      |   2 +-
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |   2 +-
 .../model/ModbusPDUWriteMultipleCoilsResponse.go   |   2 +-
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |   2 +-
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |   2 +-
 .../model/ModbusPDUWriteSingleCoilRequest.go       |   2 +-
 .../model/ModbusPDUWriteSingleCoilResponse.go      |   2 +-
 .../model/ModbusPDUWriteSingleRegisterRequest.go   |   2 +-
 .../model/ModbusPDUWriteSingleRegisterResponse.go  |   2 +-
 .../plc4go/s7/readwrite/model/COTPPacket.go        |   7 +-
 .../readwrite/model/COTPPacketConnectionRequest.go |   2 +-
 .../model/COTPPacketConnectionResponse.go          |   2 +-
 .../plc4go/s7/readwrite/model/COTPPacketData.go    |   2 +-
 .../readwrite/model/COTPPacketDisconnectRequest.go |   2 +-
 .../model/COTPPacketDisconnectResponse.go          |   2 +-
 .../s7/readwrite/model/COTPPacketTpduError.go      |   2 +-
 .../plc4go/s7/readwrite/model/COTPParameter.go     |   7 +-
 .../s7/readwrite/model/COTPParameterCalledTsap.go  |   2 +-
 .../s7/readwrite/model/COTPParameterCallingTsap.go |   2 +-
 .../s7/readwrite/model/COTPParameterChecksum.go    |   2 +-
 ...COTPParameterDisconnectAdditionalInformation.go |   2 +-
 .../s7/readwrite/model/COTPParameterTpduSize.go    |   2 +-
 .../plc4go/s7/readwrite/model/S7Address.go         |   7 +-
 .../plc4go/s7/readwrite/model/S7AddressAny.go      |   2 +-
 .../plc4go/s7/readwrite/model/S7Message.go         |   7 +-
 .../plc4go/s7/readwrite/model/S7MessageRequest.go  |   2 +-
 .../plc4go/s7/readwrite/model/S7MessageResponse.go |   2 +-
 .../s7/readwrite/model/S7MessageResponseData.go    |   2 +-
 .../plc4go/s7/readwrite/model/S7MessageUserData.go |   2 +-
 .../plc4go/s7/readwrite/model/S7Parameter.go       |   7 +-
 .../readwrite/model/S7ParameterReadVarRequest.go   |   2 +-
 .../readwrite/model/S7ParameterReadVarResponse.go  |   2 +-
 .../model/S7ParameterSetupCommunication.go         |   2 +-
 .../s7/readwrite/model/S7ParameterUserData.go      |   2 +-
 .../s7/readwrite/model/S7ParameterUserDataItem.go  |   7 +-
 .../model/S7ParameterUserDataItemCPUFunctions.go   |   2 +-
 .../readwrite/model/S7ParameterWriteVarRequest.go  |   2 +-
 .../readwrite/model/S7ParameterWriteVarResponse.go |   2 +-
 .../plc4go/s7/readwrite/model/S7Payload.go         |   7 +-
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |   2 +-
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |   2 +-
 .../s7/readwrite/model/S7PayloadUserDataItem.go    |   7 +-
 ...PayloadUserDataItemCpuFunctionReadSzlRequest.go |   2 +-
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |   2 +-
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |   2 +-
 .../readwrite/model/S7PayloadWriteVarResponse.go   |   2 +-
 .../readwrite/model/S7VarRequestParameterItem.go   |   7 +-
 .../model/S7VarRequestParameterItemAddress.go      |   2 +-
 plc4go/internal/plc4go/spi/MessageCodec.go         |   2 +-
 .../plc4go/spi/RequestTransactionManager.go        |   2 +-
 .../interceptors/SingleItemRequestInterceptor.go   |   2 +-
 .../plc4go/spi/testutils/DriverTestRunner.go       |   2 +-
 379 files changed, 662 insertions(+), 474 deletions(-)

[plc4x] 01/02: plc4go: switch fatals to error so we don't os.exit()

Posted by sr...@apache.org.
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

commit 204e22565490f51aa93837641c5c81a91e79f8bd
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Apr 14 18:28:31 2021 +0200

    plc4go: switch fatals to error so we don't os.exit()
---
 plc4go/internal/plc4go/spi/MessageCodec.go                              | 2 +-
 plc4go/internal/plc4go/spi/RequestTransactionManager.go                 | 2 +-
 plc4go/internal/plc4go/spi/interceptors/SingleItemRequestInterceptor.go | 2 +-
 plc4go/internal/plc4go/spi/testutils/DriverTestRunner.go                | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/plc4go/internal/plc4go/spi/MessageCodec.go b/plc4go/internal/plc4go/spi/MessageCodec.go
index bcb86c5..6c2dfc4 100644
--- a/plc4go/internal/plc4go/spi/MessageCodec.go
+++ b/plc4go/internal/plc4go/spi/MessageCodec.go
@@ -215,7 +215,7 @@ func (m *DefaultCodec) HandleMessages(message interface{}) bool {
 func (m *DefaultCodec) Work(codec *DefaultCodecRequiredInterface) {
 	defer func() {
 		if err := recover(); err != nil {
-			log.Fatal().Msgf("recovered from %v", err)
+			log.Error().Msgf("recovered from %v", err)
 		}
 		log.Info().Msg("Keep running")
 		m.Work(codec)
diff --git a/plc4go/internal/plc4go/spi/RequestTransactionManager.go b/plc4go/internal/plc4go/spi/RequestTransactionManager.go
index 3318a3c..aa45c74 100644
--- a/plc4go/internal/plc4go/spi/RequestTransactionManager.go
+++ b/plc4go/internal/plc4go/spi/RequestTransactionManager.go
@@ -49,7 +49,7 @@ type Worker struct {
 func (w Worker) work() {
 	defer func() {
 		if recovered := recover(); recovered != nil {
-			log.Fatal().Msgf("Recovering from panic()=%v", recovered)
+			log.Error().Msgf("Recovering from panic()=%v", recovered)
 		}
 		if !w.shutdown {
 			// TODO: if we are not in shutdown we continue
diff --git a/plc4go/internal/plc4go/spi/interceptors/SingleItemRequestInterceptor.go b/plc4go/internal/plc4go/spi/interceptors/SingleItemRequestInterceptor.go
index 3c6d4be..1f53b5b 100644
--- a/plc4go/internal/plc4go/spi/interceptors/SingleItemRequestInterceptor.go
+++ b/plc4go/internal/plc4go/spi/interceptors/SingleItemRequestInterceptor.go
@@ -78,7 +78,7 @@ func (m SingleItemRequestInterceptor) ProcessReadResponses(readRequest apiModel.
 			}
 		} else if readResult.Response != nil {
 			if len(readResult.Response.GetRequest().GetFieldNames()) > 1 {
-				log.Fatal().Int("numberOfFields", len(readResult.Response.GetRequest().GetFieldNames())).Msg("We should only get 1")
+				log.Error().Int("numberOfFields", len(readResult.Response.GetRequest().GetFieldNames())).Msg("We should only get 1")
 			}
 			for _, fieldName := range readResult.Response.GetRequest().GetFieldNames() {
 				responseCodes[fieldName] = readResult.Response.GetResponseCode(fieldName)
diff --git a/plc4go/internal/plc4go/spi/testutils/DriverTestRunner.go b/plc4go/internal/plc4go/spi/testutils/DriverTestRunner.go
index 4369465..3a8e6d2 100644
--- a/plc4go/internal/plc4go/spi/testutils/DriverTestRunner.go
+++ b/plc4go/internal/plc4go/spi/testutils/DriverTestRunner.go
@@ -512,7 +512,7 @@ func RunDriverTestsuite(t *testing.T, driver plc4go.PlcDriver, testPath string,
 		t.Run(testcase.name, func(t *testing.T) {
 			defer func() {
 				if err := recover(); err != nil {
-					log.Error().Msgf("\n-------------------------------------------------------\nFatal Failure\n%+v\n%s\n-------------------------------------------------------\n\n", err, debug.Stack())
+					log.Error().Msgf("\n-------------------------------------------------------\nPanic Failure\n%+v\n%s\n-------------------------------------------------------\n\n", err, debug.Stack())
 					t.FailNow()
 				}
 			}()

[plc4x] 02/02: plc4go: fixed length calculation on discriminated childs

Posted by sr...@apache.org.
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

commit dcac5a3d302d0694d607411112a48f7925d68329
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Apr 14 18:29:22 2021 +0200

    plc4go: fixed length calculation on discriminated childs
---
 .../resources/templates/go/model-template.go.ftlh  | 210 ++++++++++++++++++---
 go.mod                                             |   2 +-
 go.sum                                             |   2 +
 .../model/AdsAddDeviceNotificationRequest.go       |   2 +-
 .../model/AdsAddDeviceNotificationResponse.go      |   2 +-
 .../internal/plc4go/ads/readwrite/model/AdsData.go |   7 +-
 .../model/AdsDeleteDeviceNotificationRequest.go    |   2 +-
 .../model/AdsDeleteDeviceNotificationResponse.go   |   2 +-
 .../model/AdsDeviceNotificationRequest.go          |   2 +-
 .../model/AdsDeviceNotificationResponse.go         |   2 +-
 .../ads/readwrite/model/AdsInvalidRequest.go       |   2 +-
 .../ads/readwrite/model/AdsInvalidResponse.go      |   2 +-
 .../ads/readwrite/model/AdsMultiRequestItem.go     |   7 +-
 .../ads/readwrite/model/AdsMultiRequestItemRead.go |   2 +-
 .../model/AdsMultiRequestItemReadWrite.go          |   2 +-
 .../readwrite/model/AdsMultiRequestItemWrite.go    |   2 +-
 .../readwrite/model/AdsReadDeviceInfoRequest.go    |   2 +-
 .../readwrite/model/AdsReadDeviceInfoResponse.go   |   2 +-
 .../plc4go/ads/readwrite/model/AdsReadRequest.go   |   2 +-
 .../plc4go/ads/readwrite/model/AdsReadResponse.go  |   2 +-
 .../ads/readwrite/model/AdsReadStateRequest.go     |   2 +-
 .../ads/readwrite/model/AdsReadStateResponse.go    |   2 +-
 .../ads/readwrite/model/AdsReadWriteRequest.go     |   2 +-
 .../ads/readwrite/model/AdsReadWriteResponse.go    |   2 +-
 .../ads/readwrite/model/AdsWriteControlRequest.go  |   2 +-
 .../ads/readwrite/model/AdsWriteControlResponse.go |   2 +-
 .../plc4go/ads/readwrite/model/AdsWriteRequest.go  |   2 +-
 .../plc4go/ads/readwrite/model/AdsWriteResponse.go |   2 +-
 .../plc4go/bacnetip/readwrite/model/APDU.go        |   7 +-
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   |   2 +-
 .../bacnetip/readwrite/model/APDUComplexAck.go     |   2 +-
 .../readwrite/model/APDUConfirmedRequest.go        |   2 +-
 .../plc4go/bacnetip/readwrite/model/APDUError.go   |   2 +-
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  |   2 +-
 .../bacnetip/readwrite/model/APDUSegmentAck.go     |   2 +-
 .../bacnetip/readwrite/model/APDUSimpleAck.go      |   2 +-
 .../readwrite/model/APDUUnconfirmedRequest.go      |   2 +-
 .../readwrite/model/BACnetConfirmedServiceACK.go   |   7 +-
 .../BACnetConfirmedServiceACKAtomicReadFile.go     |   2 +-
 .../BACnetConfirmedServiceACKAtomicWriteFile.go    |   2 +-
 ...tConfirmedServiceACKConfirmedPrivateTransfer.go |   2 +-
 .../model/BACnetConfirmedServiceACKCreateObject.go |   2 +-
 .../BACnetConfirmedServiceACKGetAlarmSummary.go    |   2 +-
 ...ACnetConfirmedServiceACKGetEnrollmentSummary.go |   2 +-
 ...BACnetConfirmedServiceACKGetEventInformation.go |   2 +-
 .../model/BACnetConfirmedServiceACKReadProperty.go |   2 +-
 ...ACnetConfirmedServiceACKReadPropertyMultiple.go |   2 +-
 .../model/BACnetConfirmedServiceACKReadRange.go    |   2 +-
 ...BACnetConfirmedServiceACKRemovedAuthenticate.go |   2 +-
 ...rmedServiceACKRemovedReadPropertyConditional.go |   2 +-
 .../model/BACnetConfirmedServiceACKVTData.go       |   2 +-
 .../model/BACnetConfirmedServiceACKVTOpen.go       |   2 +-
 .../model/BACnetConfirmedServiceRequest.go         |   7 +-
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |   2 +-
 .../BACnetConfirmedServiceRequestAddListElement.go |   2 +-
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |   2 +-
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |   2 +-
 ...firmedServiceRequestConfirmedCOVNotification.go |   2 +-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |   2 +-
 ...rmedServiceRequestConfirmedEventNotification.go |   2 +-
 ...firmedServiceRequestConfirmedPrivateTransfer.go |   2 +-
 ...tConfirmedServiceRequestConfirmedTextMessage.go |   2 +-
 .../BACnetConfirmedServiceRequestCreateObject.go   |   2 +-
 .../BACnetConfirmedServiceRequestDeleteObject.go   |   2 +-
 ...rmedServiceRequestDeviceCommunicationControl.go |   2 +-
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |   2 +-
 ...etConfirmedServiceRequestGetEventInformation.go |   2 +-
 ...etConfirmedServiceRequestLifeSafetyOperation.go |   2 +-
 .../BACnetConfirmedServiceRequestReadProperty.go   |   2 +-
 ...tConfirmedServiceRequestReadPropertyMultiple.go |   2 +-
 .../BACnetConfirmedServiceRequestReadRange.go      |   2 +-
 ...netConfirmedServiceRequestReinitializeDevice.go |   2 +-
 ...CnetConfirmedServiceRequestRemoveListElement.go |   2 +-
 ...etConfirmedServiceRequestRemovedAuthenticate.go |   2 +-
 ...ServiceRequestRemovedReadPropertyConditional.go |   2 +-
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |   2 +-
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |   2 +-
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |   2 +-
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |   2 +-
 .../model/BACnetConfirmedServiceRequestVTClose.go  |   2 +-
 .../model/BACnetConfirmedServiceRequestVTData.go   |   2 +-
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |   2 +-
 .../BACnetConfirmedServiceRequestWriteProperty.go  |   2 +-
 ...ConfirmedServiceRequestWritePropertyMultiple.go |   2 +-
 .../plc4go/bacnetip/readwrite/model/BACnetError.go |   7 +-
 .../readwrite/model/BACnetErrorAtomicReadFile.go   |   2 +-
 .../readwrite/model/BACnetErrorAtomicWriteFile.go  |   2 +-
 .../model/BACnetErrorConfirmedPrivateTransfer.go   |   2 +-
 .../readwrite/model/BACnetErrorCreateObject.go     |   2 +-
 .../readwrite/model/BACnetErrorGetAlarmSummary.go  |   2 +-
 .../model/BACnetErrorGetEnrollmentSummary.go       |   2 +-
 .../model/BACnetErrorGetEventInformation.go        |   2 +-
 .../readwrite/model/BACnetErrorReadProperty.go     |   2 +-
 .../model/BACnetErrorReadPropertyMultiple.go       |   2 +-
 .../readwrite/model/BACnetErrorReadRange.go        |   2 +-
 .../model/BACnetErrorRemovedAuthenticate.go        |   2 +-
 .../BACnetErrorRemovedReadPropertyConditional.go   |   2 +-
 .../bacnetip/readwrite/model/BACnetErrorVTData.go  |   2 +-
 .../bacnetip/readwrite/model/BACnetErrorVTOpen.go  |   2 +-
 .../bacnetip/readwrite/model/BACnetServiceAck.go   |   7 +-
 .../model/BACnetServiceAckAtomicReadFile.go        |   2 +-
 .../model/BACnetServiceAckAtomicWriteFile.go       |   2 +-
 .../BACnetServiceAckConfirmedPrivateTransfer.go    |   2 +-
 .../model/BACnetServiceAckCreateObject.go          |   2 +-
 .../model/BACnetServiceAckGetAlarmSummary.go       |   2 +-
 .../model/BACnetServiceAckGetEnrollmentSummary.go  |   2 +-
 .../model/BACnetServiceAckGetEventInformation.go   |   2 +-
 .../model/BACnetServiceAckReadProperty.go          |   2 +-
 .../model/BACnetServiceAckReadPropertyMultiple.go  |   2 +-
 .../readwrite/model/BACnetServiceAckReadRange.go   |   2 +-
 .../model/BACnetServiceAckRemovedAuthenticate.go   |   2 +-
 ...CnetServiceAckRemovedReadPropertyConditional.go |   2 +-
 .../readwrite/model/BACnetServiceAckVTData.go      |   2 +-
 .../readwrite/model/BACnetServiceAckVTOpen.go      |   2 +-
 .../plc4go/bacnetip/readwrite/model/BACnetTag.go   |   7 +-
 .../model/BACnetTagApplicationBitString.go         |   2 +-
 .../readwrite/model/BACnetTagApplicationBoolean.go |   2 +-
 .../model/BACnetTagApplicationCharacterString.go   |   2 +-
 .../readwrite/model/BACnetTagApplicationDate.go    |   2 +-
 .../readwrite/model/BACnetTagApplicationDouble.go  |   2 +-
 .../model/BACnetTagApplicationEnumerated.go        |   2 +-
 .../readwrite/model/BACnetTagApplicationNull.go    |   2 +-
 .../model/BACnetTagApplicationObjectIdentifier.go  |   2 +-
 .../model/BACnetTagApplicationOctetString.go       |   2 +-
 .../readwrite/model/BACnetTagApplicationReal.go    |   2 +-
 .../model/BACnetTagApplicationSignedInteger.go     |   2 +-
 .../readwrite/model/BACnetTagApplicationTime.go    |   2 +-
 .../model/BACnetTagApplicationUnsignedInteger.go   |   2 +-
 .../bacnetip/readwrite/model/BACnetTagContext.go   |   2 +-
 .../model/BACnetUnconfirmedServiceRequest.go       |   7 +-
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |   2 +-
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |   2 +-
 ...UnconfirmedServiceRequestTimeSynchronization.go |   2 +-
 ...onfirmedServiceRequestUTCTimeSynchronization.go |   2 +-
 ...rmedServiceRequestUnconfirmedCOVNotification.go |   2 +-
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |   2 +-
 ...edServiceRequestUnconfirmedEventNotification.go |   2 +-
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go |   2 +-
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |   2 +-
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |   2 +-
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |   2 +-
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |   2 +-
 .../plc4go/bacnetip/readwrite/model/BVLC.go        |   7 +-
 .../model/BVLCDeleteForeignDeviceTableEntry.go     |   2 +-
 .../model/BVLCDistributeBroadcastToNetwork.go      |   2 +-
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |   2 +-
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |   2 +-
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |   2 +-
 .../model/BVLCReadBroadcastDistributionTable.go    |   2 +-
 .../model/BVLCReadBroadcastDistributionTableAck.go |   2 +-
 .../readwrite/model/BVLCReadForeignDeviceTable.go  |   2 +-
 .../model/BVLCReadForeignDeviceTableAck.go         |   2 +-
 .../readwrite/model/BVLCRegisterForeignDevice.go   |   2 +-
 .../plc4go/bacnetip/readwrite/model/BVLCResult.go  |   2 +-
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |   2 +-
 .../model/BVLCWideBroadcastDistributionTable.go    |   2 +-
 .../plc4go/bacnetip/readwrite/model/NLM.go         |   7 +-
 .../readwrite/model/NLMIAmRouterToNetwork.go       |   2 +-
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |   2 +-
 .../plc4go/knxnetip/readwrite/model/Apdu.go        |   7 +-
 .../plc4go/knxnetip/readwrite/model/ApduControl.go |   7 +-
 .../knxnetip/readwrite/model/ApduControlAck.go     |   2 +-
 .../knxnetip/readwrite/model/ApduControlConnect.go |   2 +-
 .../readwrite/model/ApduControlContainer.go        |   2 +-
 .../readwrite/model/ApduControlDisconnect.go       |   2 +-
 .../knxnetip/readwrite/model/ApduControlNack.go    |   2 +-
 .../plc4go/knxnetip/readwrite/model/ApduData.go    |   7 +-
 .../knxnetip/readwrite/model/ApduDataAdcRead.go    |   2 +-
 .../readwrite/model/ApduDataAdcResponse.go         |   2 +-
 .../knxnetip/readwrite/model/ApduDataContainer.go  |   2 +-
 .../model/ApduDataDeviceDescriptorRead.go          |   2 +-
 .../model/ApduDataDeviceDescriptorResponse.go      |   2 +-
 .../plc4go/knxnetip/readwrite/model/ApduDataExt.go |   7 +-
 .../readwrite/model/ApduDataExtAuthorizeRequest.go |   2 +-
 .../model/ApduDataExtAuthorizeResponse.go          |   2 +-
 .../model/ApduDataExtDomainAddressRead.go          |   2 +-
 .../model/ApduDataExtDomainAddressResponse.go      |   2 +-
 .../model/ApduDataExtDomainAddressSelectiveRead.go |   2 +-
 .../ApduDataExtDomainAddressSerialNumberRead.go    |   2 +-
 ...ApduDataExtDomainAddressSerialNumberResponse.go |   2 +-
 .../ApduDataExtDomainAddressSerialNumberWrite.go   |   2 +-
 .../model/ApduDataExtDomainAddressWrite.go         |   2 +-
 .../model/ApduDataExtFileStreamInfoReport.go       |   2 +-
 .../ApduDataExtGroupPropertyValueInfoReport.go     |   2 +-
 .../model/ApduDataExtGroupPropertyValueRead.go     |   2 +-
 .../model/ApduDataExtGroupPropertyValueResponse.go |   2 +-
 .../model/ApduDataExtGroupPropertyValueWrite.go    |   2 +-
 ...ApduDataExtIndividualAddressSerialNumberRead.go |   2 +-
 ...DataExtIndividualAddressSerialNumberResponse.go |   2 +-
 ...pduDataExtIndividualAddressSerialNumberWrite.go |   2 +-
 .../readwrite/model/ApduDataExtKeyResponse.go      |   2 +-
 .../readwrite/model/ApduDataExtKeyWrite.go         |   2 +-
 .../readwrite/model/ApduDataExtLinkRead.go         |   2 +-
 .../readwrite/model/ApduDataExtLinkResponse.go     |   2 +-
 .../readwrite/model/ApduDataExtLinkWrite.go        |   2 +-
 .../readwrite/model/ApduDataExtMemoryBitWrite.go   |   2 +-
 .../model/ApduDataExtNetworkParameterRead.go       |   2 +-
 .../model/ApduDataExtNetworkParameterResponse.go   |   2 +-
 .../model/ApduDataExtNetworkParameterWrite.go      |   2 +-
 .../model/ApduDataExtOpenRoutingTableRequest.go    |   2 +-
 .../model/ApduDataExtPropertyDescriptionRead.go    |   2 +-
 .../ApduDataExtPropertyDescriptionResponse.go      |   2 +-
 .../model/ApduDataExtPropertyValueRead.go          |   2 +-
 .../model/ApduDataExtPropertyValueResponse.go      |   2 +-
 .../model/ApduDataExtPropertyValueWrite.go         |   2 +-
 .../model/ApduDataExtReadRouterMemoryRequest.go    |   2 +-
 .../model/ApduDataExtReadRouterMemoryResponse.go   |   2 +-
 .../model/ApduDataExtReadRouterStatusRequest.go    |   2 +-
 .../model/ApduDataExtReadRouterStatusResponse.go   |   2 +-
 .../model/ApduDataExtReadRoutingTableRequest.go    |   2 +-
 .../model/ApduDataExtReadRoutingTableResponse.go   |   2 +-
 .../model/ApduDataExtWriteRouterMemoryRequest.go   |   2 +-
 .../model/ApduDataExtWriteRouterStatusRequest.go   |   2 +-
 .../model/ApduDataExtWriteRoutingTableRequest.go   |   2 +-
 .../readwrite/model/ApduDataGroupValueRead.go      |   2 +-
 .../readwrite/model/ApduDataGroupValueResponse.go  |   2 +-
 .../readwrite/model/ApduDataGroupValueWrite.go     |   2 +-
 .../model/ApduDataIndividualAddressRead.go         |   2 +-
 .../model/ApduDataIndividualAddressResponse.go     |   2 +-
 .../model/ApduDataIndividualAddressWrite.go        |   2 +-
 .../knxnetip/readwrite/model/ApduDataMemoryRead.go |   2 +-
 .../readwrite/model/ApduDataMemoryResponse.go      |   2 +-
 .../readwrite/model/ApduDataMemoryWrite.go         |   2 +-
 .../knxnetip/readwrite/model/ApduDataOther.go      |   2 +-
 .../knxnetip/readwrite/model/ApduDataRestart.go    |   2 +-
 .../readwrite/model/ApduDataUserMessage.go         |   2 +-
 .../plc4go/knxnetip/readwrite/model/CEMI.go        |   7 +-
 .../readwrite/model/CEMIAdditionalInformation.go   |   7 +-
 .../CEMIAdditionalInformationBusmonitorInfo.go     |   2 +-
 .../CEMIAdditionalInformationRelativeTimestamp.go  |   2 +-
 .../knxnetip/readwrite/model/ComObjectTable.go     |   7 +-
 .../model/ComObjectTableRealisationType1.go        |   2 +-
 .../model/ComObjectTableRealisationType2.go        |   2 +-
 .../model/ComObjectTableRealisationType6.go        |   2 +-
 .../knxnetip/readwrite/model/ConnectionRequest.go  |   2 +-
 .../model/ConnectionRequestInformation.go          |   7 +-
 ...ConnectionRequestInformationDeviceManagement.go |   2 +-
 ...ConnectionRequestInformationTunnelConnection.go |   2 +-
 .../knxnetip/readwrite/model/ConnectionResponse.go |   2 +-
 .../readwrite/model/ConnectionResponseDataBlock.go |   7 +-
 .../ConnectionResponseDataBlockDeviceManagement.go |   2 +-
 .../ConnectionResponseDataBlockTunnelConnection.go |   2 +-
 .../readwrite/model/ConnectionStateRequest.go      |   2 +-
 .../readwrite/model/ConnectionStateResponse.go     |   2 +-
 .../knxnetip/readwrite/model/DescriptionRequest.go |   2 +-
 .../readwrite/model/DescriptionResponse.go         |   2 +-
 .../readwrite/model/DeviceConfigurationAck.go      |   2 +-
 .../readwrite/model/DeviceConfigurationRequest.go  |   2 +-
 .../knxnetip/readwrite/model/DisconnectRequest.go  |   2 +-
 .../knxnetip/readwrite/model/DisconnectResponse.go |   2 +-
 .../knxnetip/readwrite/model/KnxGroupAddress.go    |   7 +-
 .../readwrite/model/KnxGroupAddress2Level.go       |   2 +-
 .../readwrite/model/KnxGroupAddress3Level.go       |   2 +-
 .../readwrite/model/KnxGroupAddressFreeLevel.go    |   2 +-
 .../knxnetip/readwrite/model/KnxNetIpCore.go       |   2 +-
 .../readwrite/model/KnxNetIpDeviceManagement.go    |   2 +-
 .../knxnetip/readwrite/model/KnxNetIpMessage.go    |   7 +-
 .../knxnetip/readwrite/model/KnxNetIpRouting.go    |   2 +-
 .../knxnetip/readwrite/model/KnxNetIpTunneling.go  |   2 +-
 .../knxnetip/readwrite/model/KnxNetObjectServer.go |   2 +-
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |   2 +-
 .../readwrite/model/KnxNetRemoteLogging.go         |   2 +-
 .../plc4go/knxnetip/readwrite/model/LBusmonInd.go  |   2 +-
 .../plc4go/knxnetip/readwrite/model/LDataCon.go    |   2 +-
 .../knxnetip/readwrite/model/LDataExtended.go      |   2 +-
 .../plc4go/knxnetip/readwrite/model/LDataFrame.go  |   7 +-
 .../knxnetip/readwrite/model/LDataFrameACK.go      |   2 +-
 .../plc4go/knxnetip/readwrite/model/LDataInd.go    |   2 +-
 .../plc4go/knxnetip/readwrite/model/LDataReq.go    |   2 +-
 .../plc4go/knxnetip/readwrite/model/LPollData.go   |   2 +-
 .../knxnetip/readwrite/model/LPollDataCon.go       |   2 +-
 .../knxnetip/readwrite/model/LPollDataReq.go       |   2 +-
 .../plc4go/knxnetip/readwrite/model/LRawCon.go     |   2 +-
 .../plc4go/knxnetip/readwrite/model/LRawInd.go     |   2 +-
 .../plc4go/knxnetip/readwrite/model/LRawReq.go     |   2 +-
 .../readwrite/model/MFuncPropCommandReq.go         |   2 +-
 .../knxnetip/readwrite/model/MFuncPropCon.go       |   2 +-
 .../readwrite/model/MFuncPropStateReadReq.go       |   2 +-
 .../knxnetip/readwrite/model/MPropInfoInd.go       |   2 +-
 .../knxnetip/readwrite/model/MPropReadCon.go       |   2 +-
 .../knxnetip/readwrite/model/MPropReadReq.go       |   2 +-
 .../knxnetip/readwrite/model/MPropWriteCon.go      |   2 +-
 .../knxnetip/readwrite/model/MPropWriteReq.go      |   2 +-
 .../plc4go/knxnetip/readwrite/model/MResetInd.go   |   2 +-
 .../plc4go/knxnetip/readwrite/model/MResetReq.go   |   2 +-
 .../knxnetip/readwrite/model/RoutingIndication.go  |   2 +-
 .../knxnetip/readwrite/model/SearchRequest.go      |   2 +-
 .../knxnetip/readwrite/model/SearchResponse.go     |   2 +-
 .../plc4go/knxnetip/readwrite/model/ServiceId.go   |   7 +-
 .../knxnetip/readwrite/model/TDataConnectedInd.go  |   2 +-
 .../knxnetip/readwrite/model/TDataConnectedReq.go  |   2 +-
 .../knxnetip/readwrite/model/TDataIndividualInd.go |   2 +-
 .../knxnetip/readwrite/model/TDataIndividualReq.go |   2 +-
 .../knxnetip/readwrite/model/TunnelingRequest.go   |   2 +-
 .../knxnetip/readwrite/model/TunnelingResponse.go  |   2 +-
 .../knxnetip/readwrite/model/UnknownMessage.go     |   2 +-
 .../plc4go/modbus/readwrite/model/ModbusPDU.go     |   7 +-
 .../readwrite/model/ModbusPDUDiagnosticRequest.go  |   2 +-
 .../readwrite/model/ModbusPDUDiagnosticResponse.go |   2 +-
 .../modbus/readwrite/model/ModbusPDUError.go       |   2 +-
 .../model/ModbusPDUGetComEventCounterRequest.go    |   2 +-
 .../model/ModbusPDUGetComEventCounterResponse.go   |   2 +-
 .../model/ModbusPDUGetComEventLogRequest.go        |   2 +-
 .../model/ModbusPDUGetComEventLogResponse.go       |   2 +-
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |   2 +-
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |   2 +-
 .../readwrite/model/ModbusPDUReadCoilsRequest.go   |   2 +-
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |   2 +-
 .../ModbusPDUReadDeviceIdentificationRequest.go    |   2 +-
 .../ModbusPDUReadDeviceIdentificationResponse.go   |   2 +-
 .../model/ModbusPDUReadDiscreteInputsRequest.go    |   2 +-
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |   2 +-
 .../model/ModbusPDUReadExceptionStatusRequest.go   |   2 +-
 .../model/ModbusPDUReadExceptionStatusResponse.go  |   2 +-
 .../model/ModbusPDUReadFifoQueueRequest.go         |   2 +-
 .../model/ModbusPDUReadFifoQueueResponse.go        |   2 +-
 .../model/ModbusPDUReadFileRecordRequest.go        |   2 +-
 .../model/ModbusPDUReadFileRecordResponse.go       |   2 +-
 .../model/ModbusPDUReadHoldingRegistersRequest.go  |   2 +-
 .../model/ModbusPDUReadHoldingRegistersResponse.go |   2 +-
 .../model/ModbusPDUReadInputRegistersRequest.go    |   2 +-
 .../model/ModbusPDUReadInputRegistersResponse.go   |   2 +-
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |   2 +-
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |   2 +-
 .../model/ModbusPDUReportServerIdRequest.go        |   2 +-
 .../model/ModbusPDUReportServerIdResponse.go       |   2 +-
 .../model/ModbusPDUWriteFileRecordRequest.go       |   2 +-
 .../model/ModbusPDUWriteFileRecordResponse.go      |   2 +-
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |   2 +-
 .../model/ModbusPDUWriteMultipleCoilsResponse.go   |   2 +-
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |   2 +-
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |   2 +-
 .../model/ModbusPDUWriteSingleCoilRequest.go       |   2 +-
 .../model/ModbusPDUWriteSingleCoilResponse.go      |   2 +-
 .../model/ModbusPDUWriteSingleRegisterRequest.go   |   2 +-
 .../model/ModbusPDUWriteSingleRegisterResponse.go  |   2 +-
 .../plc4go/s7/readwrite/model/COTPPacket.go        |   7 +-
 .../readwrite/model/COTPPacketConnectionRequest.go |   2 +-
 .../model/COTPPacketConnectionResponse.go          |   2 +-
 .../plc4go/s7/readwrite/model/COTPPacketData.go    |   2 +-
 .../readwrite/model/COTPPacketDisconnectRequest.go |   2 +-
 .../model/COTPPacketDisconnectResponse.go          |   2 +-
 .../s7/readwrite/model/COTPPacketTpduError.go      |   2 +-
 .../plc4go/s7/readwrite/model/COTPParameter.go     |   7 +-
 .../s7/readwrite/model/COTPParameterCalledTsap.go  |   2 +-
 .../s7/readwrite/model/COTPParameterCallingTsap.go |   2 +-
 .../s7/readwrite/model/COTPParameterChecksum.go    |   2 +-
 ...COTPParameterDisconnectAdditionalInformation.go |   2 +-
 .../s7/readwrite/model/COTPParameterTpduSize.go    |   2 +-
 .../plc4go/s7/readwrite/model/S7Address.go         |   7 +-
 .../plc4go/s7/readwrite/model/S7AddressAny.go      |   2 +-
 .../plc4go/s7/readwrite/model/S7Message.go         |   7 +-
 .../plc4go/s7/readwrite/model/S7MessageRequest.go  |   2 +-
 .../plc4go/s7/readwrite/model/S7MessageResponse.go |   2 +-
 .../s7/readwrite/model/S7MessageResponseData.go    |   2 +-
 .../plc4go/s7/readwrite/model/S7MessageUserData.go |   2 +-
 .../plc4go/s7/readwrite/model/S7Parameter.go       |   7 +-
 .../readwrite/model/S7ParameterReadVarRequest.go   |   2 +-
 .../readwrite/model/S7ParameterReadVarResponse.go  |   2 +-
 .../model/S7ParameterSetupCommunication.go         |   2 +-
 .../s7/readwrite/model/S7ParameterUserData.go      |   2 +-
 .../s7/readwrite/model/S7ParameterUserDataItem.go  |   7 +-
 .../model/S7ParameterUserDataItemCPUFunctions.go   |   2 +-
 .../readwrite/model/S7ParameterWriteVarRequest.go  |   2 +-
 .../readwrite/model/S7ParameterWriteVarResponse.go |   2 +-
 .../plc4go/s7/readwrite/model/S7Payload.go         |   7 +-
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |   2 +-
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |   2 +-
 .../s7/readwrite/model/S7PayloadUserDataItem.go    |   7 +-
 ...PayloadUserDataItemCpuFunctionReadSzlRequest.go |   2 +-
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |   2 +-
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |   2 +-
 .../readwrite/model/S7PayloadWriteVarResponse.go   |   2 +-
 .../readwrite/model/S7VarRequestParameterItem.go   |   7 +-
 .../model/S7VarRequestParameterItemAddress.go      |   2 +-
 375 files changed, 658 insertions(+), 470 deletions(-)

diff --git a/build-utils/language-go/src/main/resources/templates/go/model-template.go.ftlh b/build-utils/language-go/src/main/resources/templates/go/model-template.go.ftlh
index da657cb..d39dabc 100644
--- a/build-utils/language-go/src/main/resources/templates/go/model-template.go.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/model-template.go.ftlh
@@ -212,25 +212,182 @@ func (m *${type.name}) GetTypeName() string {
 }
 
 func (m *${type.name}) LengthInBits() uint16 {
+	<#if helper.isDiscriminatedParentTypeDefinition()>
+	return m.Child.LengthInBits()
+	<#else>
+		<#if helper.isDiscriminatedChildTypeDefinition()>
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
+		<#else>
 	lengthInBits := uint16(0)
-	<#list type.fields as field>
-		<#switch field.typeName>
-			<#case "array">
-				<#assign arrayField = field>
+		</#if>
+		<#list type.fields as field>
+			<#switch field.typeName>
+				<#case "array">
+					<#assign arrayField = field>
 
 	// Array field
 	if len(m.${arrayField.name?cap_first}) > 0 {
-			<#assign simpleTypeReference = arrayField.type>
-			<#if helper.getLanguageTypeNameForTypeReference(arrayField.type) = "string">
+				<#assign simpleTypeReference = arrayField.type>
+				<#if helper.getLanguageTypeNameForTypeReference(arrayField.type) = "string">
 		lengthInBits += uint16(${helper.toSerializationExpression(discriminatorField, simpleTypeReference.getLengthExpression(), type.parserArguments)}) * uint16(len(m.${arrayField.name?cap_first}))
-			<#elseif helper.isSimpleTypeReference(arrayField.type)>
+				<#elseif helper.isSimpleTypeReference(arrayField.type)>
 		lengthInBits += ${simpleTypeReference.sizeInBits} * uint16(len(m.${arrayField.name?cap_first}))
-			<#else>
+				<#else>
 		for _, element := range m.${arrayField.name?cap_first} {
 			lengthInBits += element.LengthInBits()
 		}
+				</#if>
+	}
+					<#break>
+				<#case "checksum">
+					<#assign checksumField = field>
+					<#assign simpleTypeReference = checksumField.type>
+
+	// Checksum Field (checksum)
+	lengthInBits += ${simpleTypeReference.sizeInBits}
+					<#break>
+				<#case "const">
+					<#assign constField = field>
+					<#assign simpleTypeReference = constField.type>
+
+	// Const Field (${constField.name})
+				<#if helper.getLanguageTypeNameForTypeReference(constField.type) = "string">
+	lengthInBits += uint16(${helper.toSerializationExpression(discriminatorField, simpleTypeReference.getLengthExpression(), type.parserArguments)})
+				<#else>
+	lengthInBits += ${simpleTypeReference.sizeInBits}
+				</#if>
+					<#break>
+				<#case "discriminator">
+					<#assign discriminatorField = field>
+					<#assign simpleTypeReference = discriminatorField.type>
+	// Discriminator Field (${discriminatorField.name})
+		<#if helper.isSimpleTypeReference(simpleTypeReference)>
+			<#if helper.getLanguageTypeNameForTypeReference(discriminatorField.type) = "String">
+			lengthInBits += uint16(${helper.toSerializationExpression(discriminatorField, simpleTypeReference.getLengthExpression(), type.parserArguments)})
+			<#else>
+			lengthInBits += ${simpleTypeReference.sizeInBits};
 			</#if>
+		<#elseif helper.isEnumField(discriminatorField)>
+		lengthInBits += ${helper.getEnumBaseTypeReference(discriminatorField.type).sizeInBits};
+		<#else>
+		lengthInBits += ${discriminatorField.name}.getLengthInBits();
+		</#if>
+					<#break>
+				<#case "enum">
+					<#assign enumField = field>
+
+	// Enum Field (${enumField.name})
+	lengthInBits += ${helper.getEnumBaseTypeReference(enumField.type).sizeInBits}
+					<#break>
+				<#case "implicit">
+					<#assign implicitField = field>
+					<#assign simpleTypeReference = implicitField.type>
+
+	// Implicit Field (${implicitField.name})
+	lengthInBits += ${simpleTypeReference.sizeInBits}
+					<#break>
+				<#case "manualArray">
+					<#assign manualArrayField = field>
+
+	// Manual Array Field (${manualArrayField.name})
+	lengthInBits += ${helper.toParseExpression(manualArrayField, manualArrayField.lengthExpression, type.parserArguments)} * 8
+					<#break>
+				<#case "manual">
+					<#assign manualField = field>
+
+	// Manual Field (${manualField.name})
+	lengthInBits += ${helper.toParseExpression(manualField, manualField.lengthExpression, type.parserArguments)} * 8
+					<#break>
+				<#case "optional">
+					<#assign optionalField = field>
+
+	// Optional Field (${optionalField.name})
+	if m.${optionalField.name?cap_first} != nil {
+					<#if helper.isSimpleTypeReference(optionalField.type)>
+						<#assign simpleTypeReference = optionalField.type>
+		lengthInBits += ${simpleTypeReference.sizeInBits}
+					<#elseif helper.isEnumField(field)>
+		lengthInBits += ${helper.getEnumBaseTypeReference(optionalField.type).sizeInBits}
+					<#else>
+		lengthInBits += (*m.${optionalField.name?cap_first}).LengthInBits()
+					</#if>
 	}
+					<#break>
+				<#case "padding">
+					<#assign paddingField = field>
+					<#assign simpleTypeReference = paddingField.type>
+
+	// Padding Field (padding)
+			<#-- We're replacing the "lastItem" with 'false' here as the item itself can't know if it is the last -->
+	_timesPadding := uint8(${helper.toSerializationExpression(paddingField, paddingField.paddingCondition, type.parserArguments)?replace("lastItem", "false")})
+	for ;_timesPadding > 0; _timesPadding-- {
+		lengthInBits += ${simpleTypeReference.sizeInBits}
+	}
+					<#break>
+				<#case "reserved">
+					<#assign reservedField = field>
+					<#assign simpleTypeReference = reservedField.type>
+
+	// Reserved Field (reserved)
+	lengthInBits += ${simpleTypeReference.sizeInBits}
+					<#break>
+				<#case "simple">
+					<#assign simpleField = field>
+
+	// Simple field (${simpleField.name})
+					<#if helper.isSimpleTypeReference(simpleField.type)>
+						<#if helper.getLanguageTypeNameForTypeReference(simpleField.type) = "string">
+							<#assign simpleTypeReference = simpleField.type>
+	lengthInBits += uint16(${helper.toSerializationExpression(simpleField, simpleTypeReference.getLengthExpression(), type.parserArguments)})
+						<#else>
+							<#assign simpleTypeReference = simpleField.type>
+	lengthInBits += ${simpleTypeReference.sizeInBits};
+						</#if>
+					<#elseif helper.isEnumField(field)>
+	lengthInBits += ${helper.getEnumBaseTypeReference(simpleField.type).sizeInBits}
+					<#else>
+	lengthInBits += m.${simpleField.name?cap_first}.LengthInBits()
+					</#if>
+					<#break>
+				<#case "switch">
+					<#assign switchField = field>
+
+	// Length of sub-type elements will be added by sub-type...
+	lengthInBits += m.Child.LengthInBits()
+					<#break>
+				<#case "virtual">
+					<#assign virtualField = field>
+
+	// A virtual field doesn't have any in- or output.
+					<#break>
+			</#switch>
+		</#list>
+
+	return lengthInBits
+	</#if>
+}
+
+<#if helper.isDiscriminatedParentTypeDefinition()>
+func (m *${type.name}) ParentLengthInBits() uint16 {
+	lengthInBits := uint16(0)
+	<#list type.fields as field>
+		<#switch field.typeName>
+			<#case "array">
+				<#assign arrayField = field>
+
+	// Array field
+	if len(m.${arrayField.name?cap_first}) > 0 {
+				<#assign simpleTypeReference = arrayField.type>
+				<#if helper.getLanguageTypeNameForTypeReference(arrayField.type) = "string">
+	lengthInBits += uint16(${helper.toSerializationExpression(discriminatorField, simpleTypeReference.getLengthExpression(), type.parserArguments)}) * uint16(len(m.${arrayField.name?cap_first}))
+				<#elseif helper.isSimpleTypeReference(arrayField.type)>
+	lengthInBits += ${simpleTypeReference.sizeInBits} * uint16(len(m.${arrayField.name?cap_first}))
+				<#else>
+	for _, element := range m.${arrayField.name?cap_first} {
+	lengthInBits += element.LengthInBits()
+	}
+				</#if>
+				}
 				<#break>
 			<#case "checksum">
 				<#assign checksumField = field>
@@ -244,27 +401,27 @@ func (m *${type.name}) LengthInBits() uint16 {
 				<#assign simpleTypeReference = constField.type>
 
 	// Const Field (${constField.name})
-			<#if helper.getLanguageTypeNameForTypeReference(constField.type) = "string">
+				<#if helper.getLanguageTypeNameForTypeReference(constField.type) = "string">
 	lengthInBits += uint16(${helper.toSerializationExpression(discriminatorField, simpleTypeReference.getLengthExpression(), type.parserArguments)})
-			<#else>
+				<#else>
 	lengthInBits += ${simpleTypeReference.sizeInBits}
-			</#if>
+				</#if>
 				<#break>
 			<#case "discriminator">
 				<#assign discriminatorField = field>
 				<#assign simpleTypeReference = discriminatorField.type>
 	// Discriminator Field (${discriminatorField.name})
-	<#if helper.isSimpleTypeReference(simpleTypeReference)>
-		<#if helper.getLanguageTypeNameForTypeReference(discriminatorField.type) = "String">
-			lengthInBits += uint16(${helper.toSerializationExpression(discriminatorField, simpleTypeReference.getLengthExpression(), type.parserArguments)})
-		<#else>
-			lengthInBits += ${simpleTypeReference.sizeInBits};
-		</#if>
-	<#elseif helper.isEnumField(discriminatorField)>
-		lengthInBits += ${helper.getEnumBaseTypeReference(discriminatorField.type).sizeInBits};
-	<#else>
-		lengthInBits += ${discriminatorField.name}.getLengthInBits();
-	</#if>
+				<#if helper.isSimpleTypeReference(simpleTypeReference)>
+					<#if helper.getLanguageTypeNameForTypeReference(discriminatorField.type) = "String">
+	lengthInBits += uint16(${helper.toSerializationExpression(discriminatorField, simpleTypeReference.getLengthExpression(), type.parserArguments)})
+					<#else>
+	lengthInBits += ${simpleTypeReference.sizeInBits};
+					</#if>
+				<#elseif helper.isEnumField(discriminatorField)>
+	lengthInBits += ${helper.getEnumBaseTypeReference(discriminatorField.type).sizeInBits};
+				<#else>
+	lengthInBits += ${discriminatorField.name}.getLengthInBits();
+				</#if>
 				<#break>
 			<#case "enum">
 				<#assign enumField = field>
@@ -311,7 +468,7 @@ func (m *${type.name}) LengthInBits() uint16 {
 				<#assign simpleTypeReference = paddingField.type>
 
 	// Padding Field (padding)
-			<#-- We're replacing the "lastItem" with 'false' here as the item itself can't know if it is the last -->
+				<#-- We're replacing the "lastItem" with 'false' here as the item itself can't know if it is the last -->
 	_timesPadding := uint8(${helper.toSerializationExpression(paddingField, paddingField.paddingCondition, type.parserArguments)?replace("lastItem", "false")})
 	for ;_timesPadding > 0; _timesPadding-- {
 		lengthInBits += ${simpleTypeReference.sizeInBits}
@@ -342,12 +499,6 @@ func (m *${type.name}) LengthInBits() uint16 {
 	lengthInBits += m.${simpleField.name?cap_first}.LengthInBits()
 				</#if>
 				<#break>
-			<#case "switch">
-				<#assign switchField = field>
-
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-				<#break>
 			<#case "virtual">
 				<#assign virtualField = field>
 
@@ -358,6 +509,7 @@ func (m *${type.name}) LengthInBits() uint16 {
 
 	return lengthInBits
 }
+</#if>
 
 func (m *${type.name}) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
diff --git a/go.mod b/go.mod
index 7cf8cac..975b1b7 100644
--- a/go.mod
+++ b/go.mod
@@ -21,6 +21,6 @@ module github.com/apache/plc4x
 go 1.15
 
 require (
-	github.com/apache/plc4x/plc4go v0.0.0-20210414131957-315d32327b67 // indirect
+	github.com/apache/plc4x/plc4go v0.0.0-20210414142028-1a71fd546e6f // indirect
 	github.com/sirupsen/logrus v1.7.0 // indirect
 )
diff --git a/go.sum b/go.sum
index 5329c5f..c4e524d 100644
--- a/go.sum
+++ b/go.sum
@@ -58,6 +58,8 @@ github.com/apache/plc4x/plc4go v0.0.0-20210414092738-699b72764350 h1:pFL0QyxGyCi
 github.com/apache/plc4x/plc4go v0.0.0-20210414092738-699b72764350/go.mod h1:NfO8uGKPGwDxn1GqOb4oNhAtPF7St1A9LRk1J/qSlWU=
 github.com/apache/plc4x/plc4go v0.0.0-20210414131957-315d32327b67 h1:az5pU0RxfOoJ7uuSS/uKnWrDieyI0JFnZ4PuKTcXHbI=
 github.com/apache/plc4x/plc4go v0.0.0-20210414131957-315d32327b67/go.mod h1:NfO8uGKPGwDxn1GqOb4oNhAtPF7St1A9LRk1J/qSlWU=
+github.com/apache/plc4x/plc4go v0.0.0-20210414142028-1a71fd546e6f h1:1yt/bAzOyiuWgliEl9xsf7izdLVQtp5HIm3R1NaVONY=
+github.com/apache/plc4x/plc4go v0.0.0-20210414142028-1a71fd546e6f/go.mod h1:NfO8uGKPGwDxn1GqOb4oNhAtPF7St1A9LRk1J/qSlWU=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dnephin/pflag v1.0.7/go.mod h1:uxE91IoWURlOiTUIA8Mq5ZZkAv3dPUfZNaT80Zm7OQE=
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
index 52ab07a..4432d53 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationRequest.go
@@ -101,7 +101,7 @@ func (m *AdsAddDeviceNotificationRequest) GetTypeName() string {
 }
 
 func (m *AdsAddDeviceNotificationRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (indexGroup)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
index 10e4ed0..035fd64 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsAddDeviceNotificationResponse.go
@@ -91,7 +91,7 @@ func (m *AdsAddDeviceNotificationResponse) GetTypeName() string {
 }
 
 func (m *AdsAddDeviceNotificationResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (result)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
index 2c4e61f..7b456cd 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsData.go
@@ -79,10 +79,11 @@ func (m *AdsData) GetTypeName() string {
 }
 
 func (m *AdsData) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	return m.Child.LengthInBits()
+}
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
+func (m *AdsData) ParentLengthInBits() uint16 {
+	lengthInBits := uint16(0)
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
index 180c488..5cfb44d 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationRequest.go
@@ -89,7 +89,7 @@ func (m *AdsDeleteDeviceNotificationRequest) GetTypeName() string {
 }
 
 func (m *AdsDeleteDeviceNotificationRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (notificationHandle)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
index 905265a..3d203cf 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeleteDeviceNotificationResponse.go
@@ -89,7 +89,7 @@ func (m *AdsDeleteDeviceNotificationResponse) GetTypeName() string {
 }
 
 func (m *AdsDeleteDeviceNotificationResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (result)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
index 3bf7be3..f19283c 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
@@ -93,7 +93,7 @@ func (m *AdsDeviceNotificationRequest) GetTypeName() string {
 }
 
 func (m *AdsDeviceNotificationRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (length)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
index 9daedf1..cb1a850 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationResponse.go
@@ -86,7 +86,7 @@ func (m *AdsDeviceNotificationResponse) GetTypeName() string {
 }
 
 func (m *AdsDeviceNotificationResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
index ff34818..bb64cd6 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidRequest.go
@@ -86,7 +86,7 @@ func (m *AdsInvalidRequest) GetTypeName() string {
 }
 
 func (m *AdsInvalidRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
index ae346d3..5b8fdad 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsInvalidResponse.go
@@ -86,7 +86,7 @@ func (m *AdsInvalidResponse) GetTypeName() string {
 }
 
 func (m *AdsInvalidResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
index 67002f0..37ad213 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItem.go
@@ -78,10 +78,11 @@ func (m *AdsMultiRequestItem) GetTypeName() string {
 }
 
 func (m *AdsMultiRequestItem) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	return m.Child.LengthInBits()
+}
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
+func (m *AdsMultiRequestItem) ParentLengthInBits() uint16 {
+	lengthInBits := uint16(0)
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
index 2c43eb5..fb46383 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemRead.go
@@ -89,7 +89,7 @@ func (m *AdsMultiRequestItemRead) GetTypeName() string {
 }
 
 func (m *AdsMultiRequestItemRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (itemIndexGroup)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
index c4ab08d..19f4c48 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemReadWrite.go
@@ -91,7 +91,7 @@ func (m *AdsMultiRequestItemReadWrite) GetTypeName() string {
 }
 
 func (m *AdsMultiRequestItemReadWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (itemIndexGroup)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
index 871b8c2..7deb864 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsMultiRequestItemWrite.go
@@ -89,7 +89,7 @@ func (m *AdsMultiRequestItemWrite) GetTypeName() string {
 }
 
 func (m *AdsMultiRequestItemWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (itemIndexGroup)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
index 6f94827..946e92f 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoRequest.go
@@ -86,7 +86,7 @@ func (m *AdsReadDeviceInfoRequest) GetTypeName() string {
 }
 
 func (m *AdsReadDeviceInfoRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
index f65ace1..659aaaf 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
@@ -99,7 +99,7 @@ func (m *AdsReadDeviceInfoResponse) GetTypeName() string {
 }
 
 func (m *AdsReadDeviceInfoResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (result)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
index 625b378..b9fe4c2 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go
@@ -93,7 +93,7 @@ func (m *AdsReadRequest) GetTypeName() string {
 }
 
 func (m *AdsReadRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (indexGroup)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
index 97cfdbe..62dbc57 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
@@ -93,7 +93,7 @@ func (m *AdsReadResponse) GetTypeName() string {
 }
 
 func (m *AdsReadResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (result)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
index c4530c1..5feb84e 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateRequest.go
@@ -86,7 +86,7 @@ func (m *AdsReadStateRequest) GetTypeName() string {
 }
 
 func (m *AdsReadStateRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
index e0080a4..0ca90a4 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadStateResponse.go
@@ -93,7 +93,7 @@ func (m *AdsReadStateResponse) GetTypeName() string {
 }
 
 func (m *AdsReadStateResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (result)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
index 8092c20..83f7676 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
@@ -99,7 +99,7 @@ func (m *AdsReadWriteRequest) GetTypeName() string {
 }
 
 func (m *AdsReadWriteRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (indexGroup)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
index 45aa001..a8d6fdb 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
@@ -93,7 +93,7 @@ func (m *AdsReadWriteResponse) GetTypeName() string {
 }
 
 func (m *AdsReadWriteResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (result)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
index 656a261..45223d7 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
@@ -95,7 +95,7 @@ func (m *AdsWriteControlRequest) GetTypeName() string {
 }
 
 func (m *AdsWriteControlRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (adsState)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go
index a02fc04..4191ada 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlResponse.go
@@ -89,7 +89,7 @@ func (m *AdsWriteControlResponse) GetTypeName() string {
 }
 
 func (m *AdsWriteControlResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (result)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
index ece8f33..df99cec 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
@@ -95,7 +95,7 @@ func (m *AdsWriteRequest) GetTypeName() string {
 }
 
 func (m *AdsWriteRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (indexGroup)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go
index aec84bb..eb5040f 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteResponse.go
@@ -89,7 +89,7 @@ func (m *AdsWriteResponse) GetTypeName() string {
 }
 
 func (m *AdsWriteResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (result)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
index 281a45f..f967ed8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
@@ -78,13 +78,14 @@ func (m *APDU) GetTypeName() string {
 }
 
 func (m *APDU) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *APDU) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (apduType)
 	lengthInBits += 4
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
index be36ef0..66faff6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
@@ -90,7 +90,7 @@ func (m *APDUAbort) GetTypeName() string {
 }
 
 func (m *APDUAbort) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Reserved Field (reserved)
 	lengthInBits += 3
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
index 6ca808f..4f5544b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
@@ -97,7 +97,7 @@ func (m *APDUComplexAck) GetTypeName() string {
 }
 
 func (m *APDUComplexAck) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (segmentedMessage)
 	lengthInBits += 1
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
index bc008ae..a5278b9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
@@ -103,7 +103,7 @@ func (m *APDUConfirmedRequest) GetTypeName() string {
 }
 
 func (m *APDUConfirmedRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (segmentedMessage)
 	lengthInBits += 1
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
index fb78d8f..b1a511f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
@@ -88,7 +88,7 @@ func (m *APDUError) GetTypeName() string {
 }
 
 func (m *APDUError) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Reserved Field (reserved)
 	lengthInBits += 4
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
index 4d43940..40ce589 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
@@ -88,7 +88,7 @@ func (m *APDUReject) GetTypeName() string {
 }
 
 func (m *APDUReject) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Reserved Field (reserved)
 	lengthInBits += 4
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
index bd69c9b..2fbded4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
@@ -94,7 +94,7 @@ func (m *APDUSegmentAck) GetTypeName() string {
 }
 
 func (m *APDUSegmentAck) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Reserved Field (reserved)
 	lengthInBits += 2
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
index 7f9f356..15f3250 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
@@ -88,7 +88,7 @@ func (m *APDUSimpleAck) GetTypeName() string {
 }
 
 func (m *APDUSimpleAck) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Reserved Field (reserved)
 	lengthInBits += 4
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
index ad5e2b0..c951864 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
@@ -86,7 +86,7 @@ func (m *APDUUnconfirmedRequest) GetTypeName() string {
 }
 
 func (m *APDUUnconfirmedRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Reserved Field (reserved)
 	lengthInBits += 4
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
index eba9c21..50d5c62 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
@@ -78,13 +78,14 @@ func (m *BACnetConfirmedServiceACK) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACK) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *BACnetConfirmedServiceACK) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (serviceChoice)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
index 93815c4..eb6caf8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKAtomicReadFile) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACKAtomicReadFile) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
index f6ab0ef..96effd1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKAtomicWriteFile) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACKAtomicWriteFile) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
index 420298a..c41d8d0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKConfirmedPrivateTransfer) GetTypeName() string
 }
 
 func (m *BACnetConfirmedServiceACKConfirmedPrivateTransfer) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
index fb3a684..74bc70a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKCreateObject) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACKCreateObject) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
index ba18448..afaf875 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKGetAlarmSummary) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACKGetAlarmSummary) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
index c6eb5ad..a68f1bb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKGetEnrollmentSummary) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACKGetEnrollmentSummary) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
index 93ae915..b5b78a4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKGetEventInformation) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACKGetEventInformation) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
index 81ee25b..6a21acf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKReadProperty) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACKReadProperty) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
index a80f7f1..fb358e3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKReadPropertyMultiple) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACKReadPropertyMultiple) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
index 2949916..8f6ce59 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKReadRange) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACKReadRange) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
index 12bafe2..c3fba12 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKRemovedAuthenticate) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACKRemovedAuthenticate) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
index 186d5a7..7727c64 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKRemovedReadPropertyConditional) GetTypeName()
 }
 
 func (m *BACnetConfirmedServiceACKRemovedReadPropertyConditional) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
index d9670e6..feb91dc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKVTData) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACKVTData) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
index 6483154..4d1c612 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceACKVTOpen) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceACKVTOpen) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
index 19df267..a080a5d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
@@ -78,13 +78,14 @@ func (m *BACnetConfirmedServiceRequest) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequest) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *BACnetConfirmedServiceRequest) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (serviceChoice)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
index a984f78..a1734e0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestAcknowledgeAlarm) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestAcknowledgeAlarm) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
index 8658e32..b1fd6e1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestAddListElement) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestAddListElement) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
index 8af16b6..ae1f4f6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestAtomicReadFile) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestAtomicReadFile) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
index 2aedd09..af84c66 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestAtomicWriteFile) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestAtomicWriteFile) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
index 85690b6..ef2d0de 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
@@ -110,7 +110,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) GetTypeName() st
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (subscriberProcessIdentifierHeader)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
index 7d22daa..18d292d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) GetTypeN
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
index 73af806..10f78c1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedEventNotification) GetTypeName()
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedEventNotification) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
index e5382c9..1c45d71 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) GetTypeName() st
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedPrivateTransfer) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
index e54107b..8223f6a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedTextMessage) GetTypeName() string
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedTextMessage) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
index 3517753..665a13e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestCreateObject) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestCreateObject) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
index 6aa444a..ba6239a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestDeleteObject) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestDeleteObject) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
index b78d708..dd182bc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestDeviceCommunicationControl) GetTypeName()
 }
 
 func (m *BACnetConfirmedServiceRequestDeviceCommunicationControl) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
index 1b77272..bd3508e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestGetEnrollmentSummary) GetTypeName() string
 }
 
 func (m *BACnetConfirmedServiceRequestGetEnrollmentSummary) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
index 1d672dd..4f2eff8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestGetEventInformation) GetTypeName() string
 }
 
 func (m *BACnetConfirmedServiceRequestGetEventInformation) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
index d4fe436..80f6c58 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestLifeSafetyOperation) GetTypeName() string
 }
 
 func (m *BACnetConfirmedServiceRequestLifeSafetyOperation) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
index 73118cb..21b0a32 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
@@ -98,7 +98,7 @@ func (m *BACnetConfirmedServiceRequestReadProperty) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestReadProperty) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (objectIdentifierHeader)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
index ec3f8a1..b5a0801 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestReadPropertyMultiple) GetTypeName() string
 }
 
 func (m *BACnetConfirmedServiceRequestReadPropertyMultiple) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
index 8837f03..be39365 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestReadRange) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestReadRange) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
index 9f88975..a603fa9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestReinitializeDevice) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestReinitializeDevice) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
index d46854e..4daf4c3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestRemoveListElement) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestRemoveListElement) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
index eb7de32..f7cc013 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestRemovedAuthenticate) GetTypeName() string
 }
 
 func (m *BACnetConfirmedServiceRequestRemovedAuthenticate) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
index affac54..df6e4eb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestRemovedReadPropertyConditional) GetTypeNam
 }
 
 func (m *BACnetConfirmedServiceRequestRemovedReadPropertyConditional) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
index 763dd20..0ce91d1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestRemovedRequestKey) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestRemovedRequestKey) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
index cb3c9ea..0f61a06 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
@@ -105,7 +105,7 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOV) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestSubscribeCOV) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (subscriberProcessIdentifierHeader)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
index 4fae317..6f9e9e4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) GetTypeName() string
 }
 
 func (m *BACnetConfirmedServiceRequestSubscribeCOVProperty) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
index ae3dea4..28a5fb5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetTypeName(
 }
 
 func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
index 377f53b..64f22ed 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestVTClose) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestVTClose) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
index 423e8e6..a53399b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestVTData) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestVTData) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
index 3734fbb..367690a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestVTOpen) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestVTOpen) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
index 96722c7..a30a5d5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
@@ -104,7 +104,7 @@ func (m *BACnetConfirmedServiceRequestWriteProperty) GetTypeName() string {
 }
 
 func (m *BACnetConfirmedServiceRequestWriteProperty) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (objectIdentifierHeader)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
index 9227534..071fc04 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
@@ -82,7 +82,7 @@ func (m *BACnetConfirmedServiceRequestWritePropertyMultiple) GetTypeName() strin
 }
 
 func (m *BACnetConfirmedServiceRequestWritePropertyMultiple) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
index 51f3400..7c7d127 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
@@ -78,13 +78,14 @@ func (m *BACnetError) GetTypeName() string {
 }
 
 func (m *BACnetError) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *BACnetError) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (serviceChoice)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
index bc8646e..040ee74 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorAtomicReadFile) GetTypeName() string {
 }
 
 func (m *BACnetErrorAtomicReadFile) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
index 6c79ec5..d22e607 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorAtomicWriteFile) GetTypeName() string {
 }
 
 func (m *BACnetErrorAtomicWriteFile) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
index d13fca6..1bfa2ef 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorConfirmedPrivateTransfer) GetTypeName() string {
 }
 
 func (m *BACnetErrorConfirmedPrivateTransfer) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
index 091e3bf..1ea7ae8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorCreateObject) GetTypeName() string {
 }
 
 func (m *BACnetErrorCreateObject) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
index 5a36091..56eee04 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorGetAlarmSummary) GetTypeName() string {
 }
 
 func (m *BACnetErrorGetAlarmSummary) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
index 78760ff..3ff934a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorGetEnrollmentSummary) GetTypeName() string {
 }
 
 func (m *BACnetErrorGetEnrollmentSummary) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
index 2d5e066..c22a5da 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorGetEventInformation) GetTypeName() string {
 }
 
 func (m *BACnetErrorGetEventInformation) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
index d00cbf0..4b0d77c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
@@ -98,7 +98,7 @@ func (m *BACnetErrorReadProperty) GetTypeName() string {
 }
 
 func (m *BACnetErrorReadProperty) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (errorClassHeader)
 	lengthInBits += 5
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
index 34d52eb..689d58c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorReadPropertyMultiple) GetTypeName() string {
 }
 
 func (m *BACnetErrorReadPropertyMultiple) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
index 04c8973..cc1fb8f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorReadRange) GetTypeName() string {
 }
 
 func (m *BACnetErrorReadRange) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
index dfa2d53..98d56d9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorRemovedAuthenticate) GetTypeName() string {
 }
 
 func (m *BACnetErrorRemovedAuthenticate) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
index 4703ba2..d61db04 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorRemovedReadPropertyConditional) GetTypeName() string {
 }
 
 func (m *BACnetErrorRemovedReadPropertyConditional) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
index d7df3b9..1d695b2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorVTData) GetTypeName() string {
 }
 
 func (m *BACnetErrorVTData) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
index c38cd3b..848568e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
@@ -82,7 +82,7 @@ func (m *BACnetErrorVTOpen) GetTypeName() string {
 }
 
 func (m *BACnetErrorVTOpen) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
index c7b12d6..cab27aa 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
@@ -78,13 +78,14 @@ func (m *BACnetServiceAck) GetTypeName() string {
 }
 
 func (m *BACnetServiceAck) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *BACnetServiceAck) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (serviceChoice)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
index b993c19..aba9d11 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckAtomicReadFile) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckAtomicReadFile) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
index 16ec433..a24d939 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckAtomicWriteFile) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckAtomicWriteFile) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
index c309f5f..000b0fd 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckConfirmedPrivateTransfer) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckConfirmedPrivateTransfer) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
index 2bb2c6e..528f1c8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckCreateObject) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckCreateObject) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
index 054633d..633b9cb 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckGetAlarmSummary) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckGetAlarmSummary) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
index de0f307..8fa282b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckGetEnrollmentSummary) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckGetEnrollmentSummary) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
index 51cd129..9302015 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckGetEventInformation) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckGetEventInformation) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
index 26e6afe..539545e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
@@ -102,7 +102,7 @@ func (m *BACnetServiceAckReadProperty) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckReadProperty) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (objectIdentifierHeader)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
index b7df0a3..8d1c73e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckReadPropertyMultiple) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckReadPropertyMultiple) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
index 57a3125..794a186 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckReadRange) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckReadRange) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
index b9edb79..92f1760 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckRemovedAuthenticate) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckRemovedAuthenticate) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
index d5f7181..ec2f808 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckRemovedReadPropertyConditional) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckRemovedReadPropertyConditional) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
index cf545eb..bfce30d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckVTData) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckVTData) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
index 7f7527b..f7eae0c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
@@ -82,7 +82,7 @@ func (m *BACnetServiceAckVTOpen) GetTypeName() string {
 }
 
 func (m *BACnetServiceAckVTOpen) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
index 235abbb..fbe40f5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
@@ -83,6 +83,10 @@ func (m *BACnetTag) GetTypeName() string {
 }
 
 func (m *BACnetTag) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *BACnetTag) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 
 	// Simple field (typeOrTagNumber)
@@ -103,9 +107,6 @@ func (m *BACnetTag) LengthInBits() uint16 {
 		lengthInBits += 8
 	}
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
index 1c88f8c..2fede74 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
@@ -93,7 +93,7 @@ func (m *BACnetTagApplicationBitString) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationBitString) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (unusedBits)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
index 36d0d0d..6f563ab 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
@@ -86,7 +86,7 @@ func (m *BACnetTagApplicationBoolean) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationBoolean) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
index ce2d8bf..0b13514 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
@@ -86,7 +86,7 @@ func (m *BACnetTagApplicationCharacterString) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationCharacterString) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
index 120be48..7c05ba5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
@@ -86,7 +86,7 @@ func (m *BACnetTagApplicationDate) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationDate) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
index b8045d8..c5e7d44 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
@@ -89,7 +89,7 @@ func (m *BACnetTagApplicationDouble) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationDouble) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (value)
 	lengthInBits += 64
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
index f0d388d..4dbecde 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
@@ -91,7 +91,7 @@ func (m *BACnetTagApplicationEnumerated) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationEnumerated) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.Data) > 0 {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
index 1989a1d..53a51d4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
@@ -86,7 +86,7 @@ func (m *BACnetTagApplicationNull) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationNull) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
index 415ee4f..d395772 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
@@ -86,7 +86,7 @@ func (m *BACnetTagApplicationObjectIdentifier) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationObjectIdentifier) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
index 77c0449..192f556 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationOctetString.go
@@ -86,7 +86,7 @@ func (m *BACnetTagApplicationOctetString) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationOctetString) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
index f01b7ba..8db380a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationReal.go
@@ -89,7 +89,7 @@ func (m *BACnetTagApplicationReal) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationReal) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (value)
 	lengthInBits += 32
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
index 8433c28..d9cda65 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
@@ -91,7 +91,7 @@ func (m *BACnetTagApplicationSignedInteger) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationSignedInteger) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.Data) > 0 {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go
index 4b217bc..5e3d909 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationTime.go
@@ -86,7 +86,7 @@ func (m *BACnetTagApplicationTime) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationTime) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
index e2abf68..a2bb70f 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
@@ -91,7 +91,7 @@ func (m *BACnetTagApplicationUnsignedInteger) GetTypeName() string {
 }
 
 func (m *BACnetTagApplicationUnsignedInteger) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.Data) > 0 {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
index cb50d41..aaa1437 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
@@ -91,7 +91,7 @@ func (m *BACnetTagContext) GetTypeName() string {
 }
 
 func (m *BACnetTagContext) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.Data) > 0 {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
index bbd9c8b..e2020ec 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
@@ -78,13 +78,14 @@ func (m *BACnetUnconfirmedServiceRequest) GetTypeName() string {
 }
 
 func (m *BACnetUnconfirmedServiceRequest) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *BACnetUnconfirmedServiceRequest) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (serviceChoice)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
index ad4ae32..f951806 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
@@ -104,7 +104,7 @@ func (m *BACnetUnconfirmedServiceRequestIAm) GetTypeName() string {
 }
 
 func (m *BACnetUnconfirmedServiceRequestIAm) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (objectIdentifierHeader)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
index a306795..5823aaa 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIHave.go
@@ -82,7 +82,7 @@ func (m *BACnetUnconfirmedServiceRequestIHave) GetTypeName() string {
 }
 
 func (m *BACnetUnconfirmedServiceRequestIHave) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
index b452627..2693981 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestTimeSynchronization.go
@@ -82,7 +82,7 @@ func (m *BACnetUnconfirmedServiceRequestTimeSynchronization) GetTypeName() strin
 }
 
 func (m *BACnetUnconfirmedServiceRequestTimeSynchronization) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
index 01c27c3..2761382 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUTCTimeSynchronization.go
@@ -82,7 +82,7 @@ func (m *BACnetUnconfirmedServiceRequestUTCTimeSynchronization) GetTypeName() st
 }
 
 func (m *BACnetUnconfirmedServiceRequestUTCTimeSynchronization) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
index 1de0c1c..f7fe20c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
@@ -82,7 +82,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) GetTypeName(
 }
 
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
index 1a364b9..21504cf 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple.go
@@ -82,7 +82,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple) GetT
 }
 
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationMultiple) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
index 3172288..d9db19c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedEventNotification.go
@@ -82,7 +82,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedEventNotification) GetTypeNam
 }
 
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedEventNotification) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
index 622ba72..06d0ac1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
@@ -98,7 +98,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer) GetTypeName(
 }
 
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (vendorIdHeader)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
index 3f0cd62..fc83f45 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedTextMessage.go
@@ -82,7 +82,7 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedTextMessage) GetTypeName() st
 }
 
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedTextMessage) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
index 6a9ec06..e8cd5f7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
@@ -99,7 +99,7 @@ func (m *BACnetUnconfirmedServiceRequestWhoHas) GetTypeName() string {
 }
 
 func (m *BACnetUnconfirmedServiceRequestWhoHas) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (deviceInstanceLowLimitHeader)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
index 68a8ee2..c668097 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
@@ -98,7 +98,7 @@ func (m *BACnetUnconfirmedServiceRequestWhoIs) GetTypeName() string {
 }
 
 func (m *BACnetUnconfirmedServiceRequestWhoIs) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (deviceInstanceRangeLowLimitHeader)
 	lengthInBits += 5
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
index 8f1e710..2be663a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWriteGroup.go
@@ -82,7 +82,7 @@ func (m *BACnetUnconfirmedServiceRequestWriteGroup) GetTypeName() string {
 }
 
 func (m *BACnetUnconfirmedServiceRequestWriteGroup) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
index 12c4b60..ba0a3aa 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLC.go
@@ -82,6 +82,10 @@ func (m *BVLC) GetTypeName() string {
 }
 
 func (m *BVLC) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *BVLC) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 
 	// Const Field (bacnetType)
@@ -92,9 +96,6 @@ func (m *BVLC) LengthInBits() uint16 {
 	// Implicit Field (bvlcLength)
 	lengthInBits += 16
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
index 94714f5..1c83bd3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDeleteForeignDeviceTableEntry.go
@@ -82,7 +82,7 @@ func (m *BVLCDeleteForeignDeviceTableEntry) GetTypeName() string {
 }
 
 func (m *BVLCDeleteForeignDeviceTableEntry) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
index 3644a0e..a6e3d48 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCDistributeBroadcastToNetwork.go
@@ -82,7 +82,7 @@ func (m *BVLCDistributeBroadcastToNetwork) GetTypeName() string {
 }
 
 func (m *BVLCDistributeBroadcastToNetwork) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
index 267d93d..8f9f33d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
@@ -89,7 +89,7 @@ func (m *BVLCForwardedNPDU) GetTypeName() string {
 }
 
 func (m *BVLCForwardedNPDU) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.Ip) > 0 {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
index cdcfeab..ed9e534 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalBroadcastNPDU.go
@@ -85,7 +85,7 @@ func (m *BVLCOriginalBroadcastNPDU) GetTypeName() string {
 }
 
 func (m *BVLCOriginalBroadcastNPDU) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (npdu)
 	lengthInBits += m.Npdu.LengthInBits()
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
index 7207c65..6e68d66 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCOriginalUnicastNPDU.go
@@ -85,7 +85,7 @@ func (m *BVLCOriginalUnicastNPDU) GetTypeName() string {
 }
 
 func (m *BVLCOriginalUnicastNPDU) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (npdu)
 	lengthInBits += m.Npdu.LengthInBits()
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
index 3ed3144..4029628 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTable.go
@@ -82,7 +82,7 @@ func (m *BVLCReadBroadcastDistributionTable) GetTypeName() string {
 }
 
 func (m *BVLCReadBroadcastDistributionTable) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
index 13d20b9..ec0abae 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadBroadcastDistributionTableAck.go
@@ -82,7 +82,7 @@ func (m *BVLCReadBroadcastDistributionTableAck) GetTypeName() string {
 }
 
 func (m *BVLCReadBroadcastDistributionTableAck) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
index b64fc4b..8210fd6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTable.go
@@ -82,7 +82,7 @@ func (m *BVLCReadForeignDeviceTable) GetTypeName() string {
 }
 
 func (m *BVLCReadForeignDeviceTable) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
index eadd85f..869f9cc 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCReadForeignDeviceTableAck.go
@@ -82,7 +82,7 @@ func (m *BVLCReadForeignDeviceTableAck) GetTypeName() string {
 }
 
 func (m *BVLCReadForeignDeviceTableAck) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
index 0b3323b..bc85cb5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCRegisterForeignDevice.go
@@ -82,7 +82,7 @@ func (m *BVLCRegisterForeignDevice) GetTypeName() string {
 }
 
 func (m *BVLCRegisterForeignDevice) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
index a7c9312..2f55ac1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCResult.go
@@ -82,7 +82,7 @@ func (m *BVLCResult) GetTypeName() string {
 }
 
 func (m *BVLCResult) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
index 4090baa..972bb2c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCSecureBVLL.go
@@ -82,7 +82,7 @@ func (m *BVLCSecureBVLL) GetTypeName() string {
 }
 
 func (m *BVLCSecureBVLL) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go
index 50a5a37..d043a2b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCWideBroadcastDistributionTable.go
@@ -82,7 +82,7 @@ func (m *BVLCWideBroadcastDistributionTable) GetTypeName() string {
 }
 
 func (m *BVLCWideBroadcastDistributionTable) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
index 046ddc1..a38fa69 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLM.go
@@ -80,6 +80,10 @@ func (m *NLM) GetTypeName() string {
 }
 
 func (m *NLM) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *NLM) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (messageType)
 	lengthInBits += 8
@@ -89,9 +93,6 @@ func (m *NLM) LengthInBits() uint16 {
 		lengthInBits += 16
 	}
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
index a4af18f..a1dfc0b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
@@ -86,7 +86,7 @@ func (m *NLMIAmRouterToNetwork) GetTypeName() string {
 }
 
 func (m *NLMIAmRouterToNetwork) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.DestinationNetworkAddress) > 0 {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
index ddd3862..8d93131 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
@@ -86,7 +86,7 @@ func (m *NLMWhoIsRouterToNetwork) GetTypeName() string {
 }
 
 func (m *NLMWhoIsRouterToNetwork) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.DestinationNetworkAddress) > 0 {
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go
index c78292f..caf202d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/Apdu.go
@@ -80,6 +80,10 @@ func (m *Apdu) GetTypeName() string {
 }
 
 func (m *Apdu) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *Apdu) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (control)
 	lengthInBits += 1
@@ -90,9 +94,6 @@ func (m *Apdu) LengthInBits() uint16 {
 	// Simple field (counter)
 	lengthInBits += 4
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControl.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControl.go
index f150501..f34b686 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControl.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControl.go
@@ -78,13 +78,14 @@ func (m *ApduControl) GetTypeName() string {
 }
 
 func (m *ApduControl) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *ApduControl) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (controlType)
 	lengthInBits += 2
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlAck.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlAck.go
index e19fe6a..5cd6779 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlAck.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlAck.go
@@ -82,7 +82,7 @@ func (m *ApduControlAck) GetTypeName() string {
 }
 
 func (m *ApduControlAck) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlConnect.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlConnect.go
index 65f2c4f..c12271f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlConnect.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlConnect.go
@@ -82,7 +82,7 @@ func (m *ApduControlConnect) GetTypeName() string {
 }
 
 func (m *ApduControlConnect) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go
index 7c6c74b..7ae6413 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlContainer.go
@@ -87,7 +87,7 @@ func (m *ApduControlContainer) GetTypeName() string {
 }
 
 func (m *ApduControlContainer) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (controlApdu)
 	lengthInBits += m.ControlApdu.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlDisconnect.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlDisconnect.go
index 267f2a7..9e3c3b2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlDisconnect.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlDisconnect.go
@@ -82,7 +82,7 @@ func (m *ApduControlDisconnect) GetTypeName() string {
 }
 
 func (m *ApduControlDisconnect) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlNack.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlNack.go
index cd679d3..92139af 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlNack.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduControlNack.go
@@ -82,7 +82,7 @@ func (m *ApduControlNack) GetTypeName() string {
 }
 
 func (m *ApduControlNack) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
index ad418e2..84b12b7 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduData.go
@@ -78,13 +78,14 @@ func (m *ApduData) GetTypeName() string {
 }
 
 func (m *ApduData) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *ApduData) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (apciType)
 	lengthInBits += 4
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go
index e405d87..34864a2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcRead.go
@@ -82,7 +82,7 @@ func (m *ApduDataAdcRead) GetTypeName() string {
 }
 
 func (m *ApduDataAdcRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcResponse.go
index 3cf7f93..a398d5e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataAdcResponse.go
@@ -82,7 +82,7 @@ func (m *ApduDataAdcResponse) GetTypeName() string {
 }
 
 func (m *ApduDataAdcResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataContainer.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataContainer.go
index 96913b3..6de3d06 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataContainer.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataContainer.go
@@ -87,7 +87,7 @@ func (m *ApduDataContainer) GetTypeName() string {
 }
 
 func (m *ApduDataContainer) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (dataApdu)
 	lengthInBits += m.DataApdu.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go
index f56a658..4e601f4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorRead.go
@@ -85,7 +85,7 @@ func (m *ApduDataDeviceDescriptorRead) GetTypeName() string {
 }
 
 func (m *ApduDataDeviceDescriptorRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (descriptorType)
 	lengthInBits += 6
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
index 912fe0c..972275c 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
@@ -89,7 +89,7 @@ func (m *ApduDataDeviceDescriptorResponse) GetTypeName() string {
 }
 
 func (m *ApduDataDeviceDescriptorResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (descriptorType)
 	lengthInBits += 6
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go
index 47cfa77..d4e46bb 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExt.go
@@ -78,13 +78,14 @@ func (m *ApduDataExt) GetTypeName() string {
 }
 
 func (m *ApduDataExt) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *ApduDataExt) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (extApciType)
 	lengthInBits += 6
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
index aab3284..77bf0ca 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
@@ -87,7 +87,7 @@ func (m *ApduDataExtAuthorizeRequest) GetTypeName() string {
 }
 
 func (m *ApduDataExtAuthorizeRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (level)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeResponse.go
index 3c7a393..7297151 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeResponse.go
@@ -85,7 +85,7 @@ func (m *ApduDataExtAuthorizeResponse) GetTypeName() string {
 }
 
 func (m *ApduDataExtAuthorizeResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (level)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressRead.go
index a9033d5..54da957 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressRead.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtDomainAddressRead) GetTypeName() string {
 }
 
 func (m *ApduDataExtDomainAddressRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressResponse.go
index 6ba4c69..0b05429 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressResponse.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtDomainAddressResponse) GetTypeName() string {
 }
 
 func (m *ApduDataExtDomainAddressResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSelectiveRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSelectiveRead.go
index bcaeaae..04bde75 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSelectiveRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSelectiveRead.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtDomainAddressSelectiveRead) GetTypeName() string {
 }
 
 func (m *ApduDataExtDomainAddressSelectiveRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberRead.go
index f3f18f6..c349bab 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberRead.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtDomainAddressSerialNumberRead) GetTypeName() string {
 }
 
 func (m *ApduDataExtDomainAddressSerialNumberRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberResponse.go
index 858ee4a..69b0597 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberResponse.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtDomainAddressSerialNumberResponse) GetTypeName() string {
 }
 
 func (m *ApduDataExtDomainAddressSerialNumberResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberWrite.go
index e8bb8bf..3a8dae5 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressSerialNumberWrite.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtDomainAddressSerialNumberWrite) GetTypeName() string {
 }
 
 func (m *ApduDataExtDomainAddressSerialNumberWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressWrite.go
index 60679f9..88b739a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtDomainAddressWrite.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtDomainAddressWrite) GetTypeName() string {
 }
 
 func (m *ApduDataExtDomainAddressWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtFileStreamInfoReport.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtFileStreamInfoReport.go
index 128b91e..bb1e8e8 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtFileStreamInfoReport.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtFileStreamInfoReport.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtFileStreamInfoReport) GetTypeName() string {
 }
 
 func (m *ApduDataExtFileStreamInfoReport) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueInfoReport.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueInfoReport.go
index d7cde77..6a562ad 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueInfoReport.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueInfoReport.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtGroupPropertyValueInfoReport) GetTypeName() string {
 }
 
 func (m *ApduDataExtGroupPropertyValueInfoReport) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueRead.go
index b751f36..7718af8 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueRead.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtGroupPropertyValueRead) GetTypeName() string {
 }
 
 func (m *ApduDataExtGroupPropertyValueRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueResponse.go
index 98c9225..9ea082b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueResponse.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtGroupPropertyValueResponse) GetTypeName() string {
 }
 
 func (m *ApduDataExtGroupPropertyValueResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueWrite.go
index 1665344..9957b5a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtGroupPropertyValueWrite.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtGroupPropertyValueWrite) GetTypeName() string {
 }
 
 func (m *ApduDataExtGroupPropertyValueWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberRead.go
index c3db24b..b7119b5 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberRead.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtIndividualAddressSerialNumberRead) GetTypeName() string {
 }
 
 func (m *ApduDataExtIndividualAddressSerialNumberRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberResponse.go
index 106df2d..152052e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberResponse.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtIndividualAddressSerialNumberResponse) GetTypeName() string
 }
 
 func (m *ApduDataExtIndividualAddressSerialNumberResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberWrite.go
index d5181ad..de2437c 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtIndividualAddressSerialNumberWrite.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtIndividualAddressSerialNumberWrite) GetTypeName() string {
 }
 
 func (m *ApduDataExtIndividualAddressSerialNumberWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyResponse.go
index b5cf60c..cc97be6 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyResponse.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtKeyResponse) GetTypeName() string {
 }
 
 func (m *ApduDataExtKeyResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyWrite.go
index b607d2f..29b7117 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtKeyWrite.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtKeyWrite) GetTypeName() string {
 }
 
 func (m *ApduDataExtKeyWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkRead.go
index 09357a7..5cc75ea 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkRead.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtLinkRead) GetTypeName() string {
 }
 
 func (m *ApduDataExtLinkRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkResponse.go
index d83f57f..2aa4946 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkResponse.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtLinkResponse) GetTypeName() string {
 }
 
 func (m *ApduDataExtLinkResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkWrite.go
index 0aaa9d9..b933cd2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtLinkWrite.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtLinkWrite) GetTypeName() string {
 }
 
 func (m *ApduDataExtLinkWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtMemoryBitWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtMemoryBitWrite.go
index 71c1ecd..df810df 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtMemoryBitWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtMemoryBitWrite.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtMemoryBitWrite) GetTypeName() string {
 }
 
 func (m *ApduDataExtMemoryBitWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterRead.go
index 730bd57..8f156c1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterRead.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtNetworkParameterRead) GetTypeName() string {
 }
 
 func (m *ApduDataExtNetworkParameterRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterResponse.go
index 7ec50af..0dec32f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterResponse.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtNetworkParameterResponse) GetTypeName() string {
 }
 
 func (m *ApduDataExtNetworkParameterResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterWrite.go
index 446e181..c3916f9 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtNetworkParameterWrite.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtNetworkParameterWrite) GetTypeName() string {
 }
 
 func (m *ApduDataExtNetworkParameterWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtOpenRoutingTableRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtOpenRoutingTableRequest.go
index 5e3c2cb..a1b58cb 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtOpenRoutingTableRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtOpenRoutingTableRequest.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtOpenRoutingTableRequest) GetTypeName() string {
 }
 
 func (m *ApduDataExtOpenRoutingTableRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionRead.go
index 5579dd9..18483aa 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionRead.go
@@ -89,7 +89,7 @@ func (m *ApduDataExtPropertyDescriptionRead) GetTypeName() string {
 }
 
 func (m *ApduDataExtPropertyDescriptionRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (objectIndex)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionResponse.go
index 3ed8038..9807f29 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyDescriptionResponse.go
@@ -100,7 +100,7 @@ func (m *ApduDataExtPropertyDescriptionResponse) GetTypeName() string {
 }
 
 func (m *ApduDataExtPropertyDescriptionResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (objectIndex)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueRead.go
index bfc25b0..9ae3729 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueRead.go
@@ -91,7 +91,7 @@ func (m *ApduDataExtPropertyValueRead) GetTypeName() string {
 }
 
 func (m *ApduDataExtPropertyValueRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (objectIndex)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
index cc921a4..ea57373 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
@@ -93,7 +93,7 @@ func (m *ApduDataExtPropertyValueResponse) GetTypeName() string {
 }
 
 func (m *ApduDataExtPropertyValueResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (objectIndex)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
index 87e01e1..551decf 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
@@ -93,7 +93,7 @@ func (m *ApduDataExtPropertyValueWrite) GetTypeName() string {
 }
 
 func (m *ApduDataExtPropertyValueWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (objectIndex)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryRequest.go
index 8f9e9d9..74a921d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryRequest.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtReadRouterMemoryRequest) GetTypeName() string {
 }
 
 func (m *ApduDataExtReadRouterMemoryRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryResponse.go
index 766ed93..07c3a00 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterMemoryResponse.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtReadRouterMemoryResponse) GetTypeName() string {
 }
 
 func (m *ApduDataExtReadRouterMemoryResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusRequest.go
index 4d8782a..1ba9200 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusRequest.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtReadRouterStatusRequest) GetTypeName() string {
 }
 
 func (m *ApduDataExtReadRouterStatusRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusResponse.go
index 5094a66..b13ca2d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRouterStatusResponse.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtReadRouterStatusResponse) GetTypeName() string {
 }
 
 func (m *ApduDataExtReadRouterStatusResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableRequest.go
index 92ea7a1..6b38398 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableRequest.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtReadRoutingTableRequest) GetTypeName() string {
 }
 
 func (m *ApduDataExtReadRoutingTableRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableResponse.go
index 9be4819..7b37d09 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtReadRoutingTableResponse.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtReadRoutingTableResponse) GetTypeName() string {
 }
 
 func (m *ApduDataExtReadRoutingTableResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterMemoryRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterMemoryRequest.go
index 42b1c04..33cf67a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterMemoryRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterMemoryRequest.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtWriteRouterMemoryRequest) GetTypeName() string {
 }
 
 func (m *ApduDataExtWriteRouterMemoryRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterStatusRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterStatusRequest.go
index 41a0158..e33b934 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterStatusRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRouterStatusRequest.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtWriteRouterStatusRequest) GetTypeName() string {
 }
 
 func (m *ApduDataExtWriteRouterStatusRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRoutingTableRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRoutingTableRequest.go
index beec3c5..745a8c9 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRoutingTableRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtWriteRoutingTableRequest.go
@@ -82,7 +82,7 @@ func (m *ApduDataExtWriteRoutingTableRequest) GetTypeName() string {
 }
 
 func (m *ApduDataExtWriteRoutingTableRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueRead.go
index 3f65828..5681729 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueRead.go
@@ -84,7 +84,7 @@ func (m *ApduDataGroupValueRead) GetTypeName() string {
 }
 
 func (m *ApduDataGroupValueRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Reserved Field (reserved)
 	lengthInBits += 6
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go
index 0b7aded..bcb14e5 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go
@@ -89,7 +89,7 @@ func (m *ApduDataGroupValueResponse) GetTypeName() string {
 }
 
 func (m *ApduDataGroupValueResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (dataFirstByte)
 	lengthInBits += 6
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go
index 9048312..ee7bc5d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go
@@ -89,7 +89,7 @@ func (m *ApduDataGroupValueWrite) GetTypeName() string {
 }
 
 func (m *ApduDataGroupValueWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (dataFirstByte)
 	lengthInBits += 6
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressRead.go
index 80a521e..da11caa 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressRead.go
@@ -82,7 +82,7 @@ func (m *ApduDataIndividualAddressRead) GetTypeName() string {
 }
 
 func (m *ApduDataIndividualAddressRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressResponse.go
index 47fce93..aee2dc1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressResponse.go
@@ -82,7 +82,7 @@ func (m *ApduDataIndividualAddressResponse) GetTypeName() string {
 }
 
 func (m *ApduDataIndividualAddressResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressWrite.go
index ae3b6a3..51bd332 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataIndividualAddressWrite.go
@@ -82,7 +82,7 @@ func (m *ApduDataIndividualAddressWrite) GetTypeName() string {
 }
 
 func (m *ApduDataIndividualAddressWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryRead.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryRead.go
index 543ea0d..f7f2ce5 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryRead.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryRead.go
@@ -87,7 +87,7 @@ func (m *ApduDataMemoryRead) GetTypeName() string {
 }
 
 func (m *ApduDataMemoryRead) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (numBytes)
 	lengthInBits += 6
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go
index e7483f5..aa98205 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go
@@ -87,7 +87,7 @@ func (m *ApduDataMemoryResponse) GetTypeName() string {
 }
 
 func (m *ApduDataMemoryResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (numBytes)
 	lengthInBits += 6
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryWrite.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryWrite.go
index 5eaf09b..645020d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryWrite.go
@@ -82,7 +82,7 @@ func (m *ApduDataMemoryWrite) GetTypeName() string {
 }
 
 func (m *ApduDataMemoryWrite) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataOther.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataOther.go
index 0aab219..506a26c 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataOther.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataOther.go
@@ -85,7 +85,7 @@ func (m *ApduDataOther) GetTypeName() string {
 }
 
 func (m *ApduDataOther) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (extendedApdu)
 	lengthInBits += m.ExtendedApdu.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataRestart.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataRestart.go
index dc82bf2..ee04307 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataRestart.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataRestart.go
@@ -82,7 +82,7 @@ func (m *ApduDataRestart) GetTypeName() string {
 }
 
 func (m *ApduDataRestart) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataUserMessage.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataUserMessage.go
index 7d133da..ed21e43 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataUserMessage.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataUserMessage.go
@@ -82,7 +82,7 @@ func (m *ApduDataUserMessage) GetTypeName() string {
 }
 
 func (m *ApduDataUserMessage) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
index 48773ff..850a628 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMI.go
@@ -78,13 +78,14 @@ func (m *CEMI) GetTypeName() string {
 }
 
 func (m *CEMI) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *CEMI) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (messageCode)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
index eb2493f..37fbd62 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformation.go
@@ -78,13 +78,14 @@ func (m *CEMIAdditionalInformation) GetTypeName() string {
 }
 
 func (m *CEMIAdditionalInformation) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *CEMIAdditionalInformation) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (additionalInformationType)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
index 5b7f42a..1ccecd7 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationBusmonitorInfo.go
@@ -99,7 +99,7 @@ func (m *CEMIAdditionalInformationBusmonitorInfo) GetTypeName() string {
 }
 
 func (m *CEMIAdditionalInformationBusmonitorInfo) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (len)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
index 9199e17..5878548 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/CEMIAdditionalInformationRelativeTimestamp.go
@@ -89,7 +89,7 @@ func (m *CEMIAdditionalInformationRelativeTimestamp) GetTypeName() string {
 }
 
 func (m *CEMIAdditionalInformationRelativeTimestamp) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (len)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTable.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTable.go
index 12b5a0d..078576e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTable.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTable.go
@@ -78,10 +78,11 @@ func (m *ComObjectTable) GetTypeName() string {
 }
 
 func (m *ComObjectTable) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	return m.Child.LengthInBits()
+}
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
+func (m *ComObjectTable) ParentLengthInBits() uint16 {
+	lengthInBits := uint16(0)
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType1.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType1.go
index 025404f..e68c008 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType1.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType1.go
@@ -89,7 +89,7 @@ func (m *ComObjectTableRealisationType1) GetTypeName() string {
 }
 
 func (m *ComObjectTableRealisationType1) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (numEntries)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType2.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType2.go
index fed5886..2d3f551 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType2.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType2.go
@@ -89,7 +89,7 @@ func (m *ComObjectTableRealisationType2) GetTypeName() string {
 }
 
 func (m *ComObjectTableRealisationType2) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (numEntries)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType6.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType6.go
index 00d47be..77695db 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType6.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType6.go
@@ -85,7 +85,7 @@ func (m *ComObjectTableRealisationType6) GetTypeName() string {
 }
 
 func (m *ComObjectTableRealisationType6) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (comObjectDescriptors)
 	lengthInBits += m.ComObjectDescriptors.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
index 0f7cb47..289ef01 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequest.go
@@ -89,7 +89,7 @@ func (m *ConnectionRequest) GetTypeName() string {
 }
 
 func (m *ConnectionRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (hpaiDiscoveryEndpoint)
 	lengthInBits += m.HpaiDiscoveryEndpoint.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
index 63a9de3..2084a3a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformation.go
@@ -78,6 +78,10 @@ func (m *ConnectionRequestInformation) GetTypeName() string {
 }
 
 func (m *ConnectionRequestInformation) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *ConnectionRequestInformation) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 
 	// Implicit Field (structureLength)
@@ -85,9 +89,6 @@ func (m *ConnectionRequestInformation) LengthInBits() uint16 {
 	// Discriminator Field (connectionType)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
index ecd4909..cae3fe6 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationDeviceManagement.go
@@ -82,7 +82,7 @@ func (m *ConnectionRequestInformationDeviceManagement) GetTypeName() string {
 }
 
 func (m *ConnectionRequestInformationDeviceManagement) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go
index fac3091..598ceec 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionRequestInformationTunnelConnection.go
@@ -86,7 +86,7 @@ func (m *ConnectionRequestInformationTunnelConnection) GetTypeName() string {
 }
 
 func (m *ConnectionRequestInformationTunnelConnection) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (knxLayer)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
index 8874d6a..78488a3 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponse.go
@@ -91,7 +91,7 @@ func (m *ConnectionResponse) GetTypeName() string {
 }
 
 func (m *ConnectionResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (communicationChannelId)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
index 008e1f9..55efa93 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
@@ -78,6 +78,10 @@ func (m *ConnectionResponseDataBlock) GetTypeName() string {
 }
 
 func (m *ConnectionResponseDataBlock) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *ConnectionResponseDataBlock) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 
 	// Implicit Field (structureLength)
@@ -85,9 +89,6 @@ func (m *ConnectionResponseDataBlock) LengthInBits() uint16 {
 	// Discriminator Field (connectionType)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go
index d08343f..e59e8bd 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockDeviceManagement.go
@@ -82,7 +82,7 @@ func (m *ConnectionResponseDataBlockDeviceManagement) GetTypeName() string {
 }
 
 func (m *ConnectionResponseDataBlockDeviceManagement) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go
index b0d32bd..1fe468b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionResponseDataBlockTunnelConnection.go
@@ -85,7 +85,7 @@ func (m *ConnectionResponseDataBlockTunnelConnection) GetTypeName() string {
 }
 
 func (m *ConnectionResponseDataBlockTunnelConnection) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (knxAddress)
 	lengthInBits += m.KnxAddress.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go
index 7dd0026..2ad2f6b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateRequest.go
@@ -88,7 +88,7 @@ func (m *ConnectionStateRequest) GetTypeName() string {
 }
 
 func (m *ConnectionStateRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (communicationChannelId)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go
index fe8bb0d..5edda5d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ConnectionStateResponse.go
@@ -87,7 +87,7 @@ func (m *ConnectionStateResponse) GetTypeName() string {
 }
 
 func (m *ConnectionStateResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (communicationChannelId)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go
index 6e7bc5c..225ab69 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionRequest.go
@@ -85,7 +85,7 @@ func (m *DescriptionRequest) GetTypeName() string {
 }
 
 func (m *DescriptionRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (hpaiControlEndpoint)
 	lengthInBits += m.HpaiControlEndpoint.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go
index 1b6d3d0..c2ea42b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DescriptionResponse.go
@@ -87,7 +87,7 @@ func (m *DescriptionResponse) GetTypeName() string {
 }
 
 func (m *DescriptionResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (dibDeviceInfo)
 	lengthInBits += m.DibDeviceInfo.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go
index 78eaa3e..d50a199 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationAck.go
@@ -85,7 +85,7 @@ func (m *DeviceConfigurationAck) GetTypeName() string {
 }
 
 func (m *DeviceConfigurationAck) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (deviceConfigurationAckDataBlock)
 	lengthInBits += m.DeviceConfigurationAckDataBlock.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go
index 8bd925a..5b8abbb 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DeviceConfigurationRequest.go
@@ -87,7 +87,7 @@ func (m *DeviceConfigurationRequest) GetTypeName() string {
 }
 
 func (m *DeviceConfigurationRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (deviceConfigurationRequestDataBlock)
 	lengthInBits += m.DeviceConfigurationRequestDataBlock.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go
index 5f1a590..854d11e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectRequest.go
@@ -88,7 +88,7 @@ func (m *DisconnectRequest) GetTypeName() string {
 }
 
 func (m *DisconnectRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (communicationChannelId)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectResponse.go
index 5242d40..f686d66 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DisconnectResponse.go
@@ -87,7 +87,7 @@ func (m *DisconnectResponse) GetTypeName() string {
 }
 
 func (m *DisconnectResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (communicationChannelId)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go
index 0809d11..1d8fee1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress.go
@@ -78,10 +78,11 @@ func (m *KnxGroupAddress) GetTypeName() string {
 }
 
 func (m *KnxGroupAddress) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	return m.Child.LengthInBits()
+}
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
+func (m *KnxGroupAddress) ParentLengthInBits() uint16 {
+	lengthInBits := uint16(0)
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go
index ed2d3ca..510f47e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress2Level.go
@@ -87,7 +87,7 @@ func (m *KnxGroupAddress2Level) GetTypeName() string {
 }
 
 func (m *KnxGroupAddress2Level) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (mainGroup)
 	lengthInBits += 5
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go
index 4e65b54..189ba6d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddress3Level.go
@@ -89,7 +89,7 @@ func (m *KnxGroupAddress3Level) GetTypeName() string {
 }
 
 func (m *KnxGroupAddress3Level) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (mainGroup)
 	lengthInBits += 5
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go
index 656cae2..e24e81f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxGroupAddressFreeLevel.go
@@ -85,7 +85,7 @@ func (m *KnxGroupAddressFreeLevel) GetTypeName() string {
 }
 
 func (m *KnxGroupAddressFreeLevel) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (subGroup)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpCore.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpCore.go
index 487cacf..a5f446a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpCore.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpCore.go
@@ -85,7 +85,7 @@ func (m *KnxNetIpCore) GetTypeName() string {
 }
 
 func (m *KnxNetIpCore) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (version)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpDeviceManagement.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpDeviceManagement.go
index 172d149..8efd745 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpDeviceManagement.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpDeviceManagement.go
@@ -85,7 +85,7 @@ func (m *KnxNetIpDeviceManagement) GetTypeName() string {
 }
 
 func (m *KnxNetIpDeviceManagement) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (version)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpMessage.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpMessage.go
index 8163e66..df5b140 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpMessage.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpMessage.go
@@ -82,6 +82,10 @@ func (m *KnxNetIpMessage) GetTypeName() string {
 }
 
 func (m *KnxNetIpMessage) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *KnxNetIpMessage) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 
 	// Implicit Field (headerLength)
@@ -95,9 +99,6 @@ func (m *KnxNetIpMessage) LengthInBits() uint16 {
 	// Implicit Field (totalLength)
 	lengthInBits += 16
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpRouting.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpRouting.go
index 7e4fee0..9e7a1de 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpRouting.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpRouting.go
@@ -85,7 +85,7 @@ func (m *KnxNetIpRouting) GetTypeName() string {
 }
 
 func (m *KnxNetIpRouting) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (version)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpTunneling.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpTunneling.go
index 407cd6f..b5806f2 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpTunneling.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetIpTunneling.go
@@ -85,7 +85,7 @@ func (m *KnxNetIpTunneling) GetTypeName() string {
 }
 
 func (m *KnxNetIpTunneling) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (version)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetObjectServer.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetObjectServer.go
index 379ba03..204c1c0 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetObjectServer.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetObjectServer.go
@@ -85,7 +85,7 @@ func (m *KnxNetObjectServer) GetTypeName() string {
 }
 
 func (m *KnxNetObjectServer) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (version)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.go
index 6d81019..fda8480 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteConfigurationAndDiagnosis.go
@@ -85,7 +85,7 @@ func (m *KnxNetRemoteConfigurationAndDiagnosis) GetTypeName() string {
 }
 
 func (m *KnxNetRemoteConfigurationAndDiagnosis) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (version)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteLogging.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteLogging.go
index bdf756e..95d2c99 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteLogging.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/KnxNetRemoteLogging.go
@@ -85,7 +85,7 @@ func (m *KnxNetRemoteLogging) GetTypeName() string {
 }
 
 func (m *KnxNetRemoteLogging) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (version)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go
index 0c921c1..e8c5a83 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go
@@ -92,7 +92,7 @@ func (m *LBusmonInd) GetTypeName() string {
 }
 
 func (m *LBusmonInd) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (additionalInformationLength)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go
index 7539132..bdb107a 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go
@@ -89,7 +89,7 @@ func (m *LDataCon) GetTypeName() string {
 }
 
 func (m *LDataCon) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (additionalInformationLength)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataExtended.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataExtended.go
index 69d95a3..5511492 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataExtended.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataExtended.go
@@ -106,7 +106,7 @@ func (m *LDataExtended) GetTypeName() string {
 }
 
 func (m *LDataExtended) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (groupAddress)
 	lengthInBits += 1
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataFrame.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataFrame.go
index 10407bf..3ae0a2f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataFrame.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataFrame.go
@@ -84,6 +84,10 @@ func (m *LDataFrame) GetTypeName() string {
 }
 
 func (m *LDataFrame) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *LDataFrame) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 
 	// Simple field (frameType)
@@ -105,9 +109,6 @@ func (m *LDataFrame) LengthInBits() uint16 {
 	// Simple field (errorFlag)
 	lengthInBits += 1
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataFrameACK.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataFrameACK.go
index ca1ef40..7152f89 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataFrameACK.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataFrameACK.go
@@ -91,7 +91,7 @@ func (m *LDataFrameACK) GetTypeName() string {
 }
 
 func (m *LDataFrameACK) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go
index def4be1..6f32b17 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go
@@ -89,7 +89,7 @@ func (m *LDataInd) GetTypeName() string {
 }
 
 func (m *LDataInd) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (additionalInformationLength)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go
index c9c7b50..310771f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go
@@ -89,7 +89,7 @@ func (m *LDataReq) GetTypeName() string {
 }
 
 func (m *LDataReq) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (additionalInformationLength)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollData.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollData.go
index ddf05d0..8f561d1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollData.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollData.go
@@ -101,7 +101,7 @@ func (m *LPollData) GetTypeName() string {
 }
 
 func (m *LPollData) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (sourceAddress)
 	lengthInBits += m.SourceAddress.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataCon.go
index b98b5bc..6bdd6b4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataCon.go
@@ -82,7 +82,7 @@ func (m *LPollDataCon) GetTypeName() string {
 }
 
 func (m *LPollDataCon) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataReq.go
index 119c94c..d3bb55d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollDataReq.go
@@ -82,7 +82,7 @@ func (m *LPollDataReq) GetTypeName() string {
 }
 
 func (m *LPollDataReq) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawCon.go
index 67024b0..6a60575 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawCon.go
@@ -82,7 +82,7 @@ func (m *LRawCon) GetTypeName() string {
 }
 
 func (m *LRawCon) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawInd.go
index 4c611f6..d85e963 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawInd.go
@@ -82,7 +82,7 @@ func (m *LRawInd) GetTypeName() string {
 }
 
 func (m *LRawInd) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawReq.go
index 8a52176..358897d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LRawReq.go
@@ -82,7 +82,7 @@ func (m *LRawReq) GetTypeName() string {
 }
 
 func (m *LRawReq) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCommandReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCommandReq.go
index 622730e..c0bf485 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCommandReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCommandReq.go
@@ -82,7 +82,7 @@ func (m *MFuncPropCommandReq) GetTypeName() string {
 }
 
 func (m *MFuncPropCommandReq) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCon.go
index 3b96aa2..b8d365d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropCon.go
@@ -82,7 +82,7 @@ func (m *MFuncPropCon) GetTypeName() string {
 }
 
 func (m *MFuncPropCon) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropStateReadReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropStateReadReq.go
index ee6180b..402072d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropStateReadReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MFuncPropStateReadReq.go
@@ -82,7 +82,7 @@ func (m *MFuncPropStateReadReq) GetTypeName() string {
 }
 
 func (m *MFuncPropStateReadReq) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropInfoInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropInfoInd.go
index 6db18f3..ef95f39 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropInfoInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropInfoInd.go
@@ -82,7 +82,7 @@ func (m *MPropInfoInd) GetTypeName() string {
 }
 
 func (m *MPropInfoInd) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadCon.go
index 254069b..f9f9a63 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadCon.go
@@ -95,7 +95,7 @@ func (m *MPropReadCon) GetTypeName() string {
 }
 
 func (m *MPropReadCon) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (interfaceObjectType)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadReq.go
index 784dc90..f322978 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropReadReq.go
@@ -93,7 +93,7 @@ func (m *MPropReadReq) GetTypeName() string {
 }
 
 func (m *MPropReadReq) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (interfaceObjectType)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteCon.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteCon.go
index c2bff73..2d7476f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteCon.go
@@ -82,7 +82,7 @@ func (m *MPropWriteCon) GetTypeName() string {
 }
 
 func (m *MPropWriteCon) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteReq.go
index 2e1b869..607c614 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MPropWriteReq.go
@@ -82,7 +82,7 @@ func (m *MPropWriteReq) GetTypeName() string {
 }
 
 func (m *MPropWriteReq) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetInd.go
index c75bc48..c7e589e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetInd.go
@@ -82,7 +82,7 @@ func (m *MResetInd) GetTypeName() string {
 }
 
 func (m *MResetInd) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetReq.go
index 3e95b9e..a65421c 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MResetReq.go
@@ -82,7 +82,7 @@ func (m *MResetReq) GetTypeName() string {
 }
 
 func (m *MResetReq) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/RoutingIndication.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/RoutingIndication.go
index f7b7b78..b18f509 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/RoutingIndication.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/RoutingIndication.go
@@ -82,7 +82,7 @@ func (m *RoutingIndication) GetTypeName() string {
 }
 
 func (m *RoutingIndication) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchRequest.go
index c764287..e4d885e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchRequest.go
@@ -85,7 +85,7 @@ func (m *SearchRequest) GetTypeName() string {
 }
 
 func (m *SearchRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (hpaiIDiscoveryEndpoint)
 	lengthInBits += m.HpaiIDiscoveryEndpoint.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchResponse.go
index 1fb3003..501add4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/SearchResponse.go
@@ -89,7 +89,7 @@ func (m *SearchResponse) GetTypeName() string {
 }
 
 func (m *SearchResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (hpaiControlEndpoint)
 	lengthInBits += m.HpaiControlEndpoint.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/ServiceId.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/ServiceId.go
index 158055b..70140fe 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ServiceId.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ServiceId.go
@@ -78,13 +78,14 @@ func (m *ServiceId) GetTypeName() string {
 }
 
 func (m *ServiceId) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *ServiceId) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (serviceType)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedInd.go
index fb5e6eb..44f30ea 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedInd.go
@@ -82,7 +82,7 @@ func (m *TDataConnectedInd) GetTypeName() string {
 }
 
 func (m *TDataConnectedInd) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedReq.go
index 169bf86..70537b0 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataConnectedReq.go
@@ -82,7 +82,7 @@ func (m *TDataConnectedReq) GetTypeName() string {
 }
 
 func (m *TDataConnectedReq) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualInd.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualInd.go
index 31072b7..d61473b 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualInd.go
@@ -82,7 +82,7 @@ func (m *TDataIndividualInd) GetTypeName() string {
 }
 
 func (m *TDataIndividualInd) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualReq.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualReq.go
index e6ebfd0..3d4419d 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TDataIndividualReq.go
@@ -82,7 +82,7 @@ func (m *TDataIndividualReq) GetTypeName() string {
 }
 
 func (m *TDataIndividualReq) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequest.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequest.go
index 4176a47..2544e27 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequest.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingRequest.go
@@ -87,7 +87,7 @@ func (m *TunnelingRequest) GetTypeName() string {
 }
 
 func (m *TunnelingRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (tunnelingRequestDataBlock)
 	lengthInBits += m.TunnelingRequestDataBlock.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponse.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponse.go
index c2eae45..ee73416 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/TunnelingResponse.go
@@ -85,7 +85,7 @@ func (m *TunnelingResponse) GetTypeName() string {
 }
 
 func (m *TunnelingResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (tunnelingResponseDataBlock)
 	lengthInBits += m.TunnelingResponseDataBlock.LengthInBits()
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go b/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
index 002413b..fa18699 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
@@ -87,7 +87,7 @@ func (m *UnknownMessage) GetTypeName() string {
 }
 
 func (m *UnknownMessage) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.UnknownData) > 0 {
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go
index 1f11242..3a68818 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDU.go
@@ -80,15 +80,16 @@ func (m *ModbusPDU) GetTypeName() string {
 }
 
 func (m *ModbusPDU) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *ModbusPDU) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (errorFlag)
 	lengthInBits += 1
 	// Discriminator Field (functionFlag)
 	lengthInBits += 7
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go
index de18dce..c83b9f8 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticRequest.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUDiagnosticRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUDiagnosticRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (subFunction)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go
index dd17fc3..71c90f0 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUDiagnosticResponse.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUDiagnosticResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUDiagnosticResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (subFunction)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go
index e5cf6b8..869f296 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUError.go
@@ -93,7 +93,7 @@ func (m *ModbusPDUError) GetTypeName() string {
 }
 
 func (m *ModbusPDUError) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Enum Field (exceptionCode)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go
index 890daf6..993ac70 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterRequest.go
@@ -90,7 +90,7 @@ func (m *ModbusPDUGetComEventCounterRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUGetComEventCounterRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go
index d978ce2..74c4d73 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventCounterResponse.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUGetComEventCounterResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUGetComEventCounterResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (status)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go
index 4a22385..46fe51e 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogRequest.go
@@ -90,7 +90,7 @@ func (m *ModbusPDUGetComEventLogRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUGetComEventLogRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
index aab73df..208237b 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
@@ -101,7 +101,7 @@ func (m *ModbusPDUGetComEventLogResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUGetComEventLogResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (byteCount)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go
index 882afc7..8ec7e54 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterRequest.go
@@ -97,7 +97,7 @@ func (m *ModbusPDUMaskWriteHoldingRegisterRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUMaskWriteHoldingRegisterRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (referenceAddress)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go
index e664d9b..e9e92ea 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUMaskWriteHoldingRegisterResponse.go
@@ -97,7 +97,7 @@ func (m *ModbusPDUMaskWriteHoldingRegisterResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUMaskWriteHoldingRegisterResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (referenceAddress)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go
index 3b055c4..6bff9e2 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsRequest.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUReadCoilsRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadCoilsRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (startingAddress)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
index 7b84bab..b189f3e 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUReadCoilsResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadCoilsResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (byteCount)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go
index cebe6c4..2de5536 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationRequest.go
@@ -90,7 +90,7 @@ func (m *ModbusPDUReadDeviceIdentificationRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadDeviceIdentificationRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go
index 9f1e570..08aa98b 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDeviceIdentificationResponse.go
@@ -90,7 +90,7 @@ func (m *ModbusPDUReadDeviceIdentificationResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadDeviceIdentificationResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go
index d4ec1a7..e6a12ef 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsRequest.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUReadDiscreteInputsRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadDiscreteInputsRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (startingAddress)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
index a8d242f..ec839bf 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUReadDiscreteInputsResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadDiscreteInputsResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (byteCount)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go
index 8498464..8226c62 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusRequest.go
@@ -90,7 +90,7 @@ func (m *ModbusPDUReadExceptionStatusRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadExceptionStatusRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go
index 46df057..555cad5 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadExceptionStatusResponse.go
@@ -93,7 +93,7 @@ func (m *ModbusPDUReadExceptionStatusResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadExceptionStatusResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (value)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go
index 9b48da8..c99c135 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueRequest.go
@@ -93,7 +93,7 @@ func (m *ModbusPDUReadFifoQueueRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadFifoQueueRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (fifoPointerAddress)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
index 9e54b79..069346b 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
@@ -93,7 +93,7 @@ func (m *ModbusPDUReadFifoQueueResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadFifoQueueResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (byteCount)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
index 1c803fd..789631b 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
@@ -93,7 +93,7 @@ func (m *ModbusPDUReadFileRecordRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadFileRecordRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (byteCount)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
index 9af06cd..fb836fe 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
@@ -93,7 +93,7 @@ func (m *ModbusPDUReadFileRecordResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadFileRecordResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (byteCount)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go
index b516d66..f551539 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersRequest.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUReadHoldingRegistersRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadHoldingRegistersRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (startingAddress)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
index 1cf291e..34cf55c 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUReadHoldingRegistersResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadHoldingRegistersResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (byteCount)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go
index 065afec..e7e5ece 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersRequest.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUReadInputRegistersRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadInputRegistersRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (startingAddress)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
index 5105ce5..9ffbd5b 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUReadInputRegistersResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUReadInputRegistersResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (byteCount)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
index 3f02406..f3644da 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
@@ -103,7 +103,7 @@ func (m *ModbusPDUReadWriteMultipleHoldingRegistersRequest) GetTypeName() string
 }
 
 func (m *ModbusPDUReadWriteMultipleHoldingRegistersRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (readStartingAddress)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
index b379eda..05ea677 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUReadWriteMultipleHoldingRegistersResponse) GetTypeName() strin
 }
 
 func (m *ModbusPDUReadWriteMultipleHoldingRegistersResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (byteCount)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go
index 2aefcea..7bc0c19 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdRequest.go
@@ -90,7 +90,7 @@ func (m *ModbusPDUReportServerIdRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUReportServerIdRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
index 24de097..93a1cb4 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUReportServerIdResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUReportServerIdResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (byteCount)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
index b3a1abc..b86394d 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
@@ -93,7 +93,7 @@ func (m *ModbusPDUWriteFileRecordRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUWriteFileRecordRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (byteCount)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
index 48e777b..734943d 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
@@ -93,7 +93,7 @@ func (m *ModbusPDUWriteFileRecordResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUWriteFileRecordResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (byteCount)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
index ecd37ec..45434eb 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
@@ -99,7 +99,7 @@ func (m *ModbusPDUWriteMultipleCoilsRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUWriteMultipleCoilsRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (startingAddress)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go
index c19538d..21cafb5 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsResponse.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUWriteMultipleCoilsResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUWriteMultipleCoilsResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (startingAddress)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
index 8dd6861..4005215 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
@@ -99,7 +99,7 @@ func (m *ModbusPDUWriteMultipleHoldingRegistersRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUWriteMultipleHoldingRegistersRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (startingAddress)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go
index 61c4a2b..c764693 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersResponse.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUWriteMultipleHoldingRegistersResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUWriteMultipleHoldingRegistersResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (startingAddress)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go
index 4f66fe6..a8b5a21 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilRequest.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUWriteSingleCoilRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUWriteSingleCoilRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (address)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go
index 40f3dbd..8b2b67e 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleCoilResponse.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUWriteSingleCoilResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUWriteSingleCoilResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (address)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go
index 3456dfa..bfeab1e 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterRequest.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUWriteSingleRegisterRequest) GetTypeName() string {
 }
 
 func (m *ModbusPDUWriteSingleRegisterRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (address)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go
index a698cee..d080c2a 100644
--- a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go
+++ b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteSingleRegisterResponse.go
@@ -95,7 +95,7 @@ func (m *ModbusPDUWriteSingleRegisterResponse) GetTypeName() string {
 }
 
 func (m *ModbusPDUWriteSingleRegisterResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (address)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
index 580c897..297b9bf 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
@@ -80,6 +80,10 @@ func (m *COTPPacket) GetTypeName() string {
 }
 
 func (m *COTPPacket) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *COTPPacket) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 
 	// Implicit Field (headerLength)
@@ -87,9 +91,6 @@ func (m *COTPPacket) LengthInBits() uint16 {
 	// Discriminator Field (tpduCode)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	// Array field
 	if len(m.Parameters) > 0 {
 		for _, element := range m.Parameters {
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go
index 345f845..026b1b4 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionRequest.go
@@ -91,7 +91,7 @@ func (m *COTPPacketConnectionRequest) GetTypeName() string {
 }
 
 func (m *COTPPacketConnectionRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (destinationReference)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go
index b7d6a20..9b6a27a 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketConnectionResponse.go
@@ -91,7 +91,7 @@ func (m *COTPPacketConnectionResponse) GetTypeName() string {
 }
 
 func (m *COTPPacketConnectionResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (destinationReference)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go
index 0d9f350..a46fd6f 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketData.go
@@ -89,7 +89,7 @@ func (m *COTPPacketData) GetTypeName() string {
 }
 
 func (m *COTPPacketData) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (eot)
 	lengthInBits += 1
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go
index 3589542..f4c9dd1 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectRequest.go
@@ -91,7 +91,7 @@ func (m *COTPPacketDisconnectRequest) GetTypeName() string {
 }
 
 func (m *COTPPacketDisconnectRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (destinationReference)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go
index 3002d9b..f633982 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketDisconnectResponse.go
@@ -89,7 +89,7 @@ func (m *COTPPacketDisconnectResponse) GetTypeName() string {
 }
 
 func (m *COTPPacketDisconnectResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (destinationReference)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go
index 014a395..871c9b1 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacketTpduError.go
@@ -89,7 +89,7 @@ func (m *COTPPacketTpduError) GetTypeName() string {
 }
 
 func (m *COTPPacketTpduError) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (destinationReference)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go
index 555a4c9..8c9c337 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameter.go
@@ -78,6 +78,10 @@ func (m *COTPParameter) GetTypeName() string {
 }
 
 func (m *COTPParameter) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *COTPParameter) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (parameterType)
 	lengthInBits += 8
@@ -85,9 +89,6 @@ func (m *COTPParameter) LengthInBits() uint16 {
 	// Implicit Field (parameterLength)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go
index 25a4857..2c0f9fa 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCalledTsap.go
@@ -85,7 +85,7 @@ func (m *COTPParameterCalledTsap) GetTypeName() string {
 }
 
 func (m *COTPParameterCalledTsap) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (tsapId)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go
index 7e9cd98..3bce2e6 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterCallingTsap.go
@@ -85,7 +85,7 @@ func (m *COTPParameterCallingTsap) GetTypeName() string {
 }
 
 func (m *COTPParameterCallingTsap) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (tsapId)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go
index f2e0e44..4ab5681 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterChecksum.go
@@ -85,7 +85,7 @@ func (m *COTPParameterChecksum) GetTypeName() string {
 }
 
 func (m *COTPParameterChecksum) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (crc)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
index cba5e4e..bdd010e 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
@@ -85,7 +85,7 @@ func (m *COTPParameterDisconnectAdditionalInformation) GetTypeName() string {
 }
 
 func (m *COTPParameterDisconnectAdditionalInformation) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.Data) > 0 {
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go
index e5cd5b0..fca53c9 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterTpduSize.go
@@ -85,7 +85,7 @@ func (m *COTPParameterTpduSize) GetTypeName() string {
 }
 
 func (m *COTPParameterTpduSize) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Enum Field (tpduSize)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Address.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Address.go
index 1c9e5c0..df31467 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Address.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Address.go
@@ -78,13 +78,14 @@ func (m *S7Address) GetTypeName() string {
 }
 
 func (m *S7Address) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *S7Address) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (addressType)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7AddressAny.go b/plc4go/internal/plc4go/s7/readwrite/model/S7AddressAny.go
index 31cae57..a723dcf 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7AddressAny.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7AddressAny.go
@@ -96,7 +96,7 @@ func (m *S7AddressAny) GetTypeName() string {
 }
 
 func (m *S7AddressAny) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Enum Field (transportSize)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go
index c1211fc..a166d31 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Message.go
@@ -86,6 +86,10 @@ func (m *S7Message) GetTypeName() string {
 }
 
 func (m *S7Message) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *S7Message) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 
 	// Const Field (protocolId)
@@ -105,9 +109,6 @@ func (m *S7Message) LengthInBits() uint16 {
 	// Implicit Field (payloadLength)
 	lengthInBits += 16
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	// Optional Field (parameter)
 	if m.Parameter != nil {
 		lengthInBits += (*m.Parameter).LengthInBits()
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageRequest.go
index 58e9836..c96729c 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageRequest.go
@@ -85,7 +85,7 @@ func (m *S7MessageRequest) GetTypeName() string {
 }
 
 func (m *S7MessageRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponse.go
index 4cf2e61..635d10f 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponse.go
@@ -90,7 +90,7 @@ func (m *S7MessageResponse) GetTypeName() string {
 }
 
 func (m *S7MessageResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (errorClass)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponseData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponseData.go
index c7bb38c..5aa3fc8 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponseData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageResponseData.go
@@ -90,7 +90,7 @@ func (m *S7MessageResponseData) GetTypeName() string {
 }
 
 func (m *S7MessageResponseData) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (errorClass)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageUserData.go
index de3396e..b4c00f1 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7MessageUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7MessageUserData.go
@@ -85,7 +85,7 @@ func (m *S7MessageUserData) GetTypeName() string {
 }
 
 func (m *S7MessageUserData) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go
index 675b1db..5bba982 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Parameter.go
@@ -79,13 +79,14 @@ func (m *S7Parameter) GetTypeName() string {
 }
 
 func (m *S7Parameter) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *S7Parameter) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (parameterType)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
index 2f5c867..f484e35 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
@@ -89,7 +89,7 @@ func (m *S7ParameterReadVarRequest) GetTypeName() string {
 }
 
 func (m *S7ParameterReadVarRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (numItems)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go
index 4543135..d8a8a1f 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarResponse.go
@@ -89,7 +89,7 @@ func (m *S7ParameterReadVarResponse) GetTypeName() string {
 }
 
 func (m *S7ParameterReadVarResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (numItems)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go
index fd8c748..f745c9d 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterSetupCommunication.go
@@ -94,7 +94,7 @@ func (m *S7ParameterSetupCommunication) GetTypeName() string {
 }
 
 func (m *S7ParameterSetupCommunication) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Reserved Field (reserved)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
index e238834..57267ba 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
@@ -89,7 +89,7 @@ func (m *S7ParameterUserData) GetTypeName() string {
 }
 
 func (m *S7ParameterUserData) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (numItems)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItem.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItem.go
index 1b21113..30d3d89 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItem.go
@@ -78,13 +78,14 @@ func (m *S7ParameterUserDataItem) GetTypeName() string {
 }
 
 func (m *S7ParameterUserDataItem) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *S7ParameterUserDataItem) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (itemType)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItemCPUFunctions.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItemCPUFunctions.go
index 2795219..0168ce9 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItemCPUFunctions.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserDataItemCPUFunctions.go
@@ -100,7 +100,7 @@ func (m *S7ParameterUserDataItemCPUFunctions) GetTypeName() string {
 }
 
 func (m *S7ParameterUserDataItemCPUFunctions) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (itemLength)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
index c81d94a..0251473 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
@@ -89,7 +89,7 @@ func (m *S7ParameterWriteVarRequest) GetTypeName() string {
 }
 
 func (m *S7ParameterWriteVarRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (numItems)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go
index 6cd40cf..efa17bb 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarResponse.go
@@ -89,7 +89,7 @@ func (m *S7ParameterWriteVarResponse) GetTypeName() string {
 }
 
 func (m *S7ParameterWriteVarResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Simple field (numItems)
 	lengthInBits += 8
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go b/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go
index 6667177..f21b145 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7Payload.go
@@ -79,10 +79,11 @@ func (m *S7Payload) GetTypeName() string {
 }
 
 func (m *S7Payload) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	return m.Child.LengthInBits()
+}
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
+func (m *S7Payload) ParentLengthInBits() uint16 {
+	lengthInBits := uint16(0)
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
index 46dcd6f..0eed5a6 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
@@ -89,7 +89,7 @@ func (m *S7PayloadReadVarResponse) GetTypeName() string {
 }
 
 func (m *S7PayloadReadVarResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.Items) > 0 {
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
index 8f2b806..cd7ce91 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
@@ -89,7 +89,7 @@ func (m *S7PayloadUserData) GetTypeName() string {
 }
 
 func (m *S7PayloadUserData) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.Items) > 0 {
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItem.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItem.go
index 1c08200..d561ce8 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItem.go
@@ -82,6 +82,10 @@ func (m *S7PayloadUserDataItem) GetTypeName() string {
 }
 
 func (m *S7PayloadUserDataItem) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *S7PayloadUserDataItem) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 
 	// Enum Field (returnCode)
@@ -99,9 +103,6 @@ func (m *S7PayloadUserDataItem) LengthInBits() uint16 {
 	// Simple field (szlIndex)
 	lengthInBits += 16
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlRequest.go
index f510f77..d1eb80c 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlRequest.go
@@ -86,7 +86,7 @@ func (m *S7PayloadUserDataItemCpuFunctionReadSzlRequest) GetTypeName() string {
 }
 
 func (m *S7PayloadUserDataItemCpuFunctionReadSzlRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	return lengthInBits
 }
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
index 7be99be..f0d1fb8 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
@@ -93,7 +93,7 @@ func (m *S7PayloadUserDataItemCpuFunctionReadSzlResponse) GetTypeName() string {
 }
 
 func (m *S7PayloadUserDataItemCpuFunctionReadSzlResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Const Field (szlItemLength)
 	lengthInBits += 16
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go
index 4a08af9..9f42452 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go
@@ -89,7 +89,7 @@ func (m *S7PayloadWriteVarRequest) GetTypeName() string {
 }
 
 func (m *S7PayloadWriteVarRequest) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.Items) > 0 {
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go
index 332299b..71f96ea 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go
@@ -89,7 +89,7 @@ func (m *S7PayloadWriteVarResponse) GetTypeName() string {
 }
 
 func (m *S7PayloadWriteVarResponse) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Array field
 	if len(m.Items) > 0 {
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItem.go b/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItem.go
index 8005da6..0a7f3cd 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItem.go
@@ -78,13 +78,14 @@ func (m *S7VarRequestParameterItem) GetTypeName() string {
 }
 
 func (m *S7VarRequestParameterItem) LengthInBits() uint16 {
+	return m.Child.LengthInBits()
+}
+
+func (m *S7VarRequestParameterItem) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 	// Discriminator Field (itemType)
 	lengthInBits += 8
 
-	// Length of sub-type elements will be added by sub-type...
-	lengthInBits += m.Child.LengthInBits()
-
 	return lengthInBits
 }
 
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItemAddress.go b/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItemAddress.go
index a5860a8..a27193d 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItemAddress.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7VarRequestParameterItemAddress.go
@@ -85,7 +85,7 @@ func (m *S7VarRequestParameterItemAddress) GetTypeName() string {
 }
 
 func (m *S7VarRequestParameterItemAddress) LengthInBits() uint16 {
-	lengthInBits := uint16(0)
+	lengthInBits := uint16(m.Parent.ParentLengthInBits())
 
 	// Implicit Field (itemLength)
 	lengthInBits += 8