You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/05/17 10:16:37 UTC

[plc4x] 02/02: feat(bacnet): implemented BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple

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 48521c33691c8ff42a72430c1871cb82d6b5206f
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue May 17 12:16:28 2022 +0200

    feat(bacnet): implemented BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
---
 .../plc4go/bacnetip/readwrite/ParserHelper.go      |  30 ++-
 .../plc4go/bacnetip/readwrite/XmlParserHelper.go   |  34 ++-
 ...rviceRequestConfirmedCOVNotificationMultiple.go |  14 +-
 ...OVNotificationMultipleListOfCovNotifications.go | 123 ++-------
 ...tificationMultipleListOfCovNotificationsList.go | 248 ++++++++++++++++++
 ...edServiceRequestSubscribeCOVPropertyMultiple.go | 246 +++++++++++++++++-
 ...yMultipleListOfCovSubscriptionSpecifications.go | 280 +++++++++++++++++++++
 ...tipleListOfCovSubscriptionSpecificationsList.go | 248 ++++++++++++++++++
 ...ListOfCovSubscriptionSpecificationsReference.go | 245 ++++++++++++++++++
 ...entSummaries.go => BACnetEventSummariesList.go} |  59 ++---
 .../model/BACnetServiceAckGetEventInformation.go   |  16 +-
 .../resources/protocols/bacnetip/bacnetip.mspec    | 105 +++++---
 12 files changed, 1455 insertions(+), 193 deletions(-)

diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go b/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
index af151743dc..43d208bd08 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
@@ -103,19 +103,13 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 		}
 		return model.BACnetTagPayloadEnumeratedParse(io, actualLength)
 	case "BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications":
-		tagNumber, err := utils.StrToUint8(arguments[0])
-		if err != nil {
-			return nil, errors.Wrap(err, "Error parsing")
-		}
-		return model.BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(io, tagNumber)
+		return model.BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(io)
 	case "BACnetTagPayloadOctetString":
 		actualLength, err := utils.StrToUint32(arguments[0])
 		if err != nil {
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.BACnetTagPayloadOctetStringParse(io, actualLength)
-	case "BACnetEventSummaries":
-		return model.BACnetEventSummariesParse(io)
 	case "BACnetServiceAckAtomicReadFileStreamOrRecord":
 		return model.BACnetServiceAckAtomicReadFileStreamOrRecordParse(io)
 	case "NPDUControl":
@@ -227,6 +221,12 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 	case "BACnetError":
 		errorChoice := model.BACnetConfirmedServiceChoiceByName(arguments[0])
 		return model.BACnetErrorParse(io, errorChoice)
+	case "BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList":
+		tagNumber, err := utils.StrToUint8(arguments[0])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		return model.BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsListParse(io, tagNumber)
 	case "BACnetTimeStamp":
 		return model.BACnetTimeStampParse(io)
 	case "BACnetNotificationParameters":
@@ -254,6 +254,12 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.BACnetEventProritiesParse(io, tagNumber)
+	case "BACnetEventSummariesList":
+		tagNumber, err := utils.StrToUint8(arguments[0])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		return model.BACnetEventSummariesListParse(io, tagNumber)
 	case "BACnetAddress":
 		return model.BACnetAddressParse(io)
 	case "BACnetTagPayloadUnsignedInteger":
@@ -262,6 +268,8 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.BACnetTagPayloadUnsignedIntegerParse(io, actualLength)
+	case "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference":
+		return model.BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReferenceParse(io)
 	case "BACnetApplicationTag":
 		return model.BACnetApplicationTagParse(io)
 	case "BACnetTagPayloadBitString":
@@ -316,6 +324,8 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.SubscribeCOVPropertyMultipleErrorFirstFailedSubscriptionParse(io, tagNumber)
+	case "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications":
+		return model.BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsParse(io)
 	case "BACnetWriteAccessSpecification":
 		return model.BACnetWriteAccessSpecificationParse(io)
 	case "BACnetServiceAck":
@@ -338,6 +348,12 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.BACnetActionParse(io, tagNumber)
+	case "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList":
+		tagNumber, err := utils.StrToUint8(arguments[0])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		return model.BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsListParse(io, tagNumber)
 	case "NPDU":
 		npduLength, err := utils.StrToUint16(arguments[0])
 		if err != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go b/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
index d0a601dab2..612fae54b4 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
@@ -122,12 +122,7 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		actualLength := uint32(parsedUint0)
 		return model.BACnetTagPayloadEnumeratedParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), actualLength)
 	case "BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications":
-		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
-		if err != nil {
-			return nil, err
-		}
-		tagNumber := uint8(parsedUint0)
-		return model.BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
+		return model.BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetTagPayloadOctetString":
 		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 32)
 		if err != nil {
@@ -135,8 +130,6 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		actualLength := uint32(parsedUint0)
 		return model.BACnetTagPayloadOctetStringParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), actualLength)
-	case "BACnetEventSummaries":
-		return model.BACnetEventSummariesParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetServiceAckAtomicReadFileStreamOrRecord":
 		return model.BACnetServiceAckAtomicReadFileStreamOrRecordParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "NPDUControl":
@@ -261,6 +254,13 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 	case "BACnetError":
 		errorChoice := model.BACnetConfirmedServiceChoiceByName(parserArguments[0])
 		return model.BACnetErrorParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), errorChoice)
+	case "BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList":
+		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
+		if err != nil {
+			return nil, err
+		}
+		tagNumber := uint8(parsedUint0)
+		return model.BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsListParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
 	case "BACnetTimeStamp":
 		return model.BACnetTimeStampParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetNotificationParameters":
@@ -292,6 +292,13 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		tagNumber := uint8(parsedUint0)
 		return model.BACnetEventProritiesParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
+	case "BACnetEventSummariesList":
+		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
+		if err != nil {
+			return nil, err
+		}
+		tagNumber := uint8(parsedUint0)
+		return model.BACnetEventSummariesListParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
 	case "BACnetAddress":
 		return model.BACnetAddressParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetTagPayloadUnsignedInteger":
@@ -301,6 +308,8 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		actualLength := uint32(parsedUint0)
 		return model.BACnetTagPayloadUnsignedIntegerParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), actualLength)
+	case "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference":
+		return model.BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReferenceParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetApplicationTag":
 		return model.BACnetApplicationTagParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetTagPayloadBitString":
@@ -362,6 +371,8 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		tagNumber := uint8(parsedUint0)
 		return model.SubscribeCOVPropertyMultipleErrorFirstFailedSubscriptionParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
+	case "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications":
+		return model.BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetWriteAccessSpecification":
 		return model.BACnetWriteAccessSpecificationParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetServiceAck":
@@ -387,6 +398,13 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		tagNumber := uint8(parsedUint0)
 		return model.BACnetActionParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
+	case "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList":
+		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 8)
+		if err != nil {
+			return nil, err
+		}
+		tagNumber := uint8(parsedUint0)
+		return model.BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsListParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumber)
 	case "NPDU":
 		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 16)
 		if err != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
index 39c6e77f2d..a6be2a06a3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
@@ -34,7 +34,7 @@ type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple struct {
 	InitiatingDeviceIdentifier  *BACnetContextTagObjectIdentifier
 	TimeRemaining               *BACnetContextTagUnsignedInteger
 	Timestamp                   *BACnetTimeStampEnclosed
-	ListOfCovNotifications      *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
+	ListOfCovNotifications      *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList
 
 	// Arguments.
 	ServiceRequestLength uint16
@@ -52,7 +52,7 @@ type IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple interface {
 	// GetTimestamp returns Timestamp (property field)
 	GetTimestamp() *BACnetTimeStampEnclosed
 	// GetListOfCovNotifications returns ListOfCovNotifications (property field)
-	GetListOfCovNotifications() *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
+	GetListOfCovNotifications() *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList
 	// GetLengthInBytes returns the length in bytes
 	GetLengthInBytes() uint16
 	// GetLengthInBits returns the length in bits
@@ -103,7 +103,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) GetTimes
 	return m.Timestamp
 }
 
-func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) GetListOfCovNotifications() *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications {
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) GetListOfCovNotifications() *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList {
 	return m.ListOfCovNotifications
 }
 
@@ -113,7 +113,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) GetListO
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple factory function for BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple
-func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, initiatingDeviceIdentifier *BACnetContextTagObjectIdentifier, timeRemaining *BACnetContextTagUnsignedInteger, timestamp *BACnetTimeStampEnclosed, listOfCovNotifications *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications, serviceRequestLength uint16) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple {
+func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, initiatingDeviceIdentifier *BACnetContextTagObjectIdentifier, timeRemaining *BACnetContextTagUnsignedInteger, timestamp *BACnetTimeStampEnclosed, listOfCovNotifications *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList, serviceRequestLength uint16) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple {
 	_result := &BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple{
 		SubscriberProcessIdentifier:   subscriberProcessIdentifier,
 		InitiatingDeviceIdentifier:    initiatingDeviceIdentifier,
@@ -250,11 +250,11 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuff
 	if pullErr := readBuffer.PullContext("listOfCovNotifications"); pullErr != nil {
 		return nil, pullErr
 	}
-	_listOfCovNotifications, _listOfCovNotificationsErr := BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(readBuffer, uint8(uint8(4)))
+	_listOfCovNotifications, _listOfCovNotificationsErr := BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsListParse(readBuffer, uint8(uint8(4)))
 	if _listOfCovNotificationsErr != nil {
 		return nil, errors.Wrap(_listOfCovNotificationsErr, "Error parsing 'listOfCovNotifications' field")
 	}
-	listOfCovNotifications := CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(_listOfCovNotifications)
+	listOfCovNotifications := CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList(_listOfCovNotifications)
 	if closeErr := readBuffer.CloseContext("listOfCovNotifications"); closeErr != nil {
 		return nil, closeErr
 	}
@@ -269,7 +269,7 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(readBuff
 		InitiatingDeviceIdentifier:    CastBACnetContextTagObjectIdentifier(initiatingDeviceIdentifier),
 		TimeRemaining:                 CastBACnetContextTagUnsignedInteger(timeRemaining),
 		Timestamp:                     CastBACnetTimeStampEnclosed(timestamp),
-		ListOfCovNotifications:        CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(listOfCovNotifications),
+		ListOfCovNotifications:        CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList(listOfCovNotifications),
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications.go
index 1f4b1a508a..e1147c5420 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications.go
@@ -28,29 +28,20 @@ import (
 
 // BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications is the data-structure of this message
 type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications struct {
-	OpeningTag                *BACnetOpeningTag
 	MonitoredObjectIdentifier *BACnetContextTagObjectIdentifier
-	InnerOpeningTag           *BACnetOpeningTag
+	OpeningTag                *BACnetOpeningTag
 	ListOfValues              []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue
-	InnerClosingTag           *BACnetClosingTag
 	ClosingTag                *BACnetClosingTag
-
-	// Arguments.
-	TagNumber uint8
 }
 
 // IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications is the corresponding interface of BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
 type IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications interface {
-	// GetOpeningTag returns OpeningTag (property field)
-	GetOpeningTag() *BACnetOpeningTag
 	// GetMonitoredObjectIdentifier returns MonitoredObjectIdentifier (property field)
 	GetMonitoredObjectIdentifier() *BACnetContextTagObjectIdentifier
-	// GetInnerOpeningTag returns InnerOpeningTag (property field)
-	GetInnerOpeningTag() *BACnetOpeningTag
+	// GetOpeningTag returns OpeningTag (property field)
+	GetOpeningTag() *BACnetOpeningTag
 	// GetListOfValues returns ListOfValues (property field)
 	GetListOfValues() []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue
-	// GetInnerClosingTag returns InnerClosingTag (property field)
-	GetInnerClosingTag() *BACnetClosingTag
 	// GetClosingTag returns ClosingTag (property field)
 	GetClosingTag() *BACnetClosingTag
 	// GetLengthInBytes returns the length in bytes
@@ -66,26 +57,18 @@ type IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNoti
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetOpeningTag() *BACnetOpeningTag {
-	return m.OpeningTag
-}
-
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetMonitoredObjectIdentifier() *BACnetContextTagObjectIdentifier {
 	return m.MonitoredObjectIdentifier
 }
 
-func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetInnerOpeningTag() *BACnetOpeningTag {
-	return m.InnerOpeningTag
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetOpeningTag() *BACnetOpeningTag {
+	return m.OpeningTag
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetListOfValues() []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue {
 	return m.ListOfValues
 }
 
-func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetInnerClosingTag() *BACnetClosingTag {
-	return m.InnerClosingTag
-}
-
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetClosingTag() *BACnetClosingTag {
 	return m.ClosingTag
 }
@@ -96,8 +79,8 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 ///////////////////////////////////////////////////////////
 
 // NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications factory function for BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
-func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(openingTag *BACnetOpeningTag, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, innerOpeningTag *BACnetOpeningTag, listOfValues []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue, innerClosingTag *BACnetClosingTag, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications {
-	return &BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications{OpeningTag: openingTag, MonitoredObjectIdentifier: monitoredObjectIdentifier, InnerOpeningTag: innerOpeningTag, ListOfValues: listOfValues, InnerClosingTag: innerClosingTag, ClosingTag: closingTag, TagNumber: tagNumber}
+func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, openingTag *BACnetOpeningTag, listOfValues []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue, closingTag *BACnetClosingTag) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications {
+	return &BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications{MonitoredObjectIdentifier: monitoredObjectIdentifier, OpeningTag: openingTag, ListOfValues: listOfValues, ClosingTag: closingTag}
 }
 
 func CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(structType interface{}) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications {
@@ -121,14 +104,11 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(0)
 
-	// Simple field (openingTag)
-	lengthInBits += m.OpeningTag.GetLengthInBits()
-
 	// Simple field (monitoredObjectIdentifier)
 	lengthInBits += m.MonitoredObjectIdentifier.GetLengthInBits()
 
-	// Simple field (innerOpeningTag)
-	lengthInBits += m.InnerOpeningTag.GetLengthInBits()
+	// Simple field (openingTag)
+	lengthInBits += m.OpeningTag.GetLengthInBits()
 
 	// Array field
 	if len(m.ListOfValues) > 0 {
@@ -137,9 +117,6 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 		}
 	}
 
-	// Simple field (innerClosingTag)
-	lengthInBits += m.InnerClosingTag.GetLengthInBits()
-
 	// Simple field (closingTag)
 	lengthInBits += m.ClosingTag.GetLengthInBits()
 
@@ -150,7 +127,7 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications, error) {
+func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications, error) {
 	positionAware := readBuffer
 	_ = positionAware
 	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications"); pullErr != nil {
@@ -159,19 +136,6 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotif
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
-	// Simple Field (openingTag)
-	if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
-		return nil, pullErr
-	}
-	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_OPENING_TAG))
-	if _openingTagErr != nil {
-		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
-	}
-	openingTag := CastBACnetOpeningTag(_openingTag)
-	if closeErr := readBuffer.CloseContext("openingTag"); closeErr != nil {
-		return nil, closeErr
-	}
-
 	// Simple Field (monitoredObjectIdentifier)
 	if pullErr := readBuffer.PullContext("monitoredObjectIdentifier"); pullErr != nil {
 		return nil, pullErr
@@ -185,16 +149,16 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotif
 		return nil, closeErr
 	}
 
-	// Simple Field (innerOpeningTag)
-	if pullErr := readBuffer.PullContext("innerOpeningTag"); pullErr != nil {
+	// Simple Field (openingTag)
+	if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
 		return nil, pullErr
 	}
-	_innerOpeningTag, _innerOpeningTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_OPENING_TAG))
-	if _innerOpeningTagErr != nil {
-		return nil, errors.Wrap(_innerOpeningTagErr, "Error parsing 'innerOpeningTag' field")
+	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_OPENING_TAG))
+	if _openingTagErr != nil {
+		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
 	}
-	innerOpeningTag := CastBACnetOpeningTag(_innerOpeningTag)
-	if closeErr := readBuffer.CloseContext("innerOpeningTag"); closeErr != nil {
+	openingTag := CastBACnetOpeningTag(_openingTag)
+	if closeErr := readBuffer.CloseContext("openingTag"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -218,24 +182,11 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotif
 		return nil, closeErr
 	}
 
-	// Simple Field (innerClosingTag)
-	if pullErr := readBuffer.PullContext("innerClosingTag"); pullErr != nil {
-		return nil, pullErr
-	}
-	_innerClosingTag, _innerClosingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_CLOSING_TAG))
-	if _innerClosingTagErr != nil {
-		return nil, errors.Wrap(_innerClosingTagErr, "Error parsing 'innerClosingTag' field")
-	}
-	innerClosingTag := CastBACnetClosingTag(_innerClosingTag)
-	if closeErr := readBuffer.CloseContext("innerClosingTag"); closeErr != nil {
-		return nil, closeErr
-	}
-
 	// Simple Field (closingTag)
 	if pullErr := readBuffer.PullContext("closingTag"); pullErr != nil {
 		return nil, pullErr
 	}
-	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_CLOSING_TAG))
+	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_CLOSING_TAG))
 	if _closingTagErr != nil {
 		return nil, errors.Wrap(_closingTagErr, "Error parsing 'closingTag' field")
 	}
@@ -249,7 +200,7 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotif
 	}
 
 	// Create the instance
-	return NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(openingTag, monitoredObjectIdentifier, innerOpeningTag, listOfValues, innerClosingTag, closingTag, tagNumber), nil
+	return NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(monitoredObjectIdentifier, openingTag, listOfValues, closingTag), nil
 }
 
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications) Serialize(writeBuffer utils.WriteBuffer) error {
@@ -259,18 +210,6 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 		return pushErr
 	}
 
-	// Simple Field (openingTag)
-	if pushErr := writeBuffer.PushContext("openingTag"); pushErr != nil {
-		return pushErr
-	}
-	_openingTagErr := m.OpeningTag.Serialize(writeBuffer)
-	if popErr := writeBuffer.PopContext("openingTag"); popErr != nil {
-		return popErr
-	}
-	if _openingTagErr != nil {
-		return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
-	}
-
 	// Simple Field (monitoredObjectIdentifier)
 	if pushErr := writeBuffer.PushContext("monitoredObjectIdentifier"); pushErr != nil {
 		return pushErr
@@ -283,16 +222,16 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 		return errors.Wrap(_monitoredObjectIdentifierErr, "Error serializing 'monitoredObjectIdentifier' field")
 	}
 
-	// Simple Field (innerOpeningTag)
-	if pushErr := writeBuffer.PushContext("innerOpeningTag"); pushErr != nil {
+	// Simple Field (openingTag)
+	if pushErr := writeBuffer.PushContext("openingTag"); pushErr != nil {
 		return pushErr
 	}
-	_innerOpeningTagErr := m.InnerOpeningTag.Serialize(writeBuffer)
-	if popErr := writeBuffer.PopContext("innerOpeningTag"); popErr != nil {
+	_openingTagErr := m.OpeningTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("openingTag"); popErr != nil {
 		return popErr
 	}
-	if _innerOpeningTagErr != nil {
-		return errors.Wrap(_innerOpeningTagErr, "Error serializing 'innerOpeningTag' field")
+	if _openingTagErr != nil {
+		return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
 	}
 
 	// Array Field (listOfValues)
@@ -311,18 +250,6 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovN
 		}
 	}
 
-	// Simple Field (innerClosingTag)
-	if pushErr := writeBuffer.PushContext("innerClosingTag"); pushErr != nil {
-		return pushErr
-	}
-	_innerClosingTagErr := m.InnerClosingTag.Serialize(writeBuffer)
-	if popErr := writeBuffer.PopContext("innerClosingTag"); popErr != nil {
-		return popErr
-	}
-	if _innerClosingTagErr != nil {
-		return errors.Wrap(_innerClosingTagErr, "Error serializing 'innerClosingTag' field")
-	}
-
 	// Simple Field (closingTag)
 	if pushErr := writeBuffer.PushContext("closingTag"); pushErr != nil {
 		return pushErr
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList.go
new file mode 100644
index 0000000000..a5923b955a
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList.go
@@ -0,0 +1,248 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList is the data-structure of this message
+type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList struct {
+	OpeningTag     *BACnetOpeningTag
+	Specifications []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
+	ClosingTag     *BACnetClosingTag
+
+	// Arguments.
+	TagNumber uint8
+}
+
+// IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList is the corresponding interface of BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList
+type IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList interface {
+	// GetOpeningTag returns OpeningTag (property field)
+	GetOpeningTag() *BACnetOpeningTag
+	// GetSpecifications returns Specifications (property field)
+	GetSpecifications() []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
+	// GetClosingTag returns ClosingTag (property field)
+	GetClosingTag() *BACnetClosingTag
+	// GetLengthInBytes returns the length in bytes
+	GetLengthInBytes() uint16
+	// GetLengthInBits returns the length in bits
+	GetLengthInBits() uint16
+	// Serialize serializes this type
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetOpeningTag() *BACnetOpeningTag {
+	return m.OpeningTag
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetSpecifications() []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications {
+	return m.Specifications
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetClosingTag() *BACnetClosingTag {
+	return m.ClosingTag
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList factory function for BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList
+func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList(openingTag *BACnetOpeningTag, specifications []*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList {
+	return &BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList{OpeningTag: openingTag, Specifications: specifications, ClosingTag: closingTag, TagNumber: tagNumber}
+}
+
+func CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList(structType interface{}) *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList {
+	if casted, ok := structType.(BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList); ok {
+		return &casted
+	}
+	if casted, ok := structType.(*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList); ok {
+		return casted
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetTypeName() string {
+	return "BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList"
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(0)
+
+	// Simple field (openingTag)
+	lengthInBits += m.OpeningTag.GetLengthInBits()
+
+	// Array field
+	if len(m.Specifications) > 0 {
+		for _, element := range m.Specifications {
+			lengthInBits += element.GetLengthInBits()
+		}
+	}
+
+	// Simple field (closingTag)
+	lengthInBits += m.ClosingTag.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsListParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList"); pullErr != nil {
+		return nil, pullErr
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Simple Field (openingTag)
+	if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
+		return nil, pullErr
+	}
+	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_OPENING_TAG))
+	if _openingTagErr != nil {
+		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
+	}
+	openingTag := CastBACnetOpeningTag(_openingTag)
+	if closeErr := readBuffer.CloseContext("openingTag"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Array field (specifications)
+	if pullErr := readBuffer.PullContext("specifications", utils.WithRenderAsList(true)); pullErr != nil {
+		return nil, pullErr
+	}
+	// Terminated array
+	specifications := make([]*BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications, 0)
+	{
+		for !bool(IsBACnetConstructedDataClosingTag(readBuffer, false, tagNumber)) {
+			_item, _err := BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsParse(readBuffer)
+			if _err != nil {
+				return nil, errors.Wrap(_err, "Error parsing 'specifications' field")
+			}
+			specifications = append(specifications, CastBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(_item))
+
+		}
+	}
+	if closeErr := readBuffer.CloseContext("specifications", utils.WithRenderAsList(true)); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (closingTag)
+	if pullErr := readBuffer.PullContext("closingTag"); pullErr != nil {
+		return nil, pullErr
+	}
+	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_CLOSING_TAG))
+	if _closingTagErr != nil {
+		return nil, errors.Wrap(_closingTagErr, "Error parsing 'closingTag' field")
+	}
+	closingTag := CastBACnetClosingTag(_closingTag)
+	if closeErr := readBuffer.CloseContext("closingTag"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList(openingTag, specifications, closingTag, tagNumber), nil
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	if pushErr := writeBuffer.PushContext("BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList"); pushErr != nil {
+		return pushErr
+	}
+
+	// Simple Field (openingTag)
+	if pushErr := writeBuffer.PushContext("openingTag"); pushErr != nil {
+		return pushErr
+	}
+	_openingTagErr := m.OpeningTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("openingTag"); popErr != nil {
+		return popErr
+	}
+	if _openingTagErr != nil {
+		return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
+	}
+
+	// Array Field (specifications)
+	if m.Specifications != nil {
+		if pushErr := writeBuffer.PushContext("specifications", utils.WithRenderAsList(true)); pushErr != nil {
+			return pushErr
+		}
+		for _, _element := range m.Specifications {
+			_elementErr := _element.Serialize(writeBuffer)
+			if _elementErr != nil {
+				return errors.Wrap(_elementErr, "Error serializing 'specifications' field")
+			}
+		}
+		if popErr := writeBuffer.PopContext("specifications", utils.WithRenderAsList(true)); popErr != nil {
+			return popErr
+		}
+	}
+
+	// Simple Field (closingTag)
+	if pushErr := writeBuffer.PushContext("closingTag"); pushErr != nil {
+		return pushErr
+	}
+	_closingTagErr := m.ClosingTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("closingTag"); popErr != nil {
+		return popErr
+	}
+	if _closingTagErr != nil {
+		return errors.Wrap(_closingTagErr, "Error serializing 'closingTag' field")
+	}
+
+	if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList"); popErr != nil {
+		return popErr
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	buffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := m.Serialize(buffer); err != nil {
+		return err.Error()
+	}
+	return buffer.GetBox().String()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
index a32d9c0f50..ccb6f283c0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
@@ -21,6 +21,8 @@ package model
 
 import (
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+	"io"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
@@ -28,6 +30,11 @@ import (
 // BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple is the data-structure of this message
 type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple struct {
 	*BACnetConfirmedServiceRequest
+	SubscriberProcessIdentifier         *BACnetContextTagUnsignedInteger
+	IssueConfirmedNotifications         *BACnetContextTagBoolean
+	Lifetime                            *BACnetContextTagUnsignedInteger
+	MaxNotificationDelay                *BACnetContextTagUnsignedInteger
+	ListOfCovSubscriptionSpecifications *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList
 
 	// Arguments.
 	ServiceRequestLength uint16
@@ -36,6 +43,16 @@ type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple struct {
 // IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple is the corresponding interface of BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
 type IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple interface {
 	IBACnetConfirmedServiceRequest
+	// GetSubscriberProcessIdentifier returns SubscriberProcessIdentifier (property field)
+	GetSubscriberProcessIdentifier() *BACnetContextTagUnsignedInteger
+	// GetIssueConfirmedNotifications returns IssueConfirmedNotifications (property field)
+	GetIssueConfirmedNotifications() *BACnetContextTagBoolean
+	// GetLifetime returns Lifetime (property field)
+	GetLifetime() *BACnetContextTagUnsignedInteger
+	// GetMaxNotificationDelay returns MaxNotificationDelay (property field)
+	GetMaxNotificationDelay() *BACnetContextTagUnsignedInteger
+	// GetListOfCovSubscriptionSpecifications returns ListOfCovSubscriptionSpecifications (property field)
+	GetListOfCovSubscriptionSpecifications() *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList
 	// GetLengthInBytes returns the length in bytes
 	GetLengthInBytes() uint16
 	// GetLengthInBits returns the length in bits
@@ -65,10 +82,45 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetParent()
 	return m.BACnetConfirmedServiceRequest
 }
 
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetSubscriberProcessIdentifier() *BACnetContextTagUnsignedInteger {
+	return m.SubscriberProcessIdentifier
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetIssueConfirmedNotifications() *BACnetContextTagBoolean {
+	return m.IssueConfirmedNotifications
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetLifetime() *BACnetContextTagUnsignedInteger {
+	return m.Lifetime
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetMaxNotificationDelay() *BACnetContextTagUnsignedInteger {
+	return m.MaxNotificationDelay
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetListOfCovSubscriptionSpecifications() *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList {
+	return m.ListOfCovSubscriptionSpecifications
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
 // NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple factory function for BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
-func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(serviceRequestLength uint16) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple {
+func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, issueConfirmedNotifications *BACnetContextTagBoolean, lifetime *BACnetContextTagUnsignedInteger, maxNotificationDelay *BACnetContextTagUnsignedInteger, listOfCovSubscriptionSpecifications *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList, serviceRequestLength uint16) *BACnetConfirmedServiceRequestSubscribeCOVProper [...]
 	_result := &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple{
-		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(serviceRequestLength),
+		SubscriberProcessIdentifier:         subscriberProcessIdentifier,
+		IssueConfirmedNotifications:         issueConfirmedNotifications,
+		Lifetime:                            lifetime,
+		MaxNotificationDelay:                maxNotificationDelay,
+		ListOfCovSubscriptionSpecifications: listOfCovSubscriptionSpecifications,
+		BACnetConfirmedServiceRequest:       NewBACnetConfirmedServiceRequest(serviceRequestLength),
 	}
 	_result.Child = _result
 	return _result
@@ -101,6 +153,27 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetLengthInB
 func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.GetParentLengthInBits())
 
+	// Simple field (subscriberProcessIdentifier)
+	lengthInBits += m.SubscriberProcessIdentifier.GetLengthInBits()
+
+	// Optional Field (issueConfirmedNotifications)
+	if m.IssueConfirmedNotifications != nil {
+		lengthInBits += (*m.IssueConfirmedNotifications).GetLengthInBits()
+	}
+
+	// Optional Field (lifetime)
+	if m.Lifetime != nil {
+		lengthInBits += (*m.Lifetime).GetLengthInBits()
+	}
+
+	// Optional Field (maxNotificationDelay)
+	if m.MaxNotificationDelay != nil {
+		lengthInBits += (*m.MaxNotificationDelay).GetLengthInBits()
+	}
+
+	// Simple field (listOfCovSubscriptionSpecifications)
+	lengthInBits += m.ListOfCovSubscriptionSpecifications.GetLengthInBits()
+
 	return lengthInBits
 }
 
@@ -117,9 +190,93 @@ func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer u
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
-	// Validation
-	if !(bool((1) == (2))) {
-		return nil, utils.ParseValidationError{"TODO: implement me"}
+	// Simple Field (subscriberProcessIdentifier)
+	if pullErr := readBuffer.PullContext("subscriberProcessIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_subscriberProcessIdentifier, _subscriberProcessIdentifierErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_UNSIGNED_INTEGER))
+	if _subscriberProcessIdentifierErr != nil {
+		return nil, errors.Wrap(_subscriberProcessIdentifierErr, "Error parsing 'subscriberProcessIdentifier' field")
+	}
+	subscriberProcessIdentifier := CastBACnetContextTagUnsignedInteger(_subscriberProcessIdentifier)
+	if closeErr := readBuffer.CloseContext("subscriberProcessIdentifier"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Optional Field (issueConfirmedNotifications) (Can be skipped, if a given expression evaluates to false)
+	var issueConfirmedNotifications *BACnetContextTagBoolean = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("issueConfirmedNotifications"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(1), BACnetDataType_BOOLEAN)
+		switch {
+		case errors.Is(_err, utils.ParseAssertError{}) || errors.Is(_err, io.EOF):
+			readBuffer.Reset(currentPos)
+		case _err != nil:
+			return nil, errors.Wrap(_err, "Error parsing 'issueConfirmedNotifications' field")
+		default:
+			issueConfirmedNotifications = CastBACnetContextTagBoolean(_val)
+			if closeErr := readBuffer.CloseContext("issueConfirmedNotifications"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	// Optional Field (lifetime) (Can be skipped, if a given expression evaluates to false)
+	var lifetime *BACnetContextTagUnsignedInteger = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("lifetime"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(2), BACnetDataType_UNSIGNED_INTEGER)
+		switch {
+		case errors.Is(_err, utils.ParseAssertError{}) || errors.Is(_err, io.EOF):
+			readBuffer.Reset(currentPos)
+		case _err != nil:
+			return nil, errors.Wrap(_err, "Error parsing 'lifetime' field")
+		default:
+			lifetime = CastBACnetContextTagUnsignedInteger(_val)
+			if closeErr := readBuffer.CloseContext("lifetime"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	// Optional Field (maxNotificationDelay) (Can be skipped, if a given expression evaluates to false)
+	var maxNotificationDelay *BACnetContextTagUnsignedInteger = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("maxNotificationDelay"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(3), BACnetDataType_UNSIGNED_INTEGER)
+		switch {
+		case errors.Is(_err, utils.ParseAssertError{}) || errors.Is(_err, io.EOF):
+			readBuffer.Reset(currentPos)
+		case _err != nil:
+			return nil, errors.Wrap(_err, "Error parsing 'maxNotificationDelay' field")
+		default:
+			maxNotificationDelay = CastBACnetContextTagUnsignedInteger(_val)
+			if closeErr := readBuffer.CloseContext("maxNotificationDelay"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	// Simple Field (listOfCovSubscriptionSpecifications)
+	if pullErr := readBuffer.PullContext("listOfCovSubscriptionSpecifications"); pullErr != nil {
+		return nil, pullErr
+	}
+	_listOfCovSubscriptionSpecifications, _listOfCovSubscriptionSpecificationsErr := BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsListParse(readBuffer, uint8(uint8(4)))
+	if _listOfCovSubscriptionSpecificationsErr != nil {
+		return nil, errors.Wrap(_listOfCovSubscriptionSpecificationsErr, "Error parsing 'listOfCovSubscriptionSpecifications' field")
+	}
+	listOfCovSubscriptionSpecifications := CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList(_listOfCovSubscriptionSpecifications)
+	if closeErr := readBuffer.CloseContext("listOfCovSubscriptionSpecifications"); closeErr != nil {
+		return nil, closeErr
 	}
 
 	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple"); closeErr != nil {
@@ -128,7 +285,12 @@ func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(readBuffer u
 
 	// Create a partially initialized instance
 	_child := &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple{
-		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
+		SubscriberProcessIdentifier:         CastBACnetContextTagUnsignedInteger(subscriberProcessIdentifier),
+		IssueConfirmedNotifications:         CastBACnetContextTagBoolean(issueConfirmedNotifications),
+		Lifetime:                            CastBACnetContextTagUnsignedInteger(lifetime),
+		MaxNotificationDelay:                CastBACnetContextTagUnsignedInteger(maxNotificationDelay),
+		ListOfCovSubscriptionSpecifications: CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList(listOfCovSubscriptionSpecifications),
+		BACnetConfirmedServiceRequest:       &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
 	return _child, nil
@@ -142,6 +304,78 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) Serialize(wr
 			return pushErr
 		}
 
+		// Simple Field (subscriberProcessIdentifier)
+		if pushErr := writeBuffer.PushContext("subscriberProcessIdentifier"); pushErr != nil {
+			return pushErr
+		}
+		_subscriberProcessIdentifierErr := m.SubscriberProcessIdentifier.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("subscriberProcessIdentifier"); popErr != nil {
+			return popErr
+		}
+		if _subscriberProcessIdentifierErr != nil {
+			return errors.Wrap(_subscriberProcessIdentifierErr, "Error serializing 'subscriberProcessIdentifier' field")
+		}
+
+		// Optional Field (issueConfirmedNotifications) (Can be skipped, if the value is null)
+		var issueConfirmedNotifications *BACnetContextTagBoolean = nil
+		if m.IssueConfirmedNotifications != nil {
+			if pushErr := writeBuffer.PushContext("issueConfirmedNotifications"); pushErr != nil {
+				return pushErr
+			}
+			issueConfirmedNotifications = m.IssueConfirmedNotifications
+			_issueConfirmedNotificationsErr := issueConfirmedNotifications.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("issueConfirmedNotifications"); popErr != nil {
+				return popErr
+			}
+			if _issueConfirmedNotificationsErr != nil {
+				return errors.Wrap(_issueConfirmedNotificationsErr, "Error serializing 'issueConfirmedNotifications' field")
+			}
+		}
+
+		// Optional Field (lifetime) (Can be skipped, if the value is null)
+		var lifetime *BACnetContextTagUnsignedInteger = nil
+		if m.Lifetime != nil {
+			if pushErr := writeBuffer.PushContext("lifetime"); pushErr != nil {
+				return pushErr
+			}
+			lifetime = m.Lifetime
+			_lifetimeErr := lifetime.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("lifetime"); popErr != nil {
+				return popErr
+			}
+			if _lifetimeErr != nil {
+				return errors.Wrap(_lifetimeErr, "Error serializing 'lifetime' field")
+			}
+		}
+
+		// Optional Field (maxNotificationDelay) (Can be skipped, if the value is null)
+		var maxNotificationDelay *BACnetContextTagUnsignedInteger = nil
+		if m.MaxNotificationDelay != nil {
+			if pushErr := writeBuffer.PushContext("maxNotificationDelay"); pushErr != nil {
+				return pushErr
+			}
+			maxNotificationDelay = m.MaxNotificationDelay
+			_maxNotificationDelayErr := maxNotificationDelay.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("maxNotificationDelay"); popErr != nil {
+				return popErr
+			}
+			if _maxNotificationDelayErr != nil {
+				return errors.Wrap(_maxNotificationDelayErr, "Error serializing 'maxNotificationDelay' field")
+			}
+		}
+
+		// Simple Field (listOfCovSubscriptionSpecifications)
+		if pushErr := writeBuffer.PushContext("listOfCovSubscriptionSpecifications"); pushErr != nil {
+			return pushErr
+		}
+		_listOfCovSubscriptionSpecificationsErr := m.ListOfCovSubscriptionSpecifications.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("listOfCovSubscriptionSpecifications"); popErr != nil {
+			return popErr
+		}
+		if _listOfCovSubscriptionSpecificationsErr != nil {
+			return errors.Wrap(_listOfCovSubscriptionSpecificationsErr, "Error serializing 'listOfCovSubscriptionSpecifications' field")
+		}
+
 		if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple"); popErr != nil {
 			return popErr
 		}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications.go
new file mode 100644
index 0000000000..f9781ee82b
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications.go
@@ -0,0 +1,280 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications is the data-structure of this message
+type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications struct {
+	MonitoredObjectIdentifier *BACnetContextTagObjectIdentifier
+	OpeningTag                *BACnetOpeningTag
+	ListOfCovReferences       []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference
+	ClosingTag                *BACnetClosingTag
+}
+
+// IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications is the corresponding interface of BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications
+type IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications interface {
+	// GetMonitoredObjectIdentifier returns MonitoredObjectIdentifier (property field)
+	GetMonitoredObjectIdentifier() *BACnetContextTagObjectIdentifier
+	// GetOpeningTag returns OpeningTag (property field)
+	GetOpeningTag() *BACnetOpeningTag
+	// GetListOfCovReferences returns ListOfCovReferences (property field)
+	GetListOfCovReferences() []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference
+	// GetClosingTag returns ClosingTag (property field)
+	GetClosingTag() *BACnetClosingTag
+	// GetLengthInBytes returns the length in bytes
+	GetLengthInBytes() uint16
+	// GetLengthInBits returns the length in bits
+	GetLengthInBits() uint16
+	// Serialize serializes this type
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetMonitoredObjectIdentifier() *BACnetContextTagObjectIdentifier {
+	return m.MonitoredObjectIdentifier
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetOpeningTag() *BACnetOpeningTag {
+	return m.OpeningTag
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetListOfCovReferences() []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference {
+	return m.ListOfCovReferences
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetClosingTag() *BACnetClosingTag {
+	return m.ClosingTag
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications factory function for BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications
+func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications(monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, openingTag *BACnetOpeningTag, listOfCovReferences []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference, closingTag *BACnetClosingTag) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications {
+	return &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications{MonitoredObjectIdentifier: monitoredObjectIdentifier, OpeningTag: openingTag, ListOfCovReferences: listOfCovReferences, ClosingTag: closingTag}
+}
+
+func CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications(structType interface{}) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications {
+	if casted, ok := structType.(BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications); ok {
+		return &casted
+	}
+	if casted, ok := structType.(*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications); ok {
+		return casted
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetTypeName() string {
+	return "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications"
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(0)
+
+	// Simple field (monitoredObjectIdentifier)
+	lengthInBits += m.MonitoredObjectIdentifier.GetLengthInBits()
+
+	// Simple field (openingTag)
+	lengthInBits += m.OpeningTag.GetLengthInBits()
+
+	// Array field
+	if len(m.ListOfCovReferences) > 0 {
+		for _, element := range m.ListOfCovReferences {
+			lengthInBits += element.GetLengthInBits()
+		}
+	}
+
+	// Simple field (closingTag)
+	lengthInBits += m.ClosingTag.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications"); pullErr != nil {
+		return nil, pullErr
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Simple Field (monitoredObjectIdentifier)
+	if pullErr := readBuffer.PullContext("monitoredObjectIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_monitoredObjectIdentifier, _monitoredObjectIdentifierErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_BACNET_OBJECT_IDENTIFIER))
+	if _monitoredObjectIdentifierErr != nil {
+		return nil, errors.Wrap(_monitoredObjectIdentifierErr, "Error parsing 'monitoredObjectIdentifier' field")
+	}
+	monitoredObjectIdentifier := CastBACnetContextTagObjectIdentifier(_monitoredObjectIdentifier)
+	if closeErr := readBuffer.CloseContext("monitoredObjectIdentifier"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (openingTag)
+	if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
+		return nil, pullErr
+	}
+	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_OPENING_TAG))
+	if _openingTagErr != nil {
+		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
+	}
+	openingTag := CastBACnetOpeningTag(_openingTag)
+	if closeErr := readBuffer.CloseContext("openingTag"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Array field (listOfCovReferences)
+	if pullErr := readBuffer.PullContext("listOfCovReferences", utils.WithRenderAsList(true)); pullErr != nil {
+		return nil, pullErr
+	}
+	// Terminated array
+	listOfCovReferences := make([]*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference, 0)
+	{
+		for !bool(IsBACnetConstructedDataClosingTag(readBuffer, false, 1)) {
+			_item, _err := BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReferenceParse(readBuffer)
+			if _err != nil {
+				return nil, errors.Wrap(_err, "Error parsing 'listOfCovReferences' field")
+			}
+			listOfCovReferences = append(listOfCovReferences, CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference(_item))
+
+		}
+	}
+	if closeErr := readBuffer.CloseContext("listOfCovReferences", utils.WithRenderAsList(true)); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (closingTag)
+	if pullErr := readBuffer.PullContext("closingTag"); pullErr != nil {
+		return nil, pullErr
+	}
+	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_CLOSING_TAG))
+	if _closingTagErr != nil {
+		return nil, errors.Wrap(_closingTagErr, "Error parsing 'closingTag' field")
+	}
+	closingTag := CastBACnetClosingTag(_closingTag)
+	if closeErr := readBuffer.CloseContext("closingTag"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications(monitoredObjectIdentifier, openingTag, listOfCovReferences, closingTag), nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	if pushErr := writeBuffer.PushContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications"); pushErr != nil {
+		return pushErr
+	}
+
+	// Simple Field (monitoredObjectIdentifier)
+	if pushErr := writeBuffer.PushContext("monitoredObjectIdentifier"); pushErr != nil {
+		return pushErr
+	}
+	_monitoredObjectIdentifierErr := m.MonitoredObjectIdentifier.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("monitoredObjectIdentifier"); popErr != nil {
+		return popErr
+	}
+	if _monitoredObjectIdentifierErr != nil {
+		return errors.Wrap(_monitoredObjectIdentifierErr, "Error serializing 'monitoredObjectIdentifier' field")
+	}
+
+	// Simple Field (openingTag)
+	if pushErr := writeBuffer.PushContext("openingTag"); pushErr != nil {
+		return pushErr
+	}
+	_openingTagErr := m.OpeningTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("openingTag"); popErr != nil {
+		return popErr
+	}
+	if _openingTagErr != nil {
+		return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
+	}
+
+	// Array Field (listOfCovReferences)
+	if m.ListOfCovReferences != nil {
+		if pushErr := writeBuffer.PushContext("listOfCovReferences", utils.WithRenderAsList(true)); pushErr != nil {
+			return pushErr
+		}
+		for _, _element := range m.ListOfCovReferences {
+			_elementErr := _element.Serialize(writeBuffer)
+			if _elementErr != nil {
+				return errors.Wrap(_elementErr, "Error serializing 'listOfCovReferences' field")
+			}
+		}
+		if popErr := writeBuffer.PopContext("listOfCovReferences", utils.WithRenderAsList(true)); popErr != nil {
+			return popErr
+		}
+	}
+
+	// Simple Field (closingTag)
+	if pushErr := writeBuffer.PushContext("closingTag"); pushErr != nil {
+		return pushErr
+	}
+	_closingTagErr := m.ClosingTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("closingTag"); popErr != nil {
+		return popErr
+	}
+	if _closingTagErr != nil {
+		return errors.Wrap(_closingTagErr, "Error serializing 'closingTag' field")
+	}
+
+	if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications"); popErr != nil {
+		return popErr
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	buffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := m.Serialize(buffer); err != nil {
+		return err.Error()
+	}
+	return buffer.GetBox().String()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList.go
new file mode 100644
index 0000000000..087ec5c78b
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList.go
@@ -0,0 +1,248 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList is the data-structure of this message
+type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList struct {
+	OpeningTag     *BACnetOpeningTag
+	Specifications []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications
+	ClosingTag     *BACnetClosingTag
+
+	// Arguments.
+	TagNumber uint8
+}
+
+// IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList is the corresponding interface of BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList
+type IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList interface {
+	// GetOpeningTag returns OpeningTag (property field)
+	GetOpeningTag() *BACnetOpeningTag
+	// GetSpecifications returns Specifications (property field)
+	GetSpecifications() []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications
+	// GetClosingTag returns ClosingTag (property field)
+	GetClosingTag() *BACnetClosingTag
+	// GetLengthInBytes returns the length in bytes
+	GetLengthInBytes() uint16
+	// GetLengthInBits returns the length in bits
+	GetLengthInBits() uint16
+	// Serialize serializes this type
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetOpeningTag() *BACnetOpeningTag {
+	return m.OpeningTag
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetSpecifications() []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications {
+	return m.Specifications
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetClosingTag() *BACnetClosingTag {
+	return m.ClosingTag
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList factory function for BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList
+func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList(openingTag *BACnetOpeningTag, specifications []*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList {
+	return &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList{OpeningTag: openingTag, Specifications: specifications, ClosingTag: closingTag, TagNumber: tagNumber}
+}
+
+func CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList(structType interface{}) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList {
+	if casted, ok := structType.(BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList); ok {
+		return &casted
+	}
+	if casted, ok := structType.(*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList); ok {
+		return casted
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetTypeName() string {
+	return "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList"
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(0)
+
+	// Simple field (openingTag)
+	lengthInBits += m.OpeningTag.GetLengthInBits()
+
+	// Array field
+	if len(m.Specifications) > 0 {
+		for _, element := range m.Specifications {
+			lengthInBits += element.GetLengthInBits()
+		}
+	}
+
+	// Simple field (closingTag)
+	lengthInBits += m.ClosingTag.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsListParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList"); pullErr != nil {
+		return nil, pullErr
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Simple Field (openingTag)
+	if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
+		return nil, pullErr
+	}
+	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_OPENING_TAG))
+	if _openingTagErr != nil {
+		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
+	}
+	openingTag := CastBACnetOpeningTag(_openingTag)
+	if closeErr := readBuffer.CloseContext("openingTag"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Array field (specifications)
+	if pullErr := readBuffer.PullContext("specifications", utils.WithRenderAsList(true)); pullErr != nil {
+		return nil, pullErr
+	}
+	// Terminated array
+	specifications := make([]*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications, 0)
+	{
+		for !bool(IsBACnetConstructedDataClosingTag(readBuffer, false, tagNumber)) {
+			_item, _err := BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsParse(readBuffer)
+			if _err != nil {
+				return nil, errors.Wrap(_err, "Error parsing 'specifications' field")
+			}
+			specifications = append(specifications, CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications(_item))
+
+		}
+	}
+	if closeErr := readBuffer.CloseContext("specifications", utils.WithRenderAsList(true)); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (closingTag)
+	if pullErr := readBuffer.PullContext("closingTag"); pullErr != nil {
+		return nil, pullErr
+	}
+	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_CLOSING_TAG))
+	if _closingTagErr != nil {
+		return nil, errors.Wrap(_closingTagErr, "Error parsing 'closingTag' field")
+	}
+	closingTag := CastBACnetClosingTag(_closingTag)
+	if closeErr := readBuffer.CloseContext("closingTag"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList(openingTag, specifications, closingTag, tagNumber), nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	if pushErr := writeBuffer.PushContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList"); pushErr != nil {
+		return pushErr
+	}
+
+	// Simple Field (openingTag)
+	if pushErr := writeBuffer.PushContext("openingTag"); pushErr != nil {
+		return pushErr
+	}
+	_openingTagErr := m.OpeningTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("openingTag"); popErr != nil {
+		return popErr
+	}
+	if _openingTagErr != nil {
+		return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
+	}
+
+	// Array Field (specifications)
+	if m.Specifications != nil {
+		if pushErr := writeBuffer.PushContext("specifications", utils.WithRenderAsList(true)); pushErr != nil {
+			return pushErr
+		}
+		for _, _element := range m.Specifications {
+			_elementErr := _element.Serialize(writeBuffer)
+			if _elementErr != nil {
+				return errors.Wrap(_elementErr, "Error serializing 'specifications' field")
+			}
+		}
+		if popErr := writeBuffer.PopContext("specifications", utils.WithRenderAsList(true)); popErr != nil {
+			return popErr
+		}
+	}
+
+	// Simple Field (closingTag)
+	if pushErr := writeBuffer.PushContext("closingTag"); pushErr != nil {
+		return pushErr
+	}
+	_closingTagErr := m.ClosingTag.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("closingTag"); popErr != nil {
+		return popErr
+	}
+	if _closingTagErr != nil {
+		return errors.Wrap(_closingTagErr, "Error serializing 'closingTag' field")
+	}
+
+	if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList"); popErr != nil {
+		return popErr
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	buffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := m.Serialize(buffer); err != nil {
+		return err.Error()
+	}
+	return buffer.GetBox().String()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference.go
new file mode 100644
index 0000000000..c97abb1dff
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference.go
@@ -0,0 +1,245 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package model
+
+import (
+	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
+	"io"
+)
+
+// Code generated by code-generation. DO NOT EDIT.
+
+// BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference is the data-structure of this message
+type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference struct {
+	MonitoredProperty *BACnetPropertyReferenceEnclosed
+	CovIncrement      *BACnetContextTagReal
+	Timestamped       *BACnetContextTagBoolean
+}
+
+// IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference is the corresponding interface of BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference
+type IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference interface {
+	// GetMonitoredProperty returns MonitoredProperty (property field)
+	GetMonitoredProperty() *BACnetPropertyReferenceEnclosed
+	// GetCovIncrement returns CovIncrement (property field)
+	GetCovIncrement() *BACnetContextTagReal
+	// GetTimestamped returns Timestamped (property field)
+	GetTimestamped() *BACnetContextTagBoolean
+	// GetLengthInBytes returns the length in bytes
+	GetLengthInBytes() uint16
+	// GetLengthInBits returns the length in bits
+	GetLengthInBits() uint16
+	// Serialize serializes this type
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+/////////////////////// Accessors for property fields.
+///////////////////////
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetMonitoredProperty() *BACnetPropertyReferenceEnclosed {
+	return m.MonitoredProperty
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetCovIncrement() *BACnetContextTagReal {
+	return m.CovIncrement
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetTimestamped() *BACnetContextTagBoolean {
+	return m.Timestamped
+}
+
+///////////////////////
+///////////////////////
+///////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////
+
+// NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference factory function for BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference
+func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference(monitoredProperty *BACnetPropertyReferenceEnclosed, covIncrement *BACnetContextTagReal, timestamped *BACnetContextTagBoolean) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference {
+	return &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference{MonitoredProperty: monitoredProperty, CovIncrement: covIncrement, Timestamped: timestamped}
+}
+
+func CastBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference(structType interface{}) *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference {
+	if casted, ok := structType.(BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference); ok {
+		return &casted
+	}
+	if casted, ok := structType.(*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference); ok {
+		return casted
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetTypeName() string {
+	return "BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference"
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetLengthInBits() uint16 {
+	return m.GetLengthInBitsConditional(false)
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetLengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(0)
+
+	// Simple field (monitoredProperty)
+	lengthInBits += m.MonitoredProperty.GetLengthInBits()
+
+	// Optional Field (covIncrement)
+	if m.CovIncrement != nil {
+		lengthInBits += (*m.CovIncrement).GetLengthInBits()
+	}
+
+	// Simple field (timestamped)
+	lengthInBits += m.Timestamped.GetLengthInBits()
+
+	return lengthInBits
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) GetLengthInBytes() uint16 {
+	return m.GetLengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReferenceParse(readBuffer utils.ReadBuffer) (*BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference, error) {
+	positionAware := readBuffer
+	_ = positionAware
+	if pullErr := readBuffer.PullContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference"); pullErr != nil {
+		return nil, pullErr
+	}
+	currentPos := positionAware.GetPos()
+	_ = currentPos
+
+	// Simple Field (monitoredProperty)
+	if pullErr := readBuffer.PullContext("monitoredProperty"); pullErr != nil {
+		return nil, pullErr
+	}
+	_monitoredProperty, _monitoredPropertyErr := BACnetPropertyReferenceEnclosedParse(readBuffer, uint8(uint8(1)))
+	if _monitoredPropertyErr != nil {
+		return nil, errors.Wrap(_monitoredPropertyErr, "Error parsing 'monitoredProperty' field")
+	}
+	monitoredProperty := CastBACnetPropertyReferenceEnclosed(_monitoredProperty)
+	if closeErr := readBuffer.CloseContext("monitoredProperty"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Optional Field (covIncrement) (Can be skipped, if a given expression evaluates to false)
+	var covIncrement *BACnetContextTagReal = nil
+	{
+		currentPos = positionAware.GetPos()
+		if pullErr := readBuffer.PullContext("covIncrement"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, uint8(1), BACnetDataType_REAL)
+		switch {
+		case errors.Is(_err, utils.ParseAssertError{}) || errors.Is(_err, io.EOF):
+			readBuffer.Reset(currentPos)
+		case _err != nil:
+			return nil, errors.Wrap(_err, "Error parsing 'covIncrement' field")
+		default:
+			covIncrement = CastBACnetContextTagReal(_val)
+			if closeErr := readBuffer.CloseContext("covIncrement"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	// Simple Field (timestamped)
+	if pullErr := readBuffer.PullContext("timestamped"); pullErr != nil {
+		return nil, pullErr
+	}
+	_timestamped, _timestampedErr := BACnetContextTagParse(readBuffer, uint8(uint8(2)), BACnetDataType(BACnetDataType_BOOLEAN))
+	if _timestampedErr != nil {
+		return nil, errors.Wrap(_timestampedErr, "Error parsing 'timestamped' field")
+	}
+	timestamped := CastBACnetContextTagBoolean(_timestamped)
+	if closeErr := readBuffer.CloseContext("timestamped"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference(monitoredProperty, covIncrement, timestamped), nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) Serialize(writeBuffer utils.WriteBuffer) error {
+	positionAware := writeBuffer
+	_ = positionAware
+	if pushErr := writeBuffer.PushContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference"); pushErr != nil {
+		return pushErr
+	}
+
+	// Simple Field (monitoredProperty)
+	if pushErr := writeBuffer.PushContext("monitoredProperty"); pushErr != nil {
+		return pushErr
+	}
+	_monitoredPropertyErr := m.MonitoredProperty.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("monitoredProperty"); popErr != nil {
+		return popErr
+	}
+	if _monitoredPropertyErr != nil {
+		return errors.Wrap(_monitoredPropertyErr, "Error serializing 'monitoredProperty' field")
+	}
+
+	// Optional Field (covIncrement) (Can be skipped, if the value is null)
+	var covIncrement *BACnetContextTagReal = nil
+	if m.CovIncrement != nil {
+		if pushErr := writeBuffer.PushContext("covIncrement"); pushErr != nil {
+			return pushErr
+		}
+		covIncrement = m.CovIncrement
+		_covIncrementErr := covIncrement.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("covIncrement"); popErr != nil {
+			return popErr
+		}
+		if _covIncrementErr != nil {
+			return errors.Wrap(_covIncrementErr, "Error serializing 'covIncrement' field")
+		}
+	}
+
+	// Simple Field (timestamped)
+	if pushErr := writeBuffer.PushContext("timestamped"); pushErr != nil {
+		return pushErr
+	}
+	_timestampedErr := m.Timestamped.Serialize(writeBuffer)
+	if popErr := writeBuffer.PopContext("timestamped"); popErr != nil {
+		return popErr
+	}
+	if _timestampedErr != nil {
+		return errors.Wrap(_timestampedErr, "Error serializing 'timestamped' field")
+	}
+
+	if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference"); popErr != nil {
+		return popErr
+	}
+	return nil
+}
+
+func (m *BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	buffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	if err := m.Serialize(buffer); err != nil {
+		return err.Error()
+	}
+	return buffer.GetBox().String()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventSummaries.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventSummariesList.go
similarity index 72%
rename from plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventSummaries.go
rename to plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventSummariesList.go
index ba73f83bd4..f42252e7f5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventSummaries.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetEventSummariesList.go
@@ -26,15 +26,18 @@ import (
 
 // Code generated by code-generation. DO NOT EDIT.
 
-// BACnetEventSummaries is the data-structure of this message
-type BACnetEventSummaries struct {
+// BACnetEventSummariesList is the data-structure of this message
+type BACnetEventSummariesList struct {
 	OpeningTag           *BACnetOpeningTag
 	ListOfEventSummaries []*BACnetEventSummary
 	ClosingTag           *BACnetClosingTag
+
+	// Arguments.
+	TagNumber uint8
 }
 
-// IBACnetEventSummaries is the corresponding interface of BACnetEventSummaries
-type IBACnetEventSummaries interface {
+// IBACnetEventSummariesList is the corresponding interface of BACnetEventSummariesList
+type IBACnetEventSummariesList interface {
 	// GetOpeningTag returns OpeningTag (property field)
 	GetOpeningTag() *BACnetOpeningTag
 	// GetListOfEventSummaries returns ListOfEventSummaries (property field)
@@ -54,15 +57,15 @@ type IBACnetEventSummaries interface {
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *BACnetEventSummaries) GetOpeningTag() *BACnetOpeningTag {
+func (m *BACnetEventSummariesList) GetOpeningTag() *BACnetOpeningTag {
 	return m.OpeningTag
 }
 
-func (m *BACnetEventSummaries) GetListOfEventSummaries() []*BACnetEventSummary {
+func (m *BACnetEventSummariesList) GetListOfEventSummaries() []*BACnetEventSummary {
 	return m.ListOfEventSummaries
 }
 
-func (m *BACnetEventSummaries) GetClosingTag() *BACnetClosingTag {
+func (m *BACnetEventSummariesList) GetClosingTag() *BACnetClosingTag {
 	return m.ClosingTag
 }
 
@@ -71,30 +74,30 @@ func (m *BACnetEventSummaries) GetClosingTag() *BACnetClosingTag {
 ///////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////
 
-// NewBACnetEventSummaries factory function for BACnetEventSummaries
-func NewBACnetEventSummaries(openingTag *BACnetOpeningTag, listOfEventSummaries []*BACnetEventSummary, closingTag *BACnetClosingTag) *BACnetEventSummaries {
-	return &BACnetEventSummaries{OpeningTag: openingTag, ListOfEventSummaries: listOfEventSummaries, ClosingTag: closingTag}
+// NewBACnetEventSummariesList factory function for BACnetEventSummariesList
+func NewBACnetEventSummariesList(openingTag *BACnetOpeningTag, listOfEventSummaries []*BACnetEventSummary, closingTag *BACnetClosingTag, tagNumber uint8) *BACnetEventSummariesList {
+	return &BACnetEventSummariesList{OpeningTag: openingTag, ListOfEventSummaries: listOfEventSummaries, ClosingTag: closingTag, TagNumber: tagNumber}
 }
 
-func CastBACnetEventSummaries(structType interface{}) *BACnetEventSummaries {
-	if casted, ok := structType.(BACnetEventSummaries); ok {
+func CastBACnetEventSummariesList(structType interface{}) *BACnetEventSummariesList {
+	if casted, ok := structType.(BACnetEventSummariesList); ok {
 		return &casted
 	}
-	if casted, ok := structType.(*BACnetEventSummaries); ok {
+	if casted, ok := structType.(*BACnetEventSummariesList); ok {
 		return casted
 	}
 	return nil
 }
 
-func (m *BACnetEventSummaries) GetTypeName() string {
-	return "BACnetEventSummaries"
+func (m *BACnetEventSummariesList) GetTypeName() string {
+	return "BACnetEventSummariesList"
 }
 
-func (m *BACnetEventSummaries) GetLengthInBits() uint16 {
+func (m *BACnetEventSummariesList) GetLengthInBits() uint16 {
 	return m.GetLengthInBitsConditional(false)
 }
 
-func (m *BACnetEventSummaries) GetLengthInBitsConditional(lastItem bool) uint16 {
+func (m *BACnetEventSummariesList) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(0)
 
 	// Simple field (openingTag)
@@ -113,14 +116,14 @@ func (m *BACnetEventSummaries) GetLengthInBitsConditional(lastItem bool) uint16
 	return lengthInBits
 }
 
-func (m *BACnetEventSummaries) GetLengthInBytes() uint16 {
+func (m *BACnetEventSummariesList) GetLengthInBytes() uint16 {
 	return m.GetLengthInBits() / 8
 }
 
-func BACnetEventSummariesParse(readBuffer utils.ReadBuffer) (*BACnetEventSummaries, error) {
+func BACnetEventSummariesListParse(readBuffer utils.ReadBuffer, tagNumber uint8) (*BACnetEventSummariesList, error) {
 	positionAware := readBuffer
 	_ = positionAware
-	if pullErr := readBuffer.PullContext("BACnetEventSummaries"); pullErr != nil {
+	if pullErr := readBuffer.PullContext("BACnetEventSummariesList"); pullErr != nil {
 		return nil, pullErr
 	}
 	currentPos := positionAware.GetPos()
@@ -130,7 +133,7 @@ func BACnetEventSummariesParse(readBuffer utils.ReadBuffer) (*BACnetEventSummari
 	if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
 		return nil, pullErr
 	}
-	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_OPENING_TAG))
+	_openingTag, _openingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_OPENING_TAG))
 	if _openingTagErr != nil {
 		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
 	}
@@ -163,7 +166,7 @@ func BACnetEventSummariesParse(readBuffer utils.ReadBuffer) (*BACnetEventSummari
 	if pullErr := readBuffer.PullContext("closingTag"); pullErr != nil {
 		return nil, pullErr
 	}
-	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_CLOSING_TAG))
+	_closingTag, _closingTagErr := BACnetContextTagParse(readBuffer, uint8(tagNumber), BACnetDataType(BACnetDataType_CLOSING_TAG))
 	if _closingTagErr != nil {
 		return nil, errors.Wrap(_closingTagErr, "Error parsing 'closingTag' field")
 	}
@@ -172,18 +175,18 @@ func BACnetEventSummariesParse(readBuffer utils.ReadBuffer) (*BACnetEventSummari
 		return nil, closeErr
 	}
 
-	if closeErr := readBuffer.CloseContext("BACnetEventSummaries"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("BACnetEventSummariesList"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Create the instance
-	return NewBACnetEventSummaries(openingTag, listOfEventSummaries, closingTag), nil
+	return NewBACnetEventSummariesList(openingTag, listOfEventSummaries, closingTag, tagNumber), nil
 }
 
-func (m *BACnetEventSummaries) Serialize(writeBuffer utils.WriteBuffer) error {
+func (m *BACnetEventSummariesList) Serialize(writeBuffer utils.WriteBuffer) error {
 	positionAware := writeBuffer
 	_ = positionAware
-	if pushErr := writeBuffer.PushContext("BACnetEventSummaries"); pushErr != nil {
+	if pushErr := writeBuffer.PushContext("BACnetEventSummariesList"); pushErr != nil {
 		return pushErr
 	}
 
@@ -227,13 +230,13 @@ func (m *BACnetEventSummaries) Serialize(writeBuffer utils.WriteBuffer) error {
 		return errors.Wrap(_closingTagErr, "Error serializing 'closingTag' field")
 	}
 
-	if popErr := writeBuffer.PopContext("BACnetEventSummaries"); popErr != nil {
+	if popErr := writeBuffer.PopContext("BACnetEventSummariesList"); popErr != nil {
 		return popErr
 	}
 	return nil
 }
 
-func (m *BACnetEventSummaries) String() string {
+func (m *BACnetEventSummariesList) String() string {
 	if m == nil {
 		return "<nil>"
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
index 3afd76d921..ed291758e8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
@@ -29,7 +29,7 @@ import (
 // BACnetServiceAckGetEventInformation is the data-structure of this message
 type BACnetServiceAckGetEventInformation struct {
 	*BACnetServiceAck
-	ListOfEventSummaries *BACnetEventSummaries
+	ListOfEventSummaries *BACnetEventSummariesList
 	MoreEvents           *BACnetContextTagBoolean
 
 	// Arguments.
@@ -40,7 +40,7 @@ type BACnetServiceAckGetEventInformation struct {
 type IBACnetServiceAckGetEventInformation interface {
 	IBACnetServiceAck
 	// GetListOfEventSummaries returns ListOfEventSummaries (property field)
-	GetListOfEventSummaries() *BACnetEventSummaries
+	GetListOfEventSummaries() *BACnetEventSummariesList
 	// GetMoreEvents returns MoreEvents (property field)
 	GetMoreEvents() *BACnetContextTagBoolean
 	// GetLengthInBytes returns the length in bytes
@@ -76,7 +76,7 @@ func (m *BACnetServiceAckGetEventInformation) GetParent() *BACnetServiceAck {
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *BACnetServiceAckGetEventInformation) GetListOfEventSummaries() *BACnetEventSummaries {
+func (m *BACnetServiceAckGetEventInformation) GetListOfEventSummaries() *BACnetEventSummariesList {
 	return m.ListOfEventSummaries
 }
 
@@ -90,7 +90,7 @@ func (m *BACnetServiceAckGetEventInformation) GetMoreEvents() *BACnetContextTagB
 ///////////////////////////////////////////////////////////
 
 // NewBACnetServiceAckGetEventInformation factory function for BACnetServiceAckGetEventInformation
-func NewBACnetServiceAckGetEventInformation(listOfEventSummaries *BACnetEventSummaries, moreEvents *BACnetContextTagBoolean, serviceRequestLength uint16) *BACnetServiceAckGetEventInformation {
+func NewBACnetServiceAckGetEventInformation(listOfEventSummaries *BACnetEventSummariesList, moreEvents *BACnetContextTagBoolean, serviceRequestLength uint16) *BACnetServiceAckGetEventInformation {
 	_result := &BACnetServiceAckGetEventInformation{
 		ListOfEventSummaries: listOfEventSummaries,
 		MoreEvents:           moreEvents,
@@ -153,11 +153,11 @@ func BACnetServiceAckGetEventInformationParse(readBuffer utils.ReadBuffer, servi
 	if pullErr := readBuffer.PullContext("listOfEventSummaries"); pullErr != nil {
 		return nil, pullErr
 	}
-	_listOfEventSummaries, _listOfEventSummariesErr := BACnetEventSummariesParse(readBuffer)
+	_listOfEventSummaries, _listOfEventSummariesErr := BACnetEventSummariesListParse(readBuffer, uint8(uint8(0)))
 	if _listOfEventSummariesErr != nil {
 		return nil, errors.Wrap(_listOfEventSummariesErr, "Error parsing 'listOfEventSummaries' field")
 	}
-	listOfEventSummaries := CastBACnetEventSummaries(_listOfEventSummaries)
+	listOfEventSummaries := CastBACnetEventSummariesList(_listOfEventSummaries)
 	if closeErr := readBuffer.CloseContext("listOfEventSummaries"); closeErr != nil {
 		return nil, closeErr
 	}
@@ -166,7 +166,7 @@ func BACnetServiceAckGetEventInformationParse(readBuffer utils.ReadBuffer, servi
 	if pullErr := readBuffer.PullContext("moreEvents"); pullErr != nil {
 		return nil, pullErr
 	}
-	_moreEvents, _moreEventsErr := BACnetContextTagParse(readBuffer, uint8(uint8(0)), BACnetDataType(BACnetDataType_BOOLEAN))
+	_moreEvents, _moreEventsErr := BACnetContextTagParse(readBuffer, uint8(uint8(1)), BACnetDataType(BACnetDataType_BOOLEAN))
 	if _moreEventsErr != nil {
 		return nil, errors.Wrap(_moreEventsErr, "Error parsing 'moreEvents' field")
 	}
@@ -181,7 +181,7 @@ func BACnetServiceAckGetEventInformationParse(readBuffer utils.ReadBuffer, servi
 
 	// Create a partially initialized instance
 	_child := &BACnetServiceAckGetEventInformation{
-		ListOfEventSummaries: CastBACnetEventSummaries(listOfEventSummaries),
+		ListOfEventSummaries: CastBACnetEventSummariesList(listOfEventSummaries),
 		MoreEvents:           CastBACnetContextTagBoolean(moreEvents),
 		BACnetServiceAck:     &BACnetServiceAck{},
 	}
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index 41debe3a0c..4431c7e488 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -379,7 +379,7 @@
             [simple   BACnetContextTagObjectIdentifier('1', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') initiatingDeviceIdentifier  ]
             [simple   BACnetContextTagUnsignedInteger('2', 'BACnetDataType.UNSIGNED_INTEGER')          timeRemaining               ]
             [optional BACnetTimeStampEnclosed('3')                                                     timestamp                   ]
-            [simple   BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications('4')
+            [simple   BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList('4')
                                                                                                        listOfCovNotifications      ]
         ]
         ['CONFIRMED_EVENT_NOTIFICATION' BACnetConfirmedServiceRequestConfirmedEventNotification // Spec complete
@@ -423,8 +423,12 @@
             [optional BACnetContextTagReal('5', 'BACnetDataType.REAL')                                 covIncrement                 ]
         ]
         ['SUBSCRIBE_COV_PROPERTY_MULTIPLE' BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple
-            // TODO: implement me
-            [validation    '1 == 2'    "TODO: implement me"]
+            [simple   BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')          subscriberProcessIdentifier  ]
+            [optional BACnetContextTagBoolean('1', 'BACnetDataType.BOOLEAN')                           issueConfirmedNotifications  ]
+            [optional BACnetContextTagUnsignedInteger('2', 'BACnetDataType.UNSIGNED_INTEGER')          lifetime                     ]
+            [optional BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')          maxNotificationDelay         ]
+            [simple   BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList('4')
+                                                                                                       listOfCovSubscriptionSpecifications ]
         ]
         //
         ////
@@ -641,46 +645,85 @@
     ////
 ]
 
-[type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications(uint 8 tagNumber)
+[type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsList(uint 8 tagNumber)
     [simple     BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
-                     openingTag                     ]
-    [simple   BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') monitoredObjectIdentifier   ]
+                     openingTag                                                                         ]
+    [array    BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
+                     specifications
+                        terminated
+                        'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, tagNumber)']
+    [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
+                        closingTag                                                                      ]
+]
+
+[type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotifications
+    [simple     BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER')
+                        monitoredObjectIdentifier                                                       ]
     [simple     BACnetOpeningTag('1', 'BACnetDataType.OPENING_TAG')
-                         innerOpeningTag            ]
-    [array    BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue('monitoredObjectIdentifier.objectType')
+                        openingTag                                                                      ]
+    [array      BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue('monitoredObjectIdentifier.objectType')
                         listOfValues
-                        terminated
-                        'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 1)'
-    ]
+                            terminated
+                            'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 1)'    ]
     [simple     BACnetClosingTag('1', 'BACnetDataType.CLOSING_TAG')
-                     innerClosingTag                ]
-    [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
-                     closingTag                     ]
+                        closingTag                                                                      ]
 ]
 
 [type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleListOfCovNotificationsValue(BACnetObjectType objectType)
     [simple   BACnetContextTagPropertyIdentifier('0', 'BACnetDataType.BACNET_PROPERTY_IDENTIFIER')
-                                propertyIdentifier      ]
+                                propertyIdentifier                                                      ]
     [optional BACnetContextTagUnsignedInteger('1', 'BACnetDataType.UNSIGNED_INTEGER')
-                                arrayIndex              ]
+                                arrayIndex                                                              ]
     [simple   BACnetConstructedData('2', 'objectType', 'propertyIdentifier')
-                                propertyValue           ]
+                                propertyValue                                                           ]
     [optional BACnetContextTagTime('3', 'BACnetDataType.TIME')
-                                timeOfChange            ]
+                                timeOfChange                                                            ]
+]
+
+[type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsList(uint 8 tagNumber)
+    [simple     BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
+                     openingTag                                                                         ]
+    [array    BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications
+                     specifications
+                        terminated
+                        'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, tagNumber)']
+    [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
+                     closingTag                                                                         ]
+]
+
+[type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecifications
+    [simple   BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER')
+                    monitoredObjectIdentifier                                                           ]
+    [simple   BACnetOpeningTag('1', 'BACnetDataType.OPENING_TAG')
+                    openingTag                                                                          ]
+    [array    BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference
+                    listOfCovReferences
+                        terminated
+                        'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 1)'        ]
+    [simple     BACnetClosingTag('1', 'BACnetDataType.CLOSING_TAG')
+                    closingTag                                                                          ]
+]
+
+[type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleListOfCovSubscriptionSpecificationsReference
+    [simple   BACnetPropertyReferenceEnclosed('1')
+                    monitoredProperty                                                                   ]
+    [optional BACnetContextTagReal('1', 'BACnetDataType.REAL')
+                    covIncrement                                                                        ]
+    [simple   BACnetContextTagBoolean('2', 'BACnetDataType.BOOLEAN')
+                    timestamped                                                                         ]
 ]
 
 [type BACnetReadAccessSpecification
     [simple   BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER')
-                    objectIdentifier                ]
+                    objectIdentifier                                                                    ]
     [simple     BACnetOpeningTag('1', 'BACnetDataType.OPENING_TAG')
-                     openingTag                     ]
+                     openingTag                                                                         ]
     [array    BACnetPropertyReference
                     listOfPropertyReferences
-                    terminated
-                    'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 1)'
-    ]
+                        terminated
+                        'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 1)'        ]
     [simple     BACnetClosingTag('1', 'BACnetDataType.CLOSING_TAG')
-                     closingTag                     ]
+                     closingTag                                                                         ]
 ]
 
 [type BACnetPropertyReferenceEnclosed(uint 8 tagNumber)
@@ -931,10 +974,10 @@
             [validation    '1 == 2'    "TODO: implement me"]
         ]
         ['GET_EVENT_INFORMATION' BACnetServiceAckGetEventInformation
-            [simple BACnetEventSummaries
-                        listOfEventSummaries        ]
-            [simple BACnetContextTagBoolean('0', 'BACnetDataType.BOOLEAN')
-                        moreEvents                  ]
+            [simple BACnetEventSummariesList('0')
+                        listOfEventSummaries            ]
+            [simple BACnetContextTagBoolean('1', 'BACnetDataType.BOOLEAN')
+                        moreEvents                       ]
         ]
         ['LIFE_SAFETY_OPERATION' BACnetServiceAckLifeSafetyOperation
             // TODO: implement me
@@ -1086,15 +1129,15 @@
 ]
 
 // TODO: check if we should embed this type into BACnetServiceAckGetEventInformation as we double map
-[type BACnetEventSummaries
-    [simple     BACnetOpeningTag('0', 'BACnetDataType.OPENING_TAG')
+[type BACnetEventSummariesList(uint 8 tagNumber)
+    [simple     BACnetOpeningTag('tagNumber', 'BACnetDataType.OPENING_TAG')
                      openingTag                     ]
     [array    BACnetEventSummary
                          listOfEventSummaries
                          terminated
                          'STATIC_CALL("isBACnetConstructedDataClosingTag", readBuffer, false, 1)'
     ]
-    [simple     BACnetClosingTag('0', 'BACnetDataType.CLOSING_TAG')
+    [simple     BACnetClosingTag('tagNumber', 'BACnetDataType.CLOSING_TAG')
                      closingTag                     ]
 ]