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/01/05 17:37:37 UTC

[plc4x] branch develop updated: fix(bacnet): cleaned up and worked on COV

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

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


The following commit(s) were added to refs/heads/develop by this push:
     new 4d24d1c  fix(bacnet): cleaned up and worked on COV
4d24d1c is described below

commit 4d24d1c551c5c0cd8aef384dd08d6a7f06cc54d4
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Jan 5 18:36:44 2022 +0100

    fix(bacnet): cleaned up and worked on COV
---
 .../plc4go/bacnetip/readwrite/ParserHelper.go      |  23 +-
 .../plc4go/bacnetip/readwrite/XmlParserHelper.go   |  27 +-
 .../model/BACnetApplicationTagBitString.go         |   2 +-
 .../readwrite/model/BACnetApplicationTagBoolean.go |   2 +-
 .../model/BACnetApplicationTagCharacterString.go   |   2 +-
 .../readwrite/model/BACnetApplicationTagDate.go    |   2 +-
 .../readwrite/model/BACnetApplicationTagDouble.go  |   2 +-
 .../model/BACnetApplicationTagEnumerated.go        |   2 +-
 .../readwrite/model/BACnetApplicationTagNull.go    |   2 +-
 .../model/BACnetApplicationTagObjectIdentifier.go  |   2 +-
 .../model/BACnetApplicationTagOctetString.go       |   2 +-
 .../readwrite/model/BACnetApplicationTagReal.go    |   2 +-
 .../model/BACnetApplicationTagSignedInteger.go     |   2 +-
 .../readwrite/model/BACnetApplicationTagTime.go    |   2 +-
 .../model/BACnetApplicationTagUnsignedInteger.go   |   2 +-
 ...firmedServiceRequestConfirmedCOVNotification.go | 392 ++++++---------------
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   | 281 +++++----------
 .../BACnetConfirmedServiceRequestWriteProperty.go  |  10 +-
 .../readwrite/model/BACnetConstructedData.go       | 224 ++++++++++++
 .../bacnetip/readwrite/model/BACnetContextTag.go   |   2 +-
 .../readwrite/model/BACnetContextTagBoolean.go     |  30 +-
 .../model/BACnetContextTagWithoutContext.go        |  52 ++-
 .../readwrite/model/BACnetPropertyValue.go         |  51 +--
 ...Enumerated.go => BACnetPropertyValueDefault.go} |  78 ++--
 .../model/BACnetPropertyValueObjectType.go         |   2 +-
 .../model/BACnetPropertyValuePresentValue.go       |   2 +-
 .../model/BACnetPropertyValuePriorityValue.go      |   2 +-
 .../model/BACnetPropertyValueRelinquishDefault.go  |   2 +-
 .../model/BACnetServiceAckReadProperty.go          |  46 +--
 .../plc4go/bacnetip/readwrite/model/BACnetTag.go   |  30 +-
 ...rmedServiceRequestUnconfirmedCOVNotification.go | 172 ++++++++-
 .../resources/protocols/bacnetip/bacnetip.mspec    |  64 ++--
 .../bacnetip/protocol/BacNetIpProtocolLogic.java   |  10 +-
 .../plc4x/java/bacnetip/RandomPackagesTest.java    |  41 ++-
 34 files changed, 868 insertions(+), 699 deletions(-)

diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go b/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
index e4c1114..a4b8ca9 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/ParserHelper.go
@@ -57,16 +57,6 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.NLMParse(io, apduLength)
-	case "EnclosedTags":
-		openingTagNumber, err := utils.StrToUint8(arguments[0])
-		if err != nil {
-			return nil, errors.Wrap(err, "Error parsing")
-		}
-		closingTagNumber, err := utils.StrToUint8(arguments[1])
-		if err != nil {
-			return nil, errors.Wrap(err, "Error parsing")
-		}
-		return model.EnclosedTagsParse(io, openingTagNumber, closingTagNumber)
 	case "BACnetConfirmedServiceRequest":
 		len, err := utils.StrToUint16(arguments[0])
 		if err != nil {
@@ -77,7 +67,18 @@ func (m BacnetipParserHelper) Parse(typeName string, arguments []string, io util
 		return model.BACnetAddressParse(io)
 	case "BACnetPropertyValue":
 		var identifier model.BACnetPropertyIdentifier
-		return model.BACnetPropertyValueParse(io, identifier)
+		actualLength, err := utils.StrToUint32(arguments[1])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		return model.BACnetPropertyValueParse(io, identifier, actualLength)
+	case "BACnetConstructedData":
+		tagNumberArgument, err := utils.StrToUint8(arguments[0])
+		if err != nil {
+			return nil, errors.Wrap(err, "Error parsing")
+		}
+		var identifier model.BACnetPropertyIdentifier
+		return model.BACnetConstructedDataParse(io, tagNumberArgument, identifier)
 	case "BACnetConfirmedServiceACK":
 		return model.BACnetConfirmedServiceACKParse(io)
 	case "BACnetUnconfirmedServiceRequest":
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go b/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
index 0a8b032..469d11b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/XmlParserHelper.go
@@ -70,18 +70,6 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		}
 		apduLength := uint16(parsedUint0)
 		return model.NLMParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), apduLength)
-	case "EnclosedTags":
-		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 4)
-		if err != nil {
-			return nil, err
-		}
-		openingTagNumber := uint8(parsedUint0)
-		parsedUint1, err := strconv.ParseUint(parserArguments[1], 10, 4)
-		if err != nil {
-			return nil, err
-		}
-		closingTagNumber := uint8(parsedUint1)
-		return model.EnclosedTagsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), openingTagNumber, closingTagNumber)
 	case "BACnetConfirmedServiceRequest":
 		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 16)
 		if err != nil {
@@ -93,7 +81,20 @@ func (m BacnetipXmlParserHelper) Parse(typeName string, xmlString string, parser
 		return model.BACnetAddressParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetPropertyValue":
 		identifier := model.BACnetPropertyIdentifierByName(parserArguments[0])
-		return model.BACnetPropertyValueParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), identifier)
+		parsedUint1, err := strconv.ParseUint(parserArguments[1], 10, 32)
+		if err != nil {
+			return nil, err
+		}
+		actualLength := uint32(parsedUint1)
+		return model.BACnetPropertyValueParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), identifier, actualLength)
+	case "BACnetConstructedData":
+		parsedUint0, err := strconv.ParseUint(parserArguments[0], 10, 4)
+		if err != nil {
+			return nil, err
+		}
+		tagNumberArgument := uint8(parsedUint0)
+		identifier := model.BACnetPropertyIdentifierByName(parserArguments[1])
+		return model.BACnetConstructedDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), tagNumberArgument, identifier)
 	case "BACnetConfirmedServiceACK":
 		return model.BACnetConfirmedServiceACKParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "BACnetUnconfirmedServiceRequest":
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBitString.go
index 105d965..cc5888b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBitString.go
@@ -47,7 +47,7 @@ func (m *BACnetApplicationTagBitString) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagBitString) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagBitString) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBoolean.go
index c516728..1564e72 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagBoolean.go
@@ -48,7 +48,7 @@ func (m *BACnetApplicationTagBoolean) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagBoolean) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagBoolean) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagCharacterString.go
index 1be6138..c6cbf3e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagCharacterString.go
@@ -48,7 +48,7 @@ func (m *BACnetApplicationTagCharacterString) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagCharacterString) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagCharacterString) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDate.go
index eb8512c..4e61a47 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDate.go
@@ -60,7 +60,7 @@ func (m *BACnetApplicationTagDate) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagDate) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagDate) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDouble.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDouble.go
index 6f83a10..0bb17a5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDouble.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagDouble.go
@@ -46,7 +46,7 @@ func (m *BACnetApplicationTagDouble) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagDouble) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagDouble) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
index 4ca12fe..b866f21 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
@@ -46,7 +46,7 @@ func (m *BACnetApplicationTagEnumerated) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagEnumerated) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagEnumerated) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagNull.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagNull.go
index 1bc2084..57ac83b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagNull.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagNull.go
@@ -44,7 +44,7 @@ func (m *BACnetApplicationTagNull) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagNull) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagNull) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagObjectIdentifier.go
index ec8bdc3..11c4924 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagObjectIdentifier.go
@@ -47,7 +47,7 @@ func (m *BACnetApplicationTagObjectIdentifier) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagObjectIdentifier) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagObjectIdentifier) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagOctetString.go
index 628dc1f..9634e12 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagOctetString.go
@@ -47,7 +47,7 @@ func (m *BACnetApplicationTagOctetString) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagOctetString) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagOctetString) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagReal.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagReal.go
index d456d27..265ff2b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagReal.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagReal.go
@@ -46,7 +46,7 @@ func (m *BACnetApplicationTagReal) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagReal) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagReal) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagSignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagSignedInteger.go
index 663ace4..7d4ea1d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagSignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagSignedInteger.go
@@ -54,7 +54,7 @@ func (m *BACnetApplicationTagSignedInteger) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagSignedInteger) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagSignedInteger) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagTime.go
index d20f1d1..c034cd8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagTime.go
@@ -54,7 +54,7 @@ func (m *BACnetApplicationTagTime) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagTime) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagTime) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagUnsignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagUnsignedInteger.go
index 51e8da8..8472f66 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagUnsignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagUnsignedInteger.go
@@ -52,7 +52,7 @@ func (m *BACnetApplicationTagUnsignedInteger) TagClass() TagClass {
 	return TagClass_APPLICATION_TAGS
 }
 
-func (m *BACnetApplicationTagUnsignedInteger) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetApplicationTagUnsignedInteger) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
index 5098c29..1628756 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
@@ -20,32 +20,20 @@
 package model
 
 import (
-	"fmt"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
 
-// Constant values.
-const BACnetConfirmedServiceRequestConfirmedCOVNotification_SUBSCRIBERPROCESSIDENTIFIERHEADER uint8 = 0x09
-const BACnetConfirmedServiceRequestConfirmedCOVNotification_MONITOREDOBJECTIDENTIFIERHEADER uint8 = 0x1C
-const BACnetConfirmedServiceRequestConfirmedCOVNotification_ISSUECONFIRMEDNOTIFICATIONSHEADER uint8 = 0x2C
-const BACnetConfirmedServiceRequestConfirmedCOVNotification_LIFETIMEHEADER uint8 = 0x07
-const BACnetConfirmedServiceRequestConfirmedCOVNotification_LISTOFVALUESOPENINGTAG uint8 = 0x4E
-const BACnetConfirmedServiceRequestConfirmedCOVNotification_LISTOFVALUESCLOSINGTAG uint8 = 0x4F
-
 // The data-structure of this message
 type BACnetConfirmedServiceRequestConfirmedCOVNotification struct {
 	*BACnetConfirmedServiceRequest
-	SubscriberProcessIdentifier               uint8
-	MonitoredObjectType                       uint16
-	MonitoredObjectInstanceNumber             uint32
-	IssueConfirmedNotificationsType           uint16
-	IssueConfirmedNotificationsInstanceNumber uint32
-	LifetimeLength                            uint8
-	LifetimeSeconds                           []int8
-	Notifications                             []*BACnetTagWithContent
+	SubscriberProcessIdentifier *BACnetContextTagUnsignedInteger
+	MonitoredObjectIdentifier   *BACnetContextTagObjectIdentifier
+	IssueConfirmed              *BACnetContextTagBoolean
+	LifetimeInSeconds           *BACnetContextTagUnsignedInteger
+	ListOfValues                *BACnetConstructedData
 }
 
 // The corresponding interface
@@ -65,17 +53,14 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) ServiceChoice()
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) InitializeParent(parent *BACnetConfirmedServiceRequest) {
 }
 
-func NewBACnetConfirmedServiceRequestConfirmedCOVNotification(subscriberProcessIdentifier uint8, monitoredObjectType uint16, monitoredObjectInstanceNumber uint32, issueConfirmedNotificationsType uint16, issueConfirmedNotificationsInstanceNumber uint32, lifetimeLength uint8, lifetimeSeconds []int8, notifications []*BACnetTagWithContent) *BACnetConfirmedServiceRequest {
+func NewBACnetConfirmedServiceRequestConfirmedCOVNotification(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, issueConfirmed *BACnetContextTagBoolean, lifetimeInSeconds *BACnetContextTagUnsignedInteger, listOfValues *BACnetConstructedData) *BACnetConfirmedServiceRequest {
 	child := &BACnetConfirmedServiceRequestConfirmedCOVNotification{
-		SubscriberProcessIdentifier:               subscriberProcessIdentifier,
-		MonitoredObjectType:                       monitoredObjectType,
-		MonitoredObjectInstanceNumber:             monitoredObjectInstanceNumber,
-		IssueConfirmedNotificationsType:           issueConfirmedNotificationsType,
-		IssueConfirmedNotificationsInstanceNumber: issueConfirmedNotificationsInstanceNumber,
-		LifetimeLength:                            lifetimeLength,
-		LifetimeSeconds:                           lifetimeSeconds,
-		Notifications:                             notifications,
-		BACnetConfirmedServiceRequest:             NewBACnetConfirmedServiceRequest(),
+		SubscriberProcessIdentifier:   subscriberProcessIdentifier,
+		MonitoredObjectIdentifier:     monitoredObjectIdentifier,
+		IssueConfirmed:                issueConfirmed,
+		LifetimeInSeconds:             lifetimeInSeconds,
+		ListOfValues:                  listOfValues,
+		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(),
 	}
 	child.Child = child
 	return child.BACnetConfirmedServiceRequest
@@ -111,54 +96,23 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) LengthInBits() u
 func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) LengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.ParentLengthInBits())
 
-	// Const Field (subscriberProcessIdentifierHeader)
-	lengthInBits += 8
-
 	// Simple field (subscriberProcessIdentifier)
-	lengthInBits += 8
-
-	// Const Field (monitoredObjectIdentifierHeader)
-	lengthInBits += 8
-
-	// Simple field (monitoredObjectType)
-	lengthInBits += 10
-
-	// Simple field (monitoredObjectInstanceNumber)
-	lengthInBits += 22
+	lengthInBits += m.SubscriberProcessIdentifier.LengthInBits()
 
-	// Const Field (issueConfirmedNotificationsHeader)
-	lengthInBits += 8
+	// Simple field (monitoredObjectIdentifier)
+	lengthInBits += m.MonitoredObjectIdentifier.LengthInBits()
 
-	// Simple field (issueConfirmedNotificationsType)
-	lengthInBits += 10
+	// Simple field (issueConfirmed)
+	lengthInBits += m.IssueConfirmed.LengthInBits()
 
-	// Simple field (issueConfirmedNotificationsInstanceNumber)
-	lengthInBits += 22
+	// Simple field (lifetimeInSeconds)
+	lengthInBits += m.LifetimeInSeconds.LengthInBits()
 
-	// Const Field (lifetimeHeader)
-	lengthInBits += 5
-
-	// Simple field (lifetimeLength)
-	lengthInBits += 3
-
-	// Array field
-	if len(m.LifetimeSeconds) > 0 {
-		lengthInBits += 8 * uint16(len(m.LifetimeSeconds))
+	// Optional Field (listOfValues)
+	if m.ListOfValues != nil {
+		lengthInBits += (*m.ListOfValues).LengthInBits()
 	}
 
-	// Const Field (listOfValuesOpeningTag)
-	lengthInBits += 8
-
-	// Array field
-	if len(m.Notifications) > 0 {
-		for _, element := range m.Notifications {
-			lengthInBits += element.LengthInBits()
-		}
-	}
-
-	// Const Field (listOfValuesClosingTag)
-	lengthInBits += 8
-
 	return lengthInBits
 }
 
@@ -171,141 +125,78 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationParse(readBuffer utils
 		return nil, pullErr
 	}
 
-	// Const Field (subscriberProcessIdentifierHeader)
-	subscriberProcessIdentifierHeader, _subscriberProcessIdentifierHeaderErr := readBuffer.ReadUint8("subscriberProcessIdentifierHeader", 8)
-	if _subscriberProcessIdentifierHeaderErr != nil {
-		return nil, errors.Wrap(_subscriberProcessIdentifierHeaderErr, "Error parsing 'subscriberProcessIdentifierHeader' field")
-	}
-	if subscriberProcessIdentifierHeader != BACnetConfirmedServiceRequestConfirmedCOVNotification_SUBSCRIBERPROCESSIDENTIFIERHEADER {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetConfirmedServiceRequestConfirmedCOVNotification_SUBSCRIBERPROCESSIDENTIFIERHEADER) + " but got " + fmt.Sprintf("%d", subscriberProcessIdentifierHeader))
-	}
-
 	// Simple Field (subscriberProcessIdentifier)
-	_subscriberProcessIdentifier, _subscriberProcessIdentifierErr := readBuffer.ReadUint8("subscriberProcessIdentifier", 8)
+	if pullErr := readBuffer.PullContext("subscriberProcessIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_subscriberProcessIdentifier, _subscriberProcessIdentifierErr := BACnetContextTagParse(readBuffer, uint8(0), BACnetDataType_UNSIGNED_INTEGER)
 	if _subscriberProcessIdentifierErr != nil {
 		return nil, errors.Wrap(_subscriberProcessIdentifierErr, "Error parsing 'subscriberProcessIdentifier' field")
 	}
-	subscriberProcessIdentifier := _subscriberProcessIdentifier
-
-	// Const Field (monitoredObjectIdentifierHeader)
-	monitoredObjectIdentifierHeader, _monitoredObjectIdentifierHeaderErr := readBuffer.ReadUint8("monitoredObjectIdentifierHeader", 8)
-	if _monitoredObjectIdentifierHeaderErr != nil {
-		return nil, errors.Wrap(_monitoredObjectIdentifierHeaderErr, "Error parsing 'monitoredObjectIdentifierHeader' field")
-	}
-	if monitoredObjectIdentifierHeader != BACnetConfirmedServiceRequestConfirmedCOVNotification_MONITOREDOBJECTIDENTIFIERHEADER {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetConfirmedServiceRequestConfirmedCOVNotification_MONITOREDOBJECTIDENTIFIERHEADER) + " but got " + fmt.Sprintf("%d", monitoredObjectIdentifierHeader))
-	}
-
-	// Simple Field (monitoredObjectType)
-	_monitoredObjectType, _monitoredObjectTypeErr := readBuffer.ReadUint16("monitoredObjectType", 10)
-	if _monitoredObjectTypeErr != nil {
-		return nil, errors.Wrap(_monitoredObjectTypeErr, "Error parsing 'monitoredObjectType' field")
-	}
-	monitoredObjectType := _monitoredObjectType
-
-	// Simple Field (monitoredObjectInstanceNumber)
-	_monitoredObjectInstanceNumber, _monitoredObjectInstanceNumberErr := readBuffer.ReadUint32("monitoredObjectInstanceNumber", 22)
-	if _monitoredObjectInstanceNumberErr != nil {
-		return nil, errors.Wrap(_monitoredObjectInstanceNumberErr, "Error parsing 'monitoredObjectInstanceNumber' field")
+	subscriberProcessIdentifier := CastBACnetContextTagUnsignedInteger(_subscriberProcessIdentifier)
+	if closeErr := readBuffer.CloseContext("subscriberProcessIdentifier"); closeErr != nil {
+		return nil, closeErr
 	}
-	monitoredObjectInstanceNumber := _monitoredObjectInstanceNumber
 
-	// Const Field (issueConfirmedNotificationsHeader)
-	issueConfirmedNotificationsHeader, _issueConfirmedNotificationsHeaderErr := readBuffer.ReadUint8("issueConfirmedNotificationsHeader", 8)
-	if _issueConfirmedNotificationsHeaderErr != nil {
-		return nil, errors.Wrap(_issueConfirmedNotificationsHeaderErr, "Error parsing 'issueConfirmedNotificationsHeader' field")
-	}
-	if issueConfirmedNotificationsHeader != BACnetConfirmedServiceRequestConfirmedCOVNotification_ISSUECONFIRMEDNOTIFICATIONSHEADER {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetConfirmedServiceRequestConfirmedCOVNotification_ISSUECONFIRMEDNOTIFICATIONSHEADER) + " but got " + fmt.Sprintf("%d", issueConfirmedNotificationsHeader))
+	// Simple Field (monitoredObjectIdentifier)
+	if pullErr := readBuffer.PullContext("monitoredObjectIdentifier"); pullErr != nil {
+		return nil, pullErr
 	}
-
-	// Simple Field (issueConfirmedNotificationsType)
-	_issueConfirmedNotificationsType, _issueConfirmedNotificationsTypeErr := readBuffer.ReadUint16("issueConfirmedNotificationsType", 10)
-	if _issueConfirmedNotificationsTypeErr != nil {
-		return nil, errors.Wrap(_issueConfirmedNotificationsTypeErr, "Error parsing 'issueConfirmedNotificationsType' field")
+	_monitoredObjectIdentifier, _monitoredObjectIdentifierErr := BACnetContextTagParse(readBuffer, uint8(1), BACnetDataType_BACNET_OBJECT_IDENTIFIER)
+	if _monitoredObjectIdentifierErr != nil {
+		return nil, errors.Wrap(_monitoredObjectIdentifierErr, "Error parsing 'monitoredObjectIdentifier' field")
 	}
-	issueConfirmedNotificationsType := _issueConfirmedNotificationsType
-
-	// Simple Field (issueConfirmedNotificationsInstanceNumber)
-	_issueConfirmedNotificationsInstanceNumber, _issueConfirmedNotificationsInstanceNumberErr := readBuffer.ReadUint32("issueConfirmedNotificationsInstanceNumber", 22)
-	if _issueConfirmedNotificationsInstanceNumberErr != nil {
-		return nil, errors.Wrap(_issueConfirmedNotificationsInstanceNumberErr, "Error parsing 'issueConfirmedNotificationsInstanceNumber' field")
+	monitoredObjectIdentifier := CastBACnetContextTagObjectIdentifier(_monitoredObjectIdentifier)
+	if closeErr := readBuffer.CloseContext("monitoredObjectIdentifier"); closeErr != nil {
+		return nil, closeErr
 	}
-	issueConfirmedNotificationsInstanceNumber := _issueConfirmedNotificationsInstanceNumber
 
-	// Const Field (lifetimeHeader)
-	lifetimeHeader, _lifetimeHeaderErr := readBuffer.ReadUint8("lifetimeHeader", 5)
-	if _lifetimeHeaderErr != nil {
-		return nil, errors.Wrap(_lifetimeHeaderErr, "Error parsing 'lifetimeHeader' field")
+	// Simple Field (issueConfirmed)
+	if pullErr := readBuffer.PullContext("issueConfirmed"); pullErr != nil {
+		return nil, pullErr
 	}
-	if lifetimeHeader != BACnetConfirmedServiceRequestConfirmedCOVNotification_LIFETIMEHEADER {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetConfirmedServiceRequestConfirmedCOVNotification_LIFETIMEHEADER) + " but got " + fmt.Sprintf("%d", lifetimeHeader))
+	_issueConfirmed, _issueConfirmedErr := BACnetContextTagParse(readBuffer, uint8(2), BACnetDataType_BOOLEAN)
+	if _issueConfirmedErr != nil {
+		return nil, errors.Wrap(_issueConfirmedErr, "Error parsing 'issueConfirmed' field")
 	}
-
-	// Simple Field (lifetimeLength)
-	_lifetimeLength, _lifetimeLengthErr := readBuffer.ReadUint8("lifetimeLength", 3)
-	if _lifetimeLengthErr != nil {
-		return nil, errors.Wrap(_lifetimeLengthErr, "Error parsing 'lifetimeLength' field")
+	issueConfirmed := CastBACnetContextTagBoolean(_issueConfirmed)
+	if closeErr := readBuffer.CloseContext("issueConfirmed"); closeErr != nil {
+		return nil, closeErr
 	}
-	lifetimeLength := _lifetimeLength
 
-	// Array field (lifetimeSeconds)
-	if pullErr := readBuffer.PullContext("lifetimeSeconds", utils.WithRenderAsList(true)); pullErr != nil {
+	// Simple Field (lifetimeInSeconds)
+	if pullErr := readBuffer.PullContext("lifetimeInSeconds"); pullErr != nil {
 		return nil, pullErr
 	}
-	// Count array
-	lifetimeSeconds := make([]int8, lifetimeLength)
-	{
-		for curItem := uint16(0); curItem < uint16(lifetimeLength); curItem++ {
-			_item, _err := readBuffer.ReadInt8("", 8)
-			if _err != nil {
-				return nil, errors.Wrap(_err, "Error parsing 'lifetimeSeconds' field")
-			}
-			lifetimeSeconds[curItem] = _item
-		}
+	_lifetimeInSeconds, _lifetimeInSecondsErr := BACnetContextTagParse(readBuffer, uint8(3), BACnetDataType_UNSIGNED_INTEGER)
+	if _lifetimeInSecondsErr != nil {
+		return nil, errors.Wrap(_lifetimeInSecondsErr, "Error parsing 'lifetimeInSeconds' field")
 	}
-	if closeErr := readBuffer.CloseContext("lifetimeSeconds", utils.WithRenderAsList(true)); closeErr != nil {
+	lifetimeInSeconds := CastBACnetContextTagUnsignedInteger(_lifetimeInSeconds)
+	if closeErr := readBuffer.CloseContext("lifetimeInSeconds"); closeErr != nil {
 		return nil, closeErr
 	}
 
-	// Const Field (listOfValuesOpeningTag)
-	listOfValuesOpeningTag, _listOfValuesOpeningTagErr := readBuffer.ReadUint8("listOfValuesOpeningTag", 8)
-	if _listOfValuesOpeningTagErr != nil {
-		return nil, errors.Wrap(_listOfValuesOpeningTagErr, "Error parsing 'listOfValuesOpeningTag' field")
-	}
-	if listOfValuesOpeningTag != BACnetConfirmedServiceRequestConfirmedCOVNotification_LISTOFVALUESOPENINGTAG {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetConfirmedServiceRequestConfirmedCOVNotification_LISTOFVALUESOPENINGTAG) + " but got " + fmt.Sprintf("%d", listOfValuesOpeningTag))
-	}
-
-	// Array field (notifications)
-	if pullErr := readBuffer.PullContext("notifications", utils.WithRenderAsList(true)); pullErr != nil {
-		return nil, pullErr
-	}
-	// Length array
-	notifications := make([]*BACnetTagWithContent, 0)
+	// Optional Field (listOfValues) (Can be skipped, if a given expression evaluates to false)
+	var listOfValues *BACnetConstructedData = nil
 	{
-		_notificationsLength := uint16(len) - uint16(uint16(18))
-		_notificationsEndPos := readBuffer.GetPos() + uint16(_notificationsLength)
-		for readBuffer.GetPos() < _notificationsEndPos {
-			_item, _err := BACnetTagWithContentParse(readBuffer)
-			if _err != nil {
-				return nil, errors.Wrap(_err, "Error parsing 'notifications' field")
+		currentPos := readBuffer.GetPos()
+		if pullErr := readBuffer.PullContext("listOfValues"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetConstructedDataParse(readBuffer, uint8(4), BACnetPropertyIdentifier_ALL)
+		switch {
+		case _err != nil && _err != utils.ParseAssertError:
+			return nil, errors.Wrap(_err, "Error parsing 'listOfValues' field")
+		case _err == utils.ParseAssertError:
+			readBuffer.SetPos(currentPos)
+		default:
+			listOfValues = CastBACnetConstructedData(_val)
+			if closeErr := readBuffer.CloseContext("listOfValues"); closeErr != nil {
+				return nil, closeErr
 			}
-			notifications = append(notifications, _item)
 		}
 	}
-	if closeErr := readBuffer.CloseContext("notifications", utils.WithRenderAsList(true)); closeErr != nil {
-		return nil, closeErr
-	}
-
-	// Const Field (listOfValuesClosingTag)
-	listOfValuesClosingTag, _listOfValuesClosingTagErr := readBuffer.ReadUint8("listOfValuesClosingTag", 8)
-	if _listOfValuesClosingTagErr != nil {
-		return nil, errors.Wrap(_listOfValuesClosingTagErr, "Error parsing 'listOfValuesClosingTag' field")
-	}
-	if listOfValuesClosingTag != BACnetConfirmedServiceRequestConfirmedCOVNotification_LISTOFVALUESCLOSINGTAG {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetConfirmedServiceRequestConfirmedCOVNotification_LISTOFVALUESCLOSINGTAG) + " but got " + fmt.Sprintf("%d", listOfValuesClosingTag))
-	}
 
 	if closeErr := readBuffer.CloseContext("BACnetConfirmedServiceRequestConfirmedCOVNotification"); closeErr != nil {
 		return nil, closeErr
@@ -313,15 +204,12 @@ func BACnetConfirmedServiceRequestConfirmedCOVNotificationParse(readBuffer utils
 
 	// Create a partially initialized instance
 	_child := &BACnetConfirmedServiceRequestConfirmedCOVNotification{
-		SubscriberProcessIdentifier:               subscriberProcessIdentifier,
-		MonitoredObjectType:                       monitoredObjectType,
-		MonitoredObjectInstanceNumber:             monitoredObjectInstanceNumber,
-		IssueConfirmedNotificationsType:           issueConfirmedNotificationsType,
-		IssueConfirmedNotificationsInstanceNumber: issueConfirmedNotificationsInstanceNumber,
-		LifetimeLength:                            lifetimeLength,
-		LifetimeSeconds:                           lifetimeSeconds,
-		Notifications:                             notifications,
-		BACnetConfirmedServiceRequest:             &BACnetConfirmedServiceRequest{},
+		SubscriberProcessIdentifier:   CastBACnetContextTagUnsignedInteger(subscriberProcessIdentifier),
+		MonitoredObjectIdentifier:     CastBACnetContextTagObjectIdentifier(monitoredObjectIdentifier),
+		IssueConfirmed:                CastBACnetContextTagBoolean(issueConfirmed),
+		LifetimeInSeconds:             CastBACnetContextTagUnsignedInteger(lifetimeInSeconds),
+		ListOfValues:                  CastBACnetConstructedData(listOfValues),
+		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
 	return _child.BACnetConfirmedServiceRequest, nil
@@ -333,114 +221,68 @@ func (m *BACnetConfirmedServiceRequestConfirmedCOVNotification) Serialize(writeB
 			return pushErr
 		}
 
-		// Const Field (subscriberProcessIdentifierHeader)
-		_subscriberProcessIdentifierHeaderErr := writeBuffer.WriteUint8("subscriberProcessIdentifierHeader", 8, 0x09)
-		if _subscriberProcessIdentifierHeaderErr != nil {
-			return errors.Wrap(_subscriberProcessIdentifierHeaderErr, "Error serializing 'subscriberProcessIdentifierHeader' field")
-		}
-
 		// Simple Field (subscriberProcessIdentifier)
-		subscriberProcessIdentifier := uint8(m.SubscriberProcessIdentifier)
-		_subscriberProcessIdentifierErr := writeBuffer.WriteUint8("subscriberProcessIdentifier", 8, (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")
 		}
 
-		// Const Field (monitoredObjectIdentifierHeader)
-		_monitoredObjectIdentifierHeaderErr := writeBuffer.WriteUint8("monitoredObjectIdentifierHeader", 8, 0x1C)
-		if _monitoredObjectIdentifierHeaderErr != nil {
-			return errors.Wrap(_monitoredObjectIdentifierHeaderErr, "Error serializing 'monitoredObjectIdentifierHeader' field")
+		// Simple Field (monitoredObjectIdentifier)
+		if pushErr := writeBuffer.PushContext("monitoredObjectIdentifier"); pushErr != nil {
+			return pushErr
 		}
-
-		// Simple Field (monitoredObjectType)
-		monitoredObjectType := uint16(m.MonitoredObjectType)
-		_monitoredObjectTypeErr := writeBuffer.WriteUint16("monitoredObjectType", 10, (monitoredObjectType))
-		if _monitoredObjectTypeErr != nil {
-			return errors.Wrap(_monitoredObjectTypeErr, "Error serializing 'monitoredObjectType' field")
+		_monitoredObjectIdentifierErr := m.MonitoredObjectIdentifier.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("monitoredObjectIdentifier"); popErr != nil {
+			return popErr
 		}
-
-		// Simple Field (monitoredObjectInstanceNumber)
-		monitoredObjectInstanceNumber := uint32(m.MonitoredObjectInstanceNumber)
-		_monitoredObjectInstanceNumberErr := writeBuffer.WriteUint32("monitoredObjectInstanceNumber", 22, (monitoredObjectInstanceNumber))
-		if _monitoredObjectInstanceNumberErr != nil {
-			return errors.Wrap(_monitoredObjectInstanceNumberErr, "Error serializing 'monitoredObjectInstanceNumber' field")
+		if _monitoredObjectIdentifierErr != nil {
+			return errors.Wrap(_monitoredObjectIdentifierErr, "Error serializing 'monitoredObjectIdentifier' field")
 		}
 
-		// Const Field (issueConfirmedNotificationsHeader)
-		_issueConfirmedNotificationsHeaderErr := writeBuffer.WriteUint8("issueConfirmedNotificationsHeader", 8, 0x2C)
-		if _issueConfirmedNotificationsHeaderErr != nil {
-			return errors.Wrap(_issueConfirmedNotificationsHeaderErr, "Error serializing 'issueConfirmedNotificationsHeader' field")
-		}
-
-		// Simple Field (issueConfirmedNotificationsType)
-		issueConfirmedNotificationsType := uint16(m.IssueConfirmedNotificationsType)
-		_issueConfirmedNotificationsTypeErr := writeBuffer.WriteUint16("issueConfirmedNotificationsType", 10, (issueConfirmedNotificationsType))
-		if _issueConfirmedNotificationsTypeErr != nil {
-			return errors.Wrap(_issueConfirmedNotificationsTypeErr, "Error serializing 'issueConfirmedNotificationsType' field")
+		// Simple Field (issueConfirmed)
+		if pushErr := writeBuffer.PushContext("issueConfirmed"); pushErr != nil {
+			return pushErr
 		}
-
-		// Simple Field (issueConfirmedNotificationsInstanceNumber)
-		issueConfirmedNotificationsInstanceNumber := uint32(m.IssueConfirmedNotificationsInstanceNumber)
-		_issueConfirmedNotificationsInstanceNumberErr := writeBuffer.WriteUint32("issueConfirmedNotificationsInstanceNumber", 22, (issueConfirmedNotificationsInstanceNumber))
-		if _issueConfirmedNotificationsInstanceNumberErr != nil {
-			return errors.Wrap(_issueConfirmedNotificationsInstanceNumberErr, "Error serializing 'issueConfirmedNotificationsInstanceNumber' field")
+		_issueConfirmedErr := m.IssueConfirmed.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("issueConfirmed"); popErr != nil {
+			return popErr
 		}
-
-		// Const Field (lifetimeHeader)
-		_lifetimeHeaderErr := writeBuffer.WriteUint8("lifetimeHeader", 5, 0x07)
-		if _lifetimeHeaderErr != nil {
-			return errors.Wrap(_lifetimeHeaderErr, "Error serializing 'lifetimeHeader' field")
+		if _issueConfirmedErr != nil {
+			return errors.Wrap(_issueConfirmedErr, "Error serializing 'issueConfirmed' field")
 		}
 
-		// Simple Field (lifetimeLength)
-		lifetimeLength := uint8(m.LifetimeLength)
-		_lifetimeLengthErr := writeBuffer.WriteUint8("lifetimeLength", 3, (lifetimeLength))
-		if _lifetimeLengthErr != nil {
-			return errors.Wrap(_lifetimeLengthErr, "Error serializing 'lifetimeLength' field")
+		// Simple Field (lifetimeInSeconds)
+		if pushErr := writeBuffer.PushContext("lifetimeInSeconds"); pushErr != nil {
+			return pushErr
 		}
-
-		// Array Field (lifetimeSeconds)
-		if m.LifetimeSeconds != nil {
-			if pushErr := writeBuffer.PushContext("lifetimeSeconds", utils.WithRenderAsList(true)); pushErr != nil {
-				return pushErr
-			}
-			for _, _element := range m.LifetimeSeconds {
-				_elementErr := writeBuffer.WriteInt8("", 8, _element)
-				if _elementErr != nil {
-					return errors.Wrap(_elementErr, "Error serializing 'lifetimeSeconds' field")
-				}
-			}
-			if popErr := writeBuffer.PopContext("lifetimeSeconds", utils.WithRenderAsList(true)); popErr != nil {
-				return popErr
-			}
+		_lifetimeInSecondsErr := m.LifetimeInSeconds.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("lifetimeInSeconds"); popErr != nil {
+			return popErr
 		}
-
-		// Const Field (listOfValuesOpeningTag)
-		_listOfValuesOpeningTagErr := writeBuffer.WriteUint8("listOfValuesOpeningTag", 8, 0x4E)
-		if _listOfValuesOpeningTagErr != nil {
-			return errors.Wrap(_listOfValuesOpeningTagErr, "Error serializing 'listOfValuesOpeningTag' field")
+		if _lifetimeInSecondsErr != nil {
+			return errors.Wrap(_lifetimeInSecondsErr, "Error serializing 'lifetimeInSeconds' field")
 		}
 
-		// Array Field (notifications)
-		if m.Notifications != nil {
-			if pushErr := writeBuffer.PushContext("notifications", utils.WithRenderAsList(true)); pushErr != nil {
+		// Optional Field (listOfValues) (Can be skipped, if the value is null)
+		var listOfValues *BACnetConstructedData = nil
+		if m.ListOfValues != nil {
+			if pushErr := writeBuffer.PushContext("listOfValues"); pushErr != nil {
 				return pushErr
 			}
-			for _, _element := range m.Notifications {
-				_elementErr := _element.Serialize(writeBuffer)
-				if _elementErr != nil {
-					return errors.Wrap(_elementErr, "Error serializing 'notifications' field")
-				}
-			}
-			if popErr := writeBuffer.PopContext("notifications", utils.WithRenderAsList(true)); popErr != nil {
+			listOfValues = m.ListOfValues
+			_listOfValuesErr := listOfValues.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("listOfValues"); popErr != nil {
 				return popErr
 			}
-		}
-
-		// Const Field (listOfValuesClosingTag)
-		_listOfValuesClosingTagErr := writeBuffer.WriteUint8("listOfValuesClosingTag", 8, 0x4F)
-		if _listOfValuesClosingTagErr != nil {
-			return errors.Wrap(_listOfValuesClosingTagErr, "Error serializing 'listOfValuesClosingTag' field")
+			if _listOfValuesErr != nil {
+				return errors.Wrap(_listOfValuesErr, "Error serializing 'listOfValues' field")
+			}
 		}
 
 		if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestConfirmedCOVNotification"); popErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
index bd36633..4caeb0a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
@@ -20,29 +20,19 @@
 package model
 
 import (
-	"fmt"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
 
-// Constant values.
-const BACnetConfirmedServiceRequestSubscribeCOV_SUBSCRIBERPROCESSIDENTIFIERHEADER uint8 = 0x09
-const BACnetConfirmedServiceRequestSubscribeCOV_MONITOREDOBJECTIDENTIFIERHEADER uint8 = 0x1C
-const BACnetConfirmedServiceRequestSubscribeCOV_ISSUECONFIRMEDNOTIFICATIONSHEADER uint8 = 0x29
-const BACnetConfirmedServiceRequestSubscribeCOV_ISSUECONFIRMEDNOTIFICATIONSSKIPBITS uint8 = 0x00
-const BACnetConfirmedServiceRequestSubscribeCOV_LIFETIMEHEADER uint8 = 0x07
-
 // The data-structure of this message
 type BACnetConfirmedServiceRequestSubscribeCOV struct {
 	*BACnetConfirmedServiceRequest
-	SubscriberProcessIdentifier   uint8
-	MonitoredObjectType           uint16
-	MonitoredObjectInstanceNumber uint32
-	IssueConfirmedNotifications   bool
-	LifetimeLength                uint8
-	LifetimeSeconds               []int8
+	SubscriberProcessIdentifier *BACnetContextTagUnsignedInteger
+	MonitoredObjectIdentifier   *BACnetContextTagObjectIdentifier
+	IssueConfirmed              *BACnetContextTagBoolean
+	LifetimeInSeconds           *BACnetContextTagUnsignedInteger
 }
 
 // The corresponding interface
@@ -62,14 +52,12 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOV) ServiceChoice() uint8 {
 func (m *BACnetConfirmedServiceRequestSubscribeCOV) InitializeParent(parent *BACnetConfirmedServiceRequest) {
 }
 
-func NewBACnetConfirmedServiceRequestSubscribeCOV(subscriberProcessIdentifier uint8, monitoredObjectType uint16, monitoredObjectInstanceNumber uint32, issueConfirmedNotifications bool, lifetimeLength uint8, lifetimeSeconds []int8) *BACnetConfirmedServiceRequest {
+func NewBACnetConfirmedServiceRequestSubscribeCOV(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, issueConfirmed *BACnetContextTagBoolean, lifetimeInSeconds *BACnetContextTagUnsignedInteger) *BACnetConfirmedServiceRequest {
 	child := &BACnetConfirmedServiceRequestSubscribeCOV{
 		SubscriberProcessIdentifier:   subscriberProcessIdentifier,
-		MonitoredObjectType:           monitoredObjectType,
-		MonitoredObjectInstanceNumber: monitoredObjectInstanceNumber,
-		IssueConfirmedNotifications:   issueConfirmedNotifications,
-		LifetimeLength:                lifetimeLength,
-		LifetimeSeconds:               lifetimeSeconds,
+		MonitoredObjectIdentifier:     monitoredObjectIdentifier,
+		IssueConfirmed:                issueConfirmed,
+		LifetimeInSeconds:             lifetimeInSeconds,
 		BACnetConfirmedServiceRequest: NewBACnetConfirmedServiceRequest(),
 	}
 	child.Child = child
@@ -106,40 +94,17 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOV) LengthInBits() uint16 {
 func (m *BACnetConfirmedServiceRequestSubscribeCOV) LengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.ParentLengthInBits())
 
-	// Const Field (subscriberProcessIdentifierHeader)
-	lengthInBits += 8
-
 	// Simple field (subscriberProcessIdentifier)
-	lengthInBits += 8
-
-	// Const Field (monitoredObjectIdentifierHeader)
-	lengthInBits += 8
-
-	// Simple field (monitoredObjectType)
-	lengthInBits += 10
-
-	// Simple field (monitoredObjectInstanceNumber)
-	lengthInBits += 22
-
-	// Const Field (issueConfirmedNotificationsHeader)
-	lengthInBits += 8
-
-	// Const Field (issueConfirmedNotificationsSkipBits)
-	lengthInBits += 7
+	lengthInBits += m.SubscriberProcessIdentifier.LengthInBits()
 
-	// Simple field (issueConfirmedNotifications)
-	lengthInBits += 1
+	// Simple field (monitoredObjectIdentifier)
+	lengthInBits += m.MonitoredObjectIdentifier.LengthInBits()
 
-	// Const Field (lifetimeHeader)
-	lengthInBits += 5
+	// Simple field (issueConfirmed)
+	lengthInBits += m.IssueConfirmed.LengthInBits()
 
-	// Simple field (lifetimeLength)
-	lengthInBits += 3
-
-	// Array field
-	if len(m.LifetimeSeconds) > 0 {
-		lengthInBits += 8 * uint16(len(m.LifetimeSeconds))
-	}
+	// Simple field (lifetimeInSeconds)
+	lengthInBits += m.LifetimeInSeconds.LengthInBits()
 
 	return lengthInBits
 }
@@ -153,102 +118,55 @@ func BACnetConfirmedServiceRequestSubscribeCOVParse(readBuffer utils.ReadBuffer,
 		return nil, pullErr
 	}
 
-	// Const Field (subscriberProcessIdentifierHeader)
-	subscriberProcessIdentifierHeader, _subscriberProcessIdentifierHeaderErr := readBuffer.ReadUint8("subscriberProcessIdentifierHeader", 8)
-	if _subscriberProcessIdentifierHeaderErr != nil {
-		return nil, errors.Wrap(_subscriberProcessIdentifierHeaderErr, "Error parsing 'subscriberProcessIdentifierHeader' field")
-	}
-	if subscriberProcessIdentifierHeader != BACnetConfirmedServiceRequestSubscribeCOV_SUBSCRIBERPROCESSIDENTIFIERHEADER {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetConfirmedServiceRequestSubscribeCOV_SUBSCRIBERPROCESSIDENTIFIERHEADER) + " but got " + fmt.Sprintf("%d", subscriberProcessIdentifierHeader))
-	}
-
 	// Simple Field (subscriberProcessIdentifier)
-	_subscriberProcessIdentifier, _subscriberProcessIdentifierErr := readBuffer.ReadUint8("subscriberProcessIdentifier", 8)
+	if pullErr := readBuffer.PullContext("subscriberProcessIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_subscriberProcessIdentifier, _subscriberProcessIdentifierErr := BACnetContextTagParse(readBuffer, uint8(0), BACnetDataType_UNSIGNED_INTEGER)
 	if _subscriberProcessIdentifierErr != nil {
 		return nil, errors.Wrap(_subscriberProcessIdentifierErr, "Error parsing 'subscriberProcessIdentifier' field")
 	}
-	subscriberProcessIdentifier := _subscriberProcessIdentifier
-
-	// Const Field (monitoredObjectIdentifierHeader)
-	monitoredObjectIdentifierHeader, _monitoredObjectIdentifierHeaderErr := readBuffer.ReadUint8("monitoredObjectIdentifierHeader", 8)
-	if _monitoredObjectIdentifierHeaderErr != nil {
-		return nil, errors.Wrap(_monitoredObjectIdentifierHeaderErr, "Error parsing 'monitoredObjectIdentifierHeader' field")
-	}
-	if monitoredObjectIdentifierHeader != BACnetConfirmedServiceRequestSubscribeCOV_MONITOREDOBJECTIDENTIFIERHEADER {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetConfirmedServiceRequestSubscribeCOV_MONITOREDOBJECTIDENTIFIERHEADER) + " but got " + fmt.Sprintf("%d", monitoredObjectIdentifierHeader))
-	}
-
-	// Simple Field (monitoredObjectType)
-	_monitoredObjectType, _monitoredObjectTypeErr := readBuffer.ReadUint16("monitoredObjectType", 10)
-	if _monitoredObjectTypeErr != nil {
-		return nil, errors.Wrap(_monitoredObjectTypeErr, "Error parsing 'monitoredObjectType' field")
-	}
-	monitoredObjectType := _monitoredObjectType
-
-	// Simple Field (monitoredObjectInstanceNumber)
-	_monitoredObjectInstanceNumber, _monitoredObjectInstanceNumberErr := readBuffer.ReadUint32("monitoredObjectInstanceNumber", 22)
-	if _monitoredObjectInstanceNumberErr != nil {
-		return nil, errors.Wrap(_monitoredObjectInstanceNumberErr, "Error parsing 'monitoredObjectInstanceNumber' field")
-	}
-	monitoredObjectInstanceNumber := _monitoredObjectInstanceNumber
-
-	// Const Field (issueConfirmedNotificationsHeader)
-	issueConfirmedNotificationsHeader, _issueConfirmedNotificationsHeaderErr := readBuffer.ReadUint8("issueConfirmedNotificationsHeader", 8)
-	if _issueConfirmedNotificationsHeaderErr != nil {
-		return nil, errors.Wrap(_issueConfirmedNotificationsHeaderErr, "Error parsing 'issueConfirmedNotificationsHeader' field")
-	}
-	if issueConfirmedNotificationsHeader != BACnetConfirmedServiceRequestSubscribeCOV_ISSUECONFIRMEDNOTIFICATIONSHEADER {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetConfirmedServiceRequestSubscribeCOV_ISSUECONFIRMEDNOTIFICATIONSHEADER) + " but got " + fmt.Sprintf("%d", issueConfirmedNotificationsHeader))
+	subscriberProcessIdentifier := CastBACnetContextTagUnsignedInteger(_subscriberProcessIdentifier)
+	if closeErr := readBuffer.CloseContext("subscriberProcessIdentifier"); closeErr != nil {
+		return nil, closeErr
 	}
 
-	// Const Field (issueConfirmedNotificationsSkipBits)
-	issueConfirmedNotificationsSkipBits, _issueConfirmedNotificationsSkipBitsErr := readBuffer.ReadUint8("issueConfirmedNotificationsSkipBits", 7)
-	if _issueConfirmedNotificationsSkipBitsErr != nil {
-		return nil, errors.Wrap(_issueConfirmedNotificationsSkipBitsErr, "Error parsing 'issueConfirmedNotificationsSkipBits' field")
+	// Simple Field (monitoredObjectIdentifier)
+	if pullErr := readBuffer.PullContext("monitoredObjectIdentifier"); pullErr != nil {
+		return nil, pullErr
 	}
-	if issueConfirmedNotificationsSkipBits != BACnetConfirmedServiceRequestSubscribeCOV_ISSUECONFIRMEDNOTIFICATIONSSKIPBITS {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetConfirmedServiceRequestSubscribeCOV_ISSUECONFIRMEDNOTIFICATIONSSKIPBITS) + " but got " + fmt.Sprintf("%d", issueConfirmedNotificationsSkipBits))
+	_monitoredObjectIdentifier, _monitoredObjectIdentifierErr := BACnetContextTagParse(readBuffer, uint8(1), BACnetDataType_BACNET_OBJECT_IDENTIFIER)
+	if _monitoredObjectIdentifierErr != nil {
+		return nil, errors.Wrap(_monitoredObjectIdentifierErr, "Error parsing 'monitoredObjectIdentifier' field")
 	}
-
-	// Simple Field (issueConfirmedNotifications)
-	_issueConfirmedNotifications, _issueConfirmedNotificationsErr := readBuffer.ReadBit("issueConfirmedNotifications")
-	if _issueConfirmedNotificationsErr != nil {
-		return nil, errors.Wrap(_issueConfirmedNotificationsErr, "Error parsing 'issueConfirmedNotifications' field")
+	monitoredObjectIdentifier := CastBACnetContextTagObjectIdentifier(_monitoredObjectIdentifier)
+	if closeErr := readBuffer.CloseContext("monitoredObjectIdentifier"); closeErr != nil {
+		return nil, closeErr
 	}
-	issueConfirmedNotifications := _issueConfirmedNotifications
 
-	// Const Field (lifetimeHeader)
-	lifetimeHeader, _lifetimeHeaderErr := readBuffer.ReadUint8("lifetimeHeader", 5)
-	if _lifetimeHeaderErr != nil {
-		return nil, errors.Wrap(_lifetimeHeaderErr, "Error parsing 'lifetimeHeader' field")
+	// Simple Field (issueConfirmed)
+	if pullErr := readBuffer.PullContext("issueConfirmed"); pullErr != nil {
+		return nil, pullErr
 	}
-	if lifetimeHeader != BACnetConfirmedServiceRequestSubscribeCOV_LIFETIMEHEADER {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetConfirmedServiceRequestSubscribeCOV_LIFETIMEHEADER) + " but got " + fmt.Sprintf("%d", lifetimeHeader))
+	_issueConfirmed, _issueConfirmedErr := BACnetContextTagParse(readBuffer, uint8(2), BACnetDataType_BOOLEAN)
+	if _issueConfirmedErr != nil {
+		return nil, errors.Wrap(_issueConfirmedErr, "Error parsing 'issueConfirmed' field")
 	}
-
-	// Simple Field (lifetimeLength)
-	_lifetimeLength, _lifetimeLengthErr := readBuffer.ReadUint8("lifetimeLength", 3)
-	if _lifetimeLengthErr != nil {
-		return nil, errors.Wrap(_lifetimeLengthErr, "Error parsing 'lifetimeLength' field")
+	issueConfirmed := CastBACnetContextTagBoolean(_issueConfirmed)
+	if closeErr := readBuffer.CloseContext("issueConfirmed"); closeErr != nil {
+		return nil, closeErr
 	}
-	lifetimeLength := _lifetimeLength
 
-	// Array field (lifetimeSeconds)
-	if pullErr := readBuffer.PullContext("lifetimeSeconds", utils.WithRenderAsList(true)); pullErr != nil {
+	// Simple Field (lifetimeInSeconds)
+	if pullErr := readBuffer.PullContext("lifetimeInSeconds"); pullErr != nil {
 		return nil, pullErr
 	}
-	// Count array
-	lifetimeSeconds := make([]int8, lifetimeLength)
-	{
-		for curItem := uint16(0); curItem < uint16(lifetimeLength); curItem++ {
-			_item, _err := readBuffer.ReadInt8("", 8)
-			if _err != nil {
-				return nil, errors.Wrap(_err, "Error parsing 'lifetimeSeconds' field")
-			}
-			lifetimeSeconds[curItem] = _item
-		}
+	_lifetimeInSeconds, _lifetimeInSecondsErr := BACnetContextTagParse(readBuffer, uint8(3), BACnetDataType_UNSIGNED_INTEGER)
+	if _lifetimeInSecondsErr != nil {
+		return nil, errors.Wrap(_lifetimeInSecondsErr, "Error parsing 'lifetimeInSeconds' field")
 	}
-	if closeErr := readBuffer.CloseContext("lifetimeSeconds", utils.WithRenderAsList(true)); closeErr != nil {
+	lifetimeInSeconds := CastBACnetContextTagUnsignedInteger(_lifetimeInSeconds)
+	if closeErr := readBuffer.CloseContext("lifetimeInSeconds"); closeErr != nil {
 		return nil, closeErr
 	}
 
@@ -258,12 +176,10 @@ func BACnetConfirmedServiceRequestSubscribeCOVParse(readBuffer utils.ReadBuffer,
 
 	// Create a partially initialized instance
 	_child := &BACnetConfirmedServiceRequestSubscribeCOV{
-		SubscriberProcessIdentifier:   subscriberProcessIdentifier,
-		MonitoredObjectType:           monitoredObjectType,
-		MonitoredObjectInstanceNumber: monitoredObjectInstanceNumber,
-		IssueConfirmedNotifications:   issueConfirmedNotifications,
-		LifetimeLength:                lifetimeLength,
-		LifetimeSeconds:               lifetimeSeconds,
+		SubscriberProcessIdentifier:   CastBACnetContextTagUnsignedInteger(subscriberProcessIdentifier),
+		MonitoredObjectIdentifier:     CastBACnetContextTagObjectIdentifier(monitoredObjectIdentifier),
+		IssueConfirmed:                CastBACnetContextTagBoolean(issueConfirmed),
+		LifetimeInSeconds:             CastBACnetContextTagUnsignedInteger(lifetimeInSeconds),
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
 	_child.BACnetConfirmedServiceRequest.Child = _child
@@ -276,85 +192,52 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOV) Serialize(writeBuffer utils.
 			return pushErr
 		}
 
-		// Const Field (subscriberProcessIdentifierHeader)
-		_subscriberProcessIdentifierHeaderErr := writeBuffer.WriteUint8("subscriberProcessIdentifierHeader", 8, 0x09)
-		if _subscriberProcessIdentifierHeaderErr != nil {
-			return errors.Wrap(_subscriberProcessIdentifierHeaderErr, "Error serializing 'subscriberProcessIdentifierHeader' field")
-		}
-
 		// Simple Field (subscriberProcessIdentifier)
-		subscriberProcessIdentifier := uint8(m.SubscriberProcessIdentifier)
-		_subscriberProcessIdentifierErr := writeBuffer.WriteUint8("subscriberProcessIdentifier", 8, (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")
 		}
 
-		// Const Field (monitoredObjectIdentifierHeader)
-		_monitoredObjectIdentifierHeaderErr := writeBuffer.WriteUint8("monitoredObjectIdentifierHeader", 8, 0x1C)
-		if _monitoredObjectIdentifierHeaderErr != nil {
-			return errors.Wrap(_monitoredObjectIdentifierHeaderErr, "Error serializing 'monitoredObjectIdentifierHeader' field")
+		// Simple Field (monitoredObjectIdentifier)
+		if pushErr := writeBuffer.PushContext("monitoredObjectIdentifier"); pushErr != nil {
+			return pushErr
 		}
-
-		// Simple Field (monitoredObjectType)
-		monitoredObjectType := uint16(m.MonitoredObjectType)
-		_monitoredObjectTypeErr := writeBuffer.WriteUint16("monitoredObjectType", 10, (monitoredObjectType))
-		if _monitoredObjectTypeErr != nil {
-			return errors.Wrap(_monitoredObjectTypeErr, "Error serializing 'monitoredObjectType' field")
+		_monitoredObjectIdentifierErr := m.MonitoredObjectIdentifier.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("monitoredObjectIdentifier"); popErr != nil {
+			return popErr
 		}
-
-		// Simple Field (monitoredObjectInstanceNumber)
-		monitoredObjectInstanceNumber := uint32(m.MonitoredObjectInstanceNumber)
-		_monitoredObjectInstanceNumberErr := writeBuffer.WriteUint32("monitoredObjectInstanceNumber", 22, (monitoredObjectInstanceNumber))
-		if _monitoredObjectInstanceNumberErr != nil {
-			return errors.Wrap(_monitoredObjectInstanceNumberErr, "Error serializing 'monitoredObjectInstanceNumber' field")
+		if _monitoredObjectIdentifierErr != nil {
+			return errors.Wrap(_monitoredObjectIdentifierErr, "Error serializing 'monitoredObjectIdentifier' field")
 		}
 
-		// Const Field (issueConfirmedNotificationsHeader)
-		_issueConfirmedNotificationsHeaderErr := writeBuffer.WriteUint8("issueConfirmedNotificationsHeader", 8, 0x29)
-		if _issueConfirmedNotificationsHeaderErr != nil {
-			return errors.Wrap(_issueConfirmedNotificationsHeaderErr, "Error serializing 'issueConfirmedNotificationsHeader' field")
+		// Simple Field (issueConfirmed)
+		if pushErr := writeBuffer.PushContext("issueConfirmed"); pushErr != nil {
+			return pushErr
 		}
-
-		// Const Field (issueConfirmedNotificationsSkipBits)
-		_issueConfirmedNotificationsSkipBitsErr := writeBuffer.WriteUint8("issueConfirmedNotificationsSkipBits", 7, 0x00)
-		if _issueConfirmedNotificationsSkipBitsErr != nil {
-			return errors.Wrap(_issueConfirmedNotificationsSkipBitsErr, "Error serializing 'issueConfirmedNotificationsSkipBits' field")
+		_issueConfirmedErr := m.IssueConfirmed.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("issueConfirmed"); popErr != nil {
+			return popErr
 		}
-
-		// Simple Field (issueConfirmedNotifications)
-		issueConfirmedNotifications := bool(m.IssueConfirmedNotifications)
-		_issueConfirmedNotificationsErr := writeBuffer.WriteBit("issueConfirmedNotifications", (issueConfirmedNotifications))
-		if _issueConfirmedNotificationsErr != nil {
-			return errors.Wrap(_issueConfirmedNotificationsErr, "Error serializing 'issueConfirmedNotifications' field")
+		if _issueConfirmedErr != nil {
+			return errors.Wrap(_issueConfirmedErr, "Error serializing 'issueConfirmed' field")
 		}
 
-		// Const Field (lifetimeHeader)
-		_lifetimeHeaderErr := writeBuffer.WriteUint8("lifetimeHeader", 5, 0x07)
-		if _lifetimeHeaderErr != nil {
-			return errors.Wrap(_lifetimeHeaderErr, "Error serializing 'lifetimeHeader' field")
+		// Simple Field (lifetimeInSeconds)
+		if pushErr := writeBuffer.PushContext("lifetimeInSeconds"); pushErr != nil {
+			return pushErr
 		}
-
-		// Simple Field (lifetimeLength)
-		lifetimeLength := uint8(m.LifetimeLength)
-		_lifetimeLengthErr := writeBuffer.WriteUint8("lifetimeLength", 3, (lifetimeLength))
-		if _lifetimeLengthErr != nil {
-			return errors.Wrap(_lifetimeLengthErr, "Error serializing 'lifetimeLength' field")
+		_lifetimeInSecondsErr := m.LifetimeInSeconds.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("lifetimeInSeconds"); popErr != nil {
+			return popErr
 		}
-
-		// Array Field (lifetimeSeconds)
-		if m.LifetimeSeconds != nil {
-			if pushErr := writeBuffer.PushContext("lifetimeSeconds", utils.WithRenderAsList(true)); pushErr != nil {
-				return pushErr
-			}
-			for _, _element := range m.LifetimeSeconds {
-				_elementErr := writeBuffer.WriteInt8("", 8, _element)
-				if _elementErr != nil {
-					return errors.Wrap(_elementErr, "Error serializing 'lifetimeSeconds' field")
-				}
-			}
-			if popErr := writeBuffer.PopContext("lifetimeSeconds", utils.WithRenderAsList(true)); popErr != nil {
-				return popErr
-			}
+		if _lifetimeInSecondsErr != nil {
+			return errors.Wrap(_lifetimeInSecondsErr, "Error serializing 'lifetimeInSeconds' field")
 		}
 
 		if popErr := writeBuffer.PopContext("BACnetConfirmedServiceRequestSubscribeCOV"); popErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
index 7c1550e..5107f3c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
@@ -32,7 +32,7 @@ type BACnetConfirmedServiceRequestWriteProperty struct {
 	ObjectIdentifier   *BACnetContextTagObjectIdentifier
 	PropertyIdentifier *BACnetContextTagPropertyIdentifier
 	ArrayIndex         *uint32
-	PropertyValue      *BACnetPropertyValue
+	PropertyValue      *BACnetConstructedData
 	Priority           *BACnetTag
 }
 
@@ -53,7 +53,7 @@ func (m *BACnetConfirmedServiceRequestWriteProperty) ServiceChoice() uint8 {
 func (m *BACnetConfirmedServiceRequestWriteProperty) InitializeParent(parent *BACnetConfirmedServiceRequest) {
 }
 
-func NewBACnetConfirmedServiceRequestWriteProperty(objectIdentifier *BACnetContextTagObjectIdentifier, propertyIdentifier *BACnetContextTagPropertyIdentifier, arrayIndex *uint32, propertyValue *BACnetPropertyValue, priority *BACnetTag) *BACnetConfirmedServiceRequest {
+func NewBACnetConfirmedServiceRequestWriteProperty(objectIdentifier *BACnetContextTagObjectIdentifier, propertyIdentifier *BACnetContextTagPropertyIdentifier, arrayIndex *uint32, propertyValue *BACnetConstructedData, priority *BACnetTag) *BACnetConfirmedServiceRequest {
 	child := &BACnetConfirmedServiceRequestWriteProperty{
 		ObjectIdentifier:              objectIdentifier,
 		PropertyIdentifier:            propertyIdentifier,
@@ -169,11 +169,11 @@ func BACnetConfirmedServiceRequestWritePropertyParse(readBuffer utils.ReadBuffer
 	if pullErr := readBuffer.PullContext("propertyValue"); pullErr != nil {
 		return nil, pullErr
 	}
-	_propertyValue, _propertyValueErr := BACnetPropertyValueParse(readBuffer, propertyIdentifier.Value)
+	_propertyValue, _propertyValueErr := BACnetConstructedDataParse(readBuffer, uint8(3), propertyIdentifier.Value)
 	if _propertyValueErr != nil {
 		return nil, errors.Wrap(_propertyValueErr, "Error parsing 'propertyValue' field")
 	}
-	propertyValue := CastBACnetPropertyValue(_propertyValue)
+	propertyValue := CastBACnetConstructedData(_propertyValue)
 	if closeErr := readBuffer.CloseContext("propertyValue"); closeErr != nil {
 		return nil, closeErr
 	}
@@ -209,7 +209,7 @@ func BACnetConfirmedServiceRequestWritePropertyParse(readBuffer utils.ReadBuffer
 		ObjectIdentifier:              CastBACnetContextTagObjectIdentifier(objectIdentifier),
 		PropertyIdentifier:            CastBACnetContextTagPropertyIdentifier(propertyIdentifier),
 		ArrayIndex:                    arrayIndex,
-		PropertyValue:                 CastBACnetPropertyValue(propertyValue),
+		PropertyValue:                 CastBACnetConstructedData(propertyValue),
 		Priority:                      CastBACnetTag(priority),
 		BACnetConfirmedServiceRequest: &BACnetConfirmedServiceRequest{},
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go
new file mode 100644
index 0000000..a23e8f1
--- /dev/null
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedData.go
@@ -0,0 +1,224 @@
+/*
+ * 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.
+
+// The data-structure of this message
+type BACnetConstructedData struct {
+	OpeningTag *BACnetContextTag
+	Data       []*BACnetTag
+	ClosingTag *BACnetContextTag
+}
+
+// The corresponding interface
+type IBACnetConstructedData interface {
+	LengthInBytes() uint16
+	LengthInBits() uint16
+	Serialize(writeBuffer utils.WriteBuffer) error
+}
+
+func NewBACnetConstructedData(openingTag *BACnetContextTag, data []*BACnetTag, closingTag *BACnetContextTag) *BACnetConstructedData {
+	return &BACnetConstructedData{OpeningTag: openingTag, Data: data, ClosingTag: closingTag}
+}
+
+func CastBACnetConstructedData(structType interface{}) *BACnetConstructedData {
+	castFunc := func(typ interface{}) *BACnetConstructedData {
+		if casted, ok := typ.(BACnetConstructedData); ok {
+			return &casted
+		}
+		if casted, ok := typ.(*BACnetConstructedData); ok {
+			return casted
+		}
+		return nil
+	}
+	return castFunc(structType)
+}
+
+func (m *BACnetConstructedData) GetTypeName() string {
+	return "BACnetConstructedData"
+}
+
+func (m *BACnetConstructedData) LengthInBits() uint16 {
+	return m.LengthInBitsConditional(false)
+}
+
+func (m *BACnetConstructedData) LengthInBitsConditional(lastItem bool) uint16 {
+	lengthInBits := uint16(0)
+
+	// Optional Field (openingTag)
+	if m.OpeningTag != nil {
+		lengthInBits += (*m.OpeningTag).LengthInBits()
+	}
+
+	// Manual Array Field (data)
+	data := m.Data
+	lengthInBits += TagsLength(data) * 8
+
+	// Optional Field (closingTag)
+	if m.ClosingTag != nil {
+		lengthInBits += (*m.ClosingTag).LengthInBits()
+	}
+
+	return lengthInBits
+}
+
+func (m *BACnetConstructedData) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConstructedDataParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, identifier BACnetPropertyIdentifier) (*BACnetConstructedData, error) {
+	if pullErr := readBuffer.PullContext("BACnetConstructedData"); pullErr != nil {
+		return nil, pullErr
+	}
+
+	// Optional Field (openingTag) (Can be skipped, if a given expression evaluates to false)
+	var openingTag *BACnetContextTag = nil
+	{
+		currentPos := readBuffer.GetPos()
+		if pullErr := readBuffer.PullContext("openingTag"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, tagNumberArgument, BACnetDataType_NULL)
+		switch {
+		case _err != nil && _err != utils.ParseAssertError:
+			return nil, errors.Wrap(_err, "Error parsing 'openingTag' field")
+		case _err == utils.ParseAssertError:
+			readBuffer.SetPos(currentPos)
+		default:
+			openingTag = CastBACnetContextTag(_val)
+			if closeErr := readBuffer.CloseContext("openingTag"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+	if pullErr := readBuffer.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
+		return nil, pullErr
+	}
+	// Manual Array Field (data)
+	// Terminated array
+	_dataList := make([]*BACnetTag, 0)
+	for !((bool)(OpeningClosingTerminate(readBuffer, (openingTag)))) {
+		_dataList = append(_dataList, ((*BACnetTag)(ParseTags(readBuffer))))
+
+	}
+	data := _dataList
+	if closeErr := readBuffer.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Optional Field (closingTag) (Can be skipped, if a given expression evaluates to false)
+	var closingTag *BACnetContextTag = nil
+	{
+		currentPos := readBuffer.GetPos()
+		if pullErr := readBuffer.PullContext("closingTag"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetContextTagParse(readBuffer, tagNumberArgument, BACnetDataType_NULL)
+		switch {
+		case _err != nil && _err != utils.ParseAssertError:
+			return nil, errors.Wrap(_err, "Error parsing 'closingTag' field")
+		case _err == utils.ParseAssertError:
+			readBuffer.SetPos(currentPos)
+		default:
+			closingTag = CastBACnetContextTag(_val)
+			if closeErr := readBuffer.CloseContext("closingTag"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
+	if closeErr := readBuffer.CloseContext("BACnetConstructedData"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Create the instance
+	return NewBACnetConstructedData(openingTag, data, closingTag), nil
+}
+
+func (m *BACnetConstructedData) Serialize(writeBuffer utils.WriteBuffer) error {
+	if pushErr := writeBuffer.PushContext("BACnetConstructedData"); pushErr != nil {
+		return pushErr
+	}
+
+	// Optional Field (openingTag) (Can be skipped, if the value is null)
+	var openingTag *BACnetContextTag = nil
+	if m.OpeningTag != nil {
+		if pushErr := writeBuffer.PushContext("openingTag"); pushErr != nil {
+			return pushErr
+		}
+		openingTag = m.OpeningTag
+		_openingTagErr := openingTag.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("openingTag"); popErr != nil {
+			return popErr
+		}
+		if _openingTagErr != nil {
+			return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
+		}
+	}
+
+	// Manual Array Field (data)
+	if m.Data != nil {
+		if pushErr := writeBuffer.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
+			return pushErr
+		}
+		for _, m := range m.Data {
+			WriteTags(writeBuffer, m)
+		}
+		if popErr := writeBuffer.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
+			return popErr
+		}
+	}
+
+	// Optional Field (closingTag) (Can be skipped, if the value is null)
+	var closingTag *BACnetContextTag = nil
+	if m.ClosingTag != nil {
+		if pushErr := writeBuffer.PushContext("closingTag"); pushErr != nil {
+			return pushErr
+		}
+		closingTag = m.ClosingTag
+		_closingTagErr := 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("BACnetConstructedData"); popErr != nil {
+		return popErr
+	}
+	return nil
+}
+
+func (m *BACnetConstructedData) String() string {
+	if m == nil {
+		return "<nil>"
+	}
+	buffer := utils.NewBoxedWriteBufferWithOptions(true, true)
+	m.Serialize(buffer)
+	return buffer.GetBox().String()
+}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go
index 5d6594e..2cdaf78 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go
@@ -215,7 +215,7 @@ func BACnetContextTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8,
 	case dataType == BACnetDataType_NULL: // BACnetContextTagNull
 		_parent, typeSwitchError = BACnetContextTagNullParse(readBuffer, tagNumberArgument, dataType)
 	case dataType == BACnetDataType_BOOLEAN: // BACnetContextTagBoolean
-		_parent, typeSwitchError = BACnetContextTagBooleanParse(readBuffer, tagNumberArgument, dataType, actualLength)
+		_parent, typeSwitchError = BACnetContextTagBooleanParse(readBuffer, tagNumberArgument, dataType)
 	case dataType == BACnetDataType_UNSIGNED_INTEGER: // BACnetContextTagUnsignedInteger
 		_parent, typeSwitchError = BACnetContextTagUnsignedIntegerParse(readBuffer, tagNumberArgument, dataType, actualLength)
 	case dataType == BACnetDataType_SIGNED_INTEGER: // BACnetContextTagSignedInteger
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go
index 4fe6594..0424cd8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go
@@ -29,7 +29,7 @@ import (
 // The data-structure of this message
 type BACnetContextTagBoolean struct {
 	*BACnetContextTag
-	Value   bool
+	Value   uint8
 	IsTrue  bool
 	IsFalse bool
 }
@@ -58,8 +58,9 @@ func (m *BACnetContextTagBoolean) InitializeParent(parent *BACnetContextTag, tag
 	m.ExtExtExtLength = extExtExtLength
 }
 
-func NewBACnetContextTagBoolean(tagNumber uint8, tagClass TagClass, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetContextTag {
+func NewBACnetContextTagBoolean(value uint8, tagNumber uint8, tagClass TagClass, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetContextTag {
 	child := &BACnetContextTagBoolean{
+		Value:            value,
 		BACnetContextTag: NewBACnetContextTag(tagNumber, tagClass, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
 	}
 	child.Child = child
@@ -96,7 +97,8 @@ func (m *BACnetContextTagBoolean) LengthInBits() uint16 {
 func (m *BACnetContextTagBoolean) LengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.ParentLengthInBits())
 
-	// A virtual field doesn't have any in- or output.
+	// Simple field (value)
+	lengthInBits += 8
 
 	// A virtual field doesn't have any in- or output.
 
@@ -109,21 +111,24 @@ func (m *BACnetContextTagBoolean) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetContextTagBooleanParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType, actualLength uint32) (*BACnetContextTag, error) {
+func BACnetContextTagBooleanParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8, dataType BACnetDataType) (*BACnetContextTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagBoolean"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	// Virtual field
-	_value := bool((actualLength) == (1))
-	value := bool(_value)
+	// Simple Field (value)
+	_value, _valueErr := readBuffer.ReadUint8("value", 8)
+	if _valueErr != nil {
+		return nil, errors.Wrap(_valueErr, "Error parsing 'value' field")
+	}
+	value := _value
 
 	// Virtual field
-	_isTrue := value
+	_isTrue := bool((value) == (1))
 	isTrue := bool(_isTrue)
 
 	// Virtual field
-	_isFalse := !(value)
+	_isFalse := bool((value) == (0))
 	isFalse := bool(_isFalse)
 
 	if closeErr := readBuffer.CloseContext("BACnetContextTagBoolean"); closeErr != nil {
@@ -146,8 +151,11 @@ func (m *BACnetContextTagBoolean) Serialize(writeBuffer utils.WriteBuffer) error
 		if pushErr := writeBuffer.PushContext("BACnetContextTagBoolean"); pushErr != nil {
 			return pushErr
 		}
-		// Virtual field
-		if _valueErr := writeBuffer.WriteVirtual("value", m.Value); _valueErr != nil {
+
+		// Simple Field (value)
+		value := uint8(m.Value)
+		_valueErr := writeBuffer.WriteUint8("value", 8, (value))
+		if _valueErr != nil {
 			return errors.Wrap(_valueErr, "Error serializing 'value' field")
 		}
 		// Virtual field
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagWithoutContext.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagWithoutContext.go
index 4941401..8caafa3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagWithoutContext.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagWithoutContext.go
@@ -21,6 +21,7 @@ package model
 
 import (
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
@@ -28,6 +29,7 @@ import (
 // The data-structure of this message
 type BACnetContextTagWithoutContext struct {
 	*BACnetTag
+	Data []int8
 }
 
 // The corresponding interface
@@ -44,7 +46,7 @@ func (m *BACnetContextTagWithoutContext) TagClass() TagClass {
 	return TagClass_CONTEXT_SPECIFIC_TAGS
 }
 
-func (m *BACnetContextTagWithoutContext) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
+func (m *BACnetContextTagWithoutContext) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32) {
 	m.TagNumber = tagNumber
 	m.LengthValueType = lengthValueType
 	m.ExtTagNumber = extTagNumber
@@ -53,8 +55,9 @@ func (m *BACnetContextTagWithoutContext) InitializeParent(parent *BACnetTag, tag
 	m.ExtExtExtLength = extExtExtLength
 }
 
-func NewBACnetContextTagWithoutContext(tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
+func NewBACnetContextTagWithoutContext(data []int8, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
 	child := &BACnetContextTagWithoutContext{
+		Data:      data,
 		BACnetTag: NewBACnetTag(tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
 	}
 	child.Child = child
@@ -91,6 +94,11 @@ func (m *BACnetContextTagWithoutContext) LengthInBits() uint16 {
 func (m *BACnetContextTagWithoutContext) LengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.ParentLengthInBits())
 
+	// Array field
+	if len(m.Data) > 0 {
+		lengthInBits += 8 * uint16(len(m.Data))
+	}
+
 	return lengthInBits
 }
 
@@ -98,17 +106,39 @@ func (m *BACnetContextTagWithoutContext) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetContextTagWithoutContextParse(readBuffer utils.ReadBuffer) (*BACnetTag, error) {
+func BACnetContextTagWithoutContextParse(readBuffer utils.ReadBuffer, actualLength uint32) (*BACnetTag, error) {
 	if pullErr := readBuffer.PullContext("BACnetContextTagWithoutContext"); pullErr != nil {
 		return nil, pullErr
 	}
 
+	// Array field (data)
+	if pullErr := readBuffer.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
+		return nil, pullErr
+	}
+	// Length array
+	data := make([]int8, 0)
+	{
+		_dataLength := actualLength
+		_dataEndPos := readBuffer.GetPos() + uint16(_dataLength)
+		for readBuffer.GetPos() < _dataEndPos {
+			_item, _err := readBuffer.ReadInt8("", 8)
+			if _err != nil {
+				return nil, errors.Wrap(_err, "Error parsing 'data' field")
+			}
+			data = append(data, _item)
+		}
+	}
+	if closeErr := readBuffer.CloseContext("data", utils.WithRenderAsList(true)); closeErr != nil {
+		return nil, closeErr
+	}
+
 	if closeErr := readBuffer.CloseContext("BACnetContextTagWithoutContext"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Create a partially initialized instance
 	_child := &BACnetContextTagWithoutContext{
+		Data:      data,
 		BACnetTag: &BACnetTag{},
 	}
 	_child.BACnetTag.Child = _child
@@ -121,6 +151,22 @@ func (m *BACnetContextTagWithoutContext) Serialize(writeBuffer utils.WriteBuffer
 			return pushErr
 		}
 
+		// Array Field (data)
+		if m.Data != nil {
+			if pushErr := writeBuffer.PushContext("data", utils.WithRenderAsList(true)); pushErr != nil {
+				return pushErr
+			}
+			for _, _element := range m.Data {
+				_elementErr := writeBuffer.WriteInt8("", 8, _element)
+				if _elementErr != nil {
+					return errors.Wrap(_elementErr, "Error serializing 'data' field")
+				}
+			}
+			if popErr := writeBuffer.PopContext("data", utils.WithRenderAsList(true)); popErr != nil {
+				return popErr
+			}
+		}
+
 		if popErr := writeBuffer.PopContext("BACnetContextTagWithoutContext"); popErr != nil {
 			return popErr
 		}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValue.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValue.go
index d075eb2..848408d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValue.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValue.go
@@ -20,17 +20,12 @@
 package model
 
 import (
-	"fmt"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/pkg/errors"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
 
-// Constant values.
-const BACnetPropertyValue_OPENINGTAG uint8 = 0x3E
-const BACnetPropertyValue_CLOSINGTAG uint8 = 0x3F
-
 // The data-structure of this message
 type BACnetPropertyValue struct {
 	Child IBACnetPropertyValueChild
@@ -88,12 +83,6 @@ func (m *BACnetPropertyValue) LengthInBitsConditional(lastItem bool) uint16 {
 func (m *BACnetPropertyValue) ParentLengthInBits() uint16 {
 	lengthInBits := uint16(0)
 
-	// Const Field (openingTag)
-	lengthInBits += 8
-
-	// Const Field (closingTag)
-	lengthInBits += 8
-
 	return lengthInBits
 }
 
@@ -101,32 +90,23 @@ func (m *BACnetPropertyValue) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetPropertyValueParse(readBuffer utils.ReadBuffer, identifier BACnetPropertyIdentifier) (*BACnetPropertyValue, error) {
+func BACnetPropertyValueParse(readBuffer utils.ReadBuffer, identifier BACnetPropertyIdentifier, actualLength uint32) (*BACnetPropertyValue, error) {
 	if pullErr := readBuffer.PullContext("BACnetPropertyValue"); pullErr != nil {
 		return nil, pullErr
 	}
 
-	// Const Field (openingTag)
-	openingTag, _openingTagErr := readBuffer.ReadUint8("openingTag", 8)
-	if _openingTagErr != nil {
-		return nil, errors.Wrap(_openingTagErr, "Error parsing 'openingTag' field")
-	}
-	if openingTag != BACnetPropertyValue_OPENINGTAG {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetPropertyValue_OPENINGTAG) + " but got " + fmt.Sprintf("%d", openingTag))
-	}
-
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
 	var _parent *BACnetPropertyValue
 	var typeSwitchError error
 	switch {
 	case identifier == BACnetPropertyIdentifier_OBJECT_TYPE: // BACnetPropertyValueObjectType
-		_parent, typeSwitchError = BACnetPropertyValueObjectTypeParse(readBuffer, identifier)
+		_parent, typeSwitchError = BACnetPropertyValueObjectTypeParse(readBuffer, identifier, actualLength)
 	case identifier == BACnetPropertyIdentifier_PRIORITY_ARRAY: // BACnetPropertyValuePriorityValue
-		_parent, typeSwitchError = BACnetPropertyValuePriorityValueParse(readBuffer, identifier)
+		_parent, typeSwitchError = BACnetPropertyValuePriorityValueParse(readBuffer, identifier, actualLength)
 	case identifier == BACnetPropertyIdentifier_PRESENT_VALUE: // BACnetPropertyValuePresentValue
-		_parent, typeSwitchError = BACnetPropertyValuePresentValueParse(readBuffer, identifier)
+		_parent, typeSwitchError = BACnetPropertyValuePresentValueParse(readBuffer, identifier, actualLength)
 	case identifier == BACnetPropertyIdentifier_RELINQUISH_DEFAULT: // BACnetPropertyValueRelinquishDefault
-		_parent, typeSwitchError = BACnetPropertyValueRelinquishDefaultParse(readBuffer, identifier)
+		_parent, typeSwitchError = BACnetPropertyValueRelinquishDefaultParse(readBuffer, identifier, actualLength)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -135,15 +115,6 @@ func BACnetPropertyValueParse(readBuffer utils.ReadBuffer, identifier BACnetProp
 		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
 	}
 
-	// Const Field (closingTag)
-	closingTag, _closingTagErr := readBuffer.ReadUint8("closingTag", 8)
-	if _closingTagErr != nil {
-		return nil, errors.Wrap(_closingTagErr, "Error parsing 'closingTag' field")
-	}
-	if closingTag != BACnetPropertyValue_CLOSINGTAG {
-		return nil, errors.New("Expected constant value " + fmt.Sprintf("%d", BACnetPropertyValue_CLOSINGTAG) + " but got " + fmt.Sprintf("%d", closingTag))
-	}
-
 	if closeErr := readBuffer.CloseContext("BACnetPropertyValue"); closeErr != nil {
 		return nil, closeErr
 	}
@@ -162,23 +133,11 @@ func (m *BACnetPropertyValue) SerializeParent(writeBuffer utils.WriteBuffer, chi
 		return pushErr
 	}
 
-	// Const Field (openingTag)
-	_openingTagErr := writeBuffer.WriteUint8("openingTag", 8, 0x3E)
-	if _openingTagErr != nil {
-		return errors.Wrap(_openingTagErr, "Error serializing 'openingTag' field")
-	}
-
 	// Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
 	if _typeSwitchErr := serializeChildFunction(); _typeSwitchErr != nil {
 		return errors.Wrap(_typeSwitchErr, "Error serializing sub-type field")
 	}
 
-	// Const Field (closingTag)
-	_closingTagErr := writeBuffer.WriteUint8("closingTag", 8, 0x3F)
-	if _closingTagErr != nil {
-		return errors.Wrap(_closingTagErr, "Error serializing 'closingTag' field")
-	}
-
 	if popErr := writeBuffer.PopContext("BACnetPropertyValue"); popErr != nil {
 		return popErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValueDefault.go
similarity index 54%
copy from plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
copy to plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValueDefault.go
index 4ca12fe..474ba6c 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTagEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValueDefault.go
@@ -27,13 +27,13 @@ import (
 // Code generated by code-generation. DO NOT EDIT.
 
 // The data-structure of this message
-type BACnetApplicationTagEnumerated struct {
-	*BACnetTag
+type BACnetPropertyValueDefault struct {
+	*BACnetPropertyValue
 	Data []int8
 }
 
 // The corresponding interface
-type IBACnetApplicationTagEnumerated interface {
+type IBACnetPropertyValueDefault interface {
 	LengthInBytes() uint16
 	LengthInBits() uint16
 	Serialize(writeBuffer utils.WriteBuffer) error
@@ -42,56 +42,50 @@ type IBACnetApplicationTagEnumerated interface {
 ///////////////////////////////////////////////////////////
 // Accessors for discriminator values.
 ///////////////////////////////////////////////////////////
-func (m *BACnetApplicationTagEnumerated) TagClass() TagClass {
-	return TagClass_APPLICATION_TAGS
+func (m *BACnetPropertyValueDefault) Identifier() BACnetPropertyIdentifier {
+	return 0
 }
 
-func (m *BACnetApplicationTagEnumerated) InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32) {
-	m.TagNumber = tagNumber
-	m.LengthValueType = lengthValueType
-	m.ExtTagNumber = extTagNumber
-	m.ExtLength = extLength
-	m.ExtExtLength = extExtLength
-	m.ExtExtExtLength = extExtExtLength
+func (m *BACnetPropertyValueDefault) InitializeParent(parent *BACnetPropertyValue) {
 }
 
-func NewBACnetApplicationTagEnumerated(data []int8, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32) *BACnetTag {
-	child := &BACnetApplicationTagEnumerated{
-		Data:      data,
-		BACnetTag: NewBACnetTag(tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength),
+func NewBACnetPropertyValueDefault(data []int8) *BACnetPropertyValue {
+	child := &BACnetPropertyValueDefault{
+		Data:                data,
+		BACnetPropertyValue: NewBACnetPropertyValue(),
 	}
 	child.Child = child
-	return child.BACnetTag
+	return child.BACnetPropertyValue
 }
 
-func CastBACnetApplicationTagEnumerated(structType interface{}) *BACnetApplicationTagEnumerated {
-	castFunc := func(typ interface{}) *BACnetApplicationTagEnumerated {
-		if casted, ok := typ.(BACnetApplicationTagEnumerated); ok {
+func CastBACnetPropertyValueDefault(structType interface{}) *BACnetPropertyValueDefault {
+	castFunc := func(typ interface{}) *BACnetPropertyValueDefault {
+		if casted, ok := typ.(BACnetPropertyValueDefault); ok {
 			return &casted
 		}
-		if casted, ok := typ.(*BACnetApplicationTagEnumerated); ok {
+		if casted, ok := typ.(*BACnetPropertyValueDefault); ok {
 			return casted
 		}
-		if casted, ok := typ.(BACnetTag); ok {
-			return CastBACnetApplicationTagEnumerated(casted.Child)
+		if casted, ok := typ.(BACnetPropertyValue); ok {
+			return CastBACnetPropertyValueDefault(casted.Child)
 		}
-		if casted, ok := typ.(*BACnetTag); ok {
-			return CastBACnetApplicationTagEnumerated(casted.Child)
+		if casted, ok := typ.(*BACnetPropertyValue); ok {
+			return CastBACnetPropertyValueDefault(casted.Child)
 		}
 		return nil
 	}
 	return castFunc(structType)
 }
 
-func (m *BACnetApplicationTagEnumerated) GetTypeName() string {
-	return "BACnetApplicationTagEnumerated"
+func (m *BACnetPropertyValueDefault) GetTypeName() string {
+	return "BACnetPropertyValueDefault"
 }
 
-func (m *BACnetApplicationTagEnumerated) LengthInBits() uint16 {
+func (m *BACnetPropertyValueDefault) LengthInBits() uint16 {
 	return m.LengthInBitsConditional(false)
 }
 
-func (m *BACnetApplicationTagEnumerated) LengthInBitsConditional(lastItem bool) uint16 {
+func (m *BACnetPropertyValueDefault) LengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.ParentLengthInBits())
 
 	// Array field
@@ -102,12 +96,12 @@ func (m *BACnetApplicationTagEnumerated) LengthInBitsConditional(lastItem bool)
 	return lengthInBits
 }
 
-func (m *BACnetApplicationTagEnumerated) LengthInBytes() uint16 {
+func (m *BACnetPropertyValueDefault) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetApplicationTagEnumeratedParse(readBuffer utils.ReadBuffer, actualLength uint32) (*BACnetTag, error) {
-	if pullErr := readBuffer.PullContext("BACnetApplicationTagEnumerated"); pullErr != nil {
+func BACnetPropertyValueDefaultParse(readBuffer utils.ReadBuffer, identifier BACnetPropertyIdentifier, actualLength uint32) (*BACnetPropertyValue, error) {
+	if pullErr := readBuffer.PullContext("BACnetPropertyValueDefault"); pullErr != nil {
 		return nil, pullErr
 	}
 
@@ -132,22 +126,22 @@ func BACnetApplicationTagEnumeratedParse(readBuffer utils.ReadBuffer, actualLeng
 		return nil, closeErr
 	}
 
-	if closeErr := readBuffer.CloseContext("BACnetApplicationTagEnumerated"); closeErr != nil {
+	if closeErr := readBuffer.CloseContext("BACnetPropertyValueDefault"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Create a partially initialized instance
-	_child := &BACnetApplicationTagEnumerated{
-		Data:      data,
-		BACnetTag: &BACnetTag{},
+	_child := &BACnetPropertyValueDefault{
+		Data:                data,
+		BACnetPropertyValue: &BACnetPropertyValue{},
 	}
-	_child.BACnetTag.Child = _child
-	return _child.BACnetTag, nil
+	_child.BACnetPropertyValue.Child = _child
+	return _child.BACnetPropertyValue, nil
 }
 
-func (m *BACnetApplicationTagEnumerated) Serialize(writeBuffer utils.WriteBuffer) error {
+func (m *BACnetPropertyValueDefault) Serialize(writeBuffer utils.WriteBuffer) error {
 	ser := func() error {
-		if pushErr := writeBuffer.PushContext("BACnetApplicationTagEnumerated"); pushErr != nil {
+		if pushErr := writeBuffer.PushContext("BACnetPropertyValueDefault"); pushErr != nil {
 			return pushErr
 		}
 
@@ -167,7 +161,7 @@ func (m *BACnetApplicationTagEnumerated) Serialize(writeBuffer utils.WriteBuffer
 			}
 		}
 
-		if popErr := writeBuffer.PopContext("BACnetApplicationTagEnumerated"); popErr != nil {
+		if popErr := writeBuffer.PopContext("BACnetPropertyValueDefault"); popErr != nil {
 			return popErr
 		}
 		return nil
@@ -175,7 +169,7 @@ func (m *BACnetApplicationTagEnumerated) Serialize(writeBuffer utils.WriteBuffer
 	return m.SerializeParent(writeBuffer, m, ser)
 }
 
-func (m *BACnetApplicationTagEnumerated) String() string {
+func (m *BACnetPropertyValueDefault) String() string {
 	if m == nil {
 		return "<nil>"
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValueObjectType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValueObjectType.go
index 3f8915c..7b0f744 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValueObjectType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValueObjectType.go
@@ -98,7 +98,7 @@ func (m *BACnetPropertyValueObjectType) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetPropertyValueObjectTypeParse(readBuffer utils.ReadBuffer, identifier BACnetPropertyIdentifier) (*BACnetPropertyValue, error) {
+func BACnetPropertyValueObjectTypeParse(readBuffer utils.ReadBuffer, identifier BACnetPropertyIdentifier, actualLength uint32) (*BACnetPropertyValue, error) {
 	if pullErr := readBuffer.PullContext("BACnetPropertyValueObjectType"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValuePresentValue.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValuePresentValue.go
index 76cd03a..203e5f5 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValuePresentValue.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValuePresentValue.go
@@ -98,7 +98,7 @@ func (m *BACnetPropertyValuePresentValue) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetPropertyValuePresentValueParse(readBuffer utils.ReadBuffer, identifier BACnetPropertyIdentifier) (*BACnetPropertyValue, error) {
+func BACnetPropertyValuePresentValueParse(readBuffer utils.ReadBuffer, identifier BACnetPropertyIdentifier, actualLength uint32) (*BACnetPropertyValue, error) {
 	if pullErr := readBuffer.PullContext("BACnetPropertyValuePresentValue"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValuePriorityValue.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValuePriorityValue.go
index 08f5d89..9cecd3a 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValuePriorityValue.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValuePriorityValue.go
@@ -100,7 +100,7 @@ func (m *BACnetPropertyValuePriorityValue) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetPropertyValuePriorityValueParse(readBuffer utils.ReadBuffer, identifier BACnetPropertyIdentifier) (*BACnetPropertyValue, error) {
+func BACnetPropertyValuePriorityValueParse(readBuffer utils.ReadBuffer, identifier BACnetPropertyIdentifier, actualLength uint32) (*BACnetPropertyValue, error) {
 	if pullErr := readBuffer.PullContext("BACnetPropertyValuePriorityValue"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValueRelinquishDefault.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValueRelinquishDefault.go
index d56c675..0444c01 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValueRelinquishDefault.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetPropertyValueRelinquishDefault.go
@@ -98,7 +98,7 @@ func (m *BACnetPropertyValueRelinquishDefault) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func BACnetPropertyValueRelinquishDefaultParse(readBuffer utils.ReadBuffer, identifier BACnetPropertyIdentifier) (*BACnetPropertyValue, error) {
+func BACnetPropertyValueRelinquishDefaultParse(readBuffer utils.ReadBuffer, identifier BACnetPropertyIdentifier, actualLength uint32) (*BACnetPropertyValue, error) {
 	if pullErr := readBuffer.PullContext("BACnetPropertyValueRelinquishDefault"); pullErr != nil {
 		return nil, pullErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
index 28bbb04..1b0d090 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
@@ -32,7 +32,7 @@ type BACnetServiceAckReadProperty struct {
 	ObjectIdentifier   *BACnetContextTagObjectIdentifier
 	PropertyIdentifier *BACnetContextTagPropertyIdentifier
 	ArrayIndex         *uint32
-	EnclosedTags       *EnclosedTags
+	ConstructedData    *BACnetConstructedData
 }
 
 // The corresponding interface
@@ -52,12 +52,12 @@ func (m *BACnetServiceAckReadProperty) ServiceChoice() uint8 {
 func (m *BACnetServiceAckReadProperty) InitializeParent(parent *BACnetServiceAck) {
 }
 
-func NewBACnetServiceAckReadProperty(objectIdentifier *BACnetContextTagObjectIdentifier, propertyIdentifier *BACnetContextTagPropertyIdentifier, arrayIndex *uint32, enclosedTags *EnclosedTags) *BACnetServiceAck {
+func NewBACnetServiceAckReadProperty(objectIdentifier *BACnetContextTagObjectIdentifier, propertyIdentifier *BACnetContextTagPropertyIdentifier, arrayIndex *uint32, constructedData *BACnetConstructedData) *BACnetServiceAck {
 	child := &BACnetServiceAckReadProperty{
 		ObjectIdentifier:   objectIdentifier,
 		PropertyIdentifier: propertyIdentifier,
 		ArrayIndex:         arrayIndex,
-		EnclosedTags:       enclosedTags,
+		ConstructedData:    constructedData,
 		BACnetServiceAck:   NewBACnetServiceAck(),
 	}
 	child.Child = child
@@ -105,9 +105,9 @@ func (m *BACnetServiceAckReadProperty) LengthInBitsConditional(lastItem bool) ui
 		lengthInBits += 32
 	}
 
-	// Optional Field (enclosedTags)
-	if m.EnclosedTags != nil {
-		lengthInBits += (*m.EnclosedTags).LengthInBits()
+	// Optional Field (constructedData)
+	if m.ConstructedData != nil {
+		lengthInBits += (*m.ConstructedData).LengthInBits()
 	}
 
 	return lengthInBits
@@ -158,22 +158,22 @@ func BACnetServiceAckReadPropertyParse(readBuffer utils.ReadBuffer) (*BACnetServ
 		arrayIndex = &_val
 	}
 
-	// Optional Field (enclosedTags) (Can be skipped, if a given expression evaluates to false)
-	var enclosedTags *EnclosedTags = nil
+	// Optional Field (constructedData) (Can be skipped, if a given expression evaluates to false)
+	var constructedData *BACnetConstructedData = nil
 	{
 		currentPos := readBuffer.GetPos()
-		if pullErr := readBuffer.PullContext("enclosedTags"); pullErr != nil {
+		if pullErr := readBuffer.PullContext("constructedData"); pullErr != nil {
 			return nil, pullErr
 		}
-		_val, _err := EnclosedTagsParse(readBuffer, uint8(3), uint8(7))
+		_val, _err := BACnetConstructedDataParse(readBuffer, uint8(3), propertyIdentifier.Value)
 		switch {
 		case _err != nil && _err != utils.ParseAssertError:
-			return nil, errors.Wrap(_err, "Error parsing 'enclosedTags' field")
+			return nil, errors.Wrap(_err, "Error parsing 'constructedData' field")
 		case _err == utils.ParseAssertError:
 			readBuffer.SetPos(currentPos)
 		default:
-			enclosedTags = CastEnclosedTags(_val)
-			if closeErr := readBuffer.CloseContext("enclosedTags"); closeErr != nil {
+			constructedData = CastBACnetConstructedData(_val)
+			if closeErr := readBuffer.CloseContext("constructedData"); closeErr != nil {
 				return nil, closeErr
 			}
 		}
@@ -188,7 +188,7 @@ func BACnetServiceAckReadPropertyParse(readBuffer utils.ReadBuffer) (*BACnetServ
 		ObjectIdentifier:   CastBACnetContextTagObjectIdentifier(objectIdentifier),
 		PropertyIdentifier: CastBACnetContextTagPropertyIdentifier(propertyIdentifier),
 		ArrayIndex:         arrayIndex,
-		EnclosedTags:       CastEnclosedTags(enclosedTags),
+		ConstructedData:    CastBACnetConstructedData(constructedData),
 		BACnetServiceAck:   &BACnetServiceAck{},
 	}
 	_child.BACnetServiceAck.Child = _child
@@ -235,19 +235,19 @@ func (m *BACnetServiceAckReadProperty) Serialize(writeBuffer utils.WriteBuffer)
 			}
 		}
 
-		// Optional Field (enclosedTags) (Can be skipped, if the value is null)
-		var enclosedTags *EnclosedTags = nil
-		if m.EnclosedTags != nil {
-			if pushErr := writeBuffer.PushContext("enclosedTags"); pushErr != nil {
+		// Optional Field (constructedData) (Can be skipped, if the value is null)
+		var constructedData *BACnetConstructedData = nil
+		if m.ConstructedData != nil {
+			if pushErr := writeBuffer.PushContext("constructedData"); pushErr != nil {
 				return pushErr
 			}
-			enclosedTags = m.EnclosedTags
-			_enclosedTagsErr := enclosedTags.Serialize(writeBuffer)
-			if popErr := writeBuffer.PopContext("enclosedTags"); popErr != nil {
+			constructedData = m.ConstructedData
+			_constructedDataErr := constructedData.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("constructedData"); popErr != nil {
 				return popErr
 			}
-			if _enclosedTagsErr != nil {
-				return errors.Wrap(_enclosedTagsErr, "Error serializing 'enclosedTags' field")
+			if _constructedDataErr != nil {
+				return errors.Wrap(_constructedDataErr, "Error serializing 'constructedData' field")
 			}
 		}
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
index 3d5773b..aef25b3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
@@ -35,6 +35,8 @@ type BACnetTag struct {
 	ExtExtLength             *uint16
 	ExtExtExtLength          *uint32
 	ActualTagNumber          uint8
+	IsBoolean                bool
+	IsConstructed            bool
 	IsPrimitiveAndNotBoolean bool
 	ActualLength             uint32
 	Child                    IBACnetTagChild
@@ -55,7 +57,7 @@ type IBACnetTagParent interface {
 
 type IBACnetTagChild interface {
 	Serialize(writeBuffer utils.WriteBuffer) error
-	InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isPrimitiveAndNotBoolean bool, actualLength uint32)
+	InitializeParent(parent *BACnetTag, tagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8, extExtLength *uint16, extExtExtLength *uint32, actualTagNumber uint8, isBoolean bool, isConstructed bool, isPrimitiveAndNotBoolean bool, actualLength uint32)
 	GetTypeName() string
 	IBACnetTag
 }
@@ -109,6 +111,10 @@ func (m *BACnetTag) ParentLengthInBits() uint16 {
 
 	// A virtual field doesn't have any in- or output.
 
+	// A virtual field doesn't have any in- or output.
+
+	// A virtual field doesn't have any in- or output.
+
 	// Optional Field (extLength)
 	if m.ExtLength != nil {
 		lengthInBits += 8
@@ -174,7 +180,15 @@ func BACnetTagParse(readBuffer utils.ReadBuffer) (*BACnetTag, error) {
 	actualTagNumber := uint8(_actualTagNumber)
 
 	// Virtual field
-	_isPrimitiveAndNotBoolean := bool(!(bool(bool(bool((tagClass) == (TagClass_CONTEXT_SPECIFIC_TAGS))) && bool(bool((lengthValueType) == (6)))))) && bool(bool((tagNumber) != (1)))
+	_isBoolean := bool(bool((tagNumber) == (1))) && bool(bool((tagClass) == (TagClass_APPLICATION_TAGS)))
+	isBoolean := bool(_isBoolean)
+
+	// Virtual field
+	_isConstructed := bool(bool((tagClass) == (TagClass_CONTEXT_SPECIFIC_TAGS))) && bool(bool((lengthValueType) == (6)))
+	isConstructed := bool(_isConstructed)
+
+	// Virtual field
+	_isPrimitiveAndNotBoolean := bool(!(isConstructed)) && bool(!(isBoolean))
 	isPrimitiveAndNotBoolean := bool(_isPrimitiveAndNotBoolean)
 
 	// Optional Field (extLength) (Can be skipped, if a given expression evaluates to false)
@@ -248,7 +262,7 @@ func BACnetTagParse(readBuffer utils.ReadBuffer) (*BACnetTag, error) {
 	case tagClass == TagClass_APPLICATION_TAGS && tagNumber == 0xC: // BACnetApplicationTagObjectIdentifier
 		_parent, typeSwitchError = BACnetApplicationTagObjectIdentifierParse(readBuffer)
 	case tagClass == TagClass_CONTEXT_SPECIFIC_TAGS: // BACnetContextTagWithoutContext
-		_parent, typeSwitchError = BACnetContextTagWithoutContextParse(readBuffer)
+		_parent, typeSwitchError = BACnetContextTagWithoutContextParse(readBuffer, actualLength)
 	default:
 		// TODO: return actual type
 		typeSwitchError = errors.New("Unmapped type")
@@ -262,7 +276,7 @@ func BACnetTagParse(readBuffer utils.ReadBuffer) (*BACnetTag, error) {
 	}
 
 	// Finish initializing
-	_parent.Child.InitializeParent(_parent, tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength, actualTagNumber, isPrimitiveAndNotBoolean, actualLength)
+	_parent.Child.InitializeParent(_parent, tagNumber, lengthValueType, extTagNumber, extLength, extExtLength, extExtExtLength, actualTagNumber, isBoolean, isConstructed, isPrimitiveAndNotBoolean, actualLength)
 	return _parent, nil
 }
 
@@ -311,6 +325,14 @@ func (m *BACnetTag) SerializeParent(writeBuffer utils.WriteBuffer, child IBACnet
 		return errors.Wrap(_actualTagNumberErr, "Error serializing 'actualTagNumber' field")
 	}
 	// Virtual field
+	if _isBooleanErr := writeBuffer.WriteVirtual("isBoolean", m.IsBoolean); _isBooleanErr != nil {
+		return errors.Wrap(_isBooleanErr, "Error serializing 'isBoolean' field")
+	}
+	// Virtual field
+	if _isConstructedErr := writeBuffer.WriteVirtual("isConstructed", m.IsConstructed); _isConstructedErr != nil {
+		return errors.Wrap(_isConstructedErr, "Error serializing 'isConstructed' field")
+	}
+	// Virtual field
 	if _isPrimitiveAndNotBooleanErr := writeBuffer.WriteVirtual("isPrimitiveAndNotBoolean", m.IsPrimitiveAndNotBoolean); _isPrimitiveAndNotBooleanErr != nil {
 		return errors.Wrap(_isPrimitiveAndNotBooleanErr, "Error serializing 'isPrimitiveAndNotBoolean' field")
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
index c2ad3a2..1c32b98 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification.go
@@ -21,6 +21,7 @@ package model
 
 import (
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
+	"github.com/pkg/errors"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
@@ -28,6 +29,11 @@ import (
 // The data-structure of this message
 type BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification struct {
 	*BACnetUnconfirmedServiceRequest
+	SubscriberProcessIdentifier *BACnetContextTagUnsignedInteger
+	MonitoredDeviceIdentifier   *BACnetContextTagObjectIdentifier
+	MonitoredObjectIdentifier   *BACnetContextTagObjectIdentifier
+	Lifetime                    *BACnetContextTagUnsignedInteger
+	ListOfValues                *BACnetConstructedData
 }
 
 // The corresponding interface
@@ -47,8 +53,13 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) ServiceChoic
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) InitializeParent(parent *BACnetUnconfirmedServiceRequest) {
 }
 
-func NewBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification() *BACnetUnconfirmedServiceRequest {
+func NewBACnetUnconfirmedServiceRequestUnconfirmedCOVNotification(subscriberProcessIdentifier *BACnetContextTagUnsignedInteger, monitoredDeviceIdentifier *BACnetContextTagObjectIdentifier, monitoredObjectIdentifier *BACnetContextTagObjectIdentifier, lifetime *BACnetContextTagUnsignedInteger, listOfValues *BACnetConstructedData) *BACnetUnconfirmedServiceRequest {
 	child := &BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification{
+		SubscriberProcessIdentifier:     subscriberProcessIdentifier,
+		MonitoredDeviceIdentifier:       monitoredDeviceIdentifier,
+		MonitoredObjectIdentifier:       monitoredObjectIdentifier,
+		Lifetime:                        lifetime,
+		ListOfValues:                    listOfValues,
 		BACnetUnconfirmedServiceRequest: NewBACnetUnconfirmedServiceRequest(),
 	}
 	child.Child = child
@@ -85,6 +96,23 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) LengthInBits
 func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) LengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(m.ParentLengthInBits())
 
+	// Simple field (subscriberProcessIdentifier)
+	lengthInBits += m.SubscriberProcessIdentifier.LengthInBits()
+
+	// Simple field (monitoredDeviceIdentifier)
+	lengthInBits += m.MonitoredDeviceIdentifier.LengthInBits()
+
+	// Simple field (monitoredObjectIdentifier)
+	lengthInBits += m.MonitoredObjectIdentifier.LengthInBits()
+
+	// Simple field (lifetime)
+	lengthInBits += m.Lifetime.LengthInBits()
+
+	// Optional Field (listOfValues)
+	if m.ListOfValues != nil {
+		lengthInBits += (*m.ListOfValues).LengthInBits()
+	}
+
 	return lengthInBits
 }
 
@@ -97,12 +125,90 @@ func BACnetUnconfirmedServiceRequestUnconfirmedCOVNotificationParse(readBuffer u
 		return nil, pullErr
 	}
 
+	// Simple Field (subscriberProcessIdentifier)
+	if pullErr := readBuffer.PullContext("subscriberProcessIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_subscriberProcessIdentifier, _subscriberProcessIdentifierErr := BACnetContextTagParse(readBuffer, uint8(0), 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
+	}
+
+	// Simple Field (monitoredDeviceIdentifier)
+	if pullErr := readBuffer.PullContext("monitoredDeviceIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_monitoredDeviceIdentifier, _monitoredDeviceIdentifierErr := BACnetContextTagParse(readBuffer, uint8(1), BACnetDataType_BACNET_OBJECT_IDENTIFIER)
+	if _monitoredDeviceIdentifierErr != nil {
+		return nil, errors.Wrap(_monitoredDeviceIdentifierErr, "Error parsing 'monitoredDeviceIdentifier' field")
+	}
+	monitoredDeviceIdentifier := CastBACnetContextTagObjectIdentifier(_monitoredDeviceIdentifier)
+	if closeErr := readBuffer.CloseContext("monitoredDeviceIdentifier"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Simple Field (monitoredObjectIdentifier)
+	if pullErr := readBuffer.PullContext("monitoredObjectIdentifier"); pullErr != nil {
+		return nil, pullErr
+	}
+	_monitoredObjectIdentifier, _monitoredObjectIdentifierErr := BACnetContextTagParse(readBuffer, uint8(2), 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 (lifetime)
+	if pullErr := readBuffer.PullContext("lifetime"); pullErr != nil {
+		return nil, pullErr
+	}
+	_lifetime, _lifetimeErr := BACnetContextTagParse(readBuffer, uint8(3), BACnetDataType_UNSIGNED_INTEGER)
+	if _lifetimeErr != nil {
+		return nil, errors.Wrap(_lifetimeErr, "Error parsing 'lifetime' field")
+	}
+	lifetime := CastBACnetContextTagUnsignedInteger(_lifetime)
+	if closeErr := readBuffer.CloseContext("lifetime"); closeErr != nil {
+		return nil, closeErr
+	}
+
+	// Optional Field (listOfValues) (Can be skipped, if a given expression evaluates to false)
+	var listOfValues *BACnetConstructedData = nil
+	{
+		currentPos := readBuffer.GetPos()
+		if pullErr := readBuffer.PullContext("listOfValues"); pullErr != nil {
+			return nil, pullErr
+		}
+		_val, _err := BACnetConstructedDataParse(readBuffer, uint8(4), BACnetPropertyIdentifier_ALL)
+		switch {
+		case _err != nil && _err != utils.ParseAssertError:
+			return nil, errors.Wrap(_err, "Error parsing 'listOfValues' field")
+		case _err == utils.ParseAssertError:
+			readBuffer.SetPos(currentPos)
+		default:
+			listOfValues = CastBACnetConstructedData(_val)
+			if closeErr := readBuffer.CloseContext("listOfValues"); closeErr != nil {
+				return nil, closeErr
+			}
+		}
+	}
+
 	if closeErr := readBuffer.CloseContext("BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification"); closeErr != nil {
 		return nil, closeErr
 	}
 
 	// Create a partially initialized instance
 	_child := &BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification{
+		SubscriberProcessIdentifier:     CastBACnetContextTagUnsignedInteger(subscriberProcessIdentifier),
+		MonitoredDeviceIdentifier:       CastBACnetContextTagObjectIdentifier(monitoredDeviceIdentifier),
+		MonitoredObjectIdentifier:       CastBACnetContextTagObjectIdentifier(monitoredObjectIdentifier),
+		Lifetime:                        CastBACnetContextTagUnsignedInteger(lifetime),
+		ListOfValues:                    CastBACnetConstructedData(listOfValues),
 		BACnetUnconfirmedServiceRequest: &BACnetUnconfirmedServiceRequest{},
 	}
 	_child.BACnetUnconfirmedServiceRequest.Child = _child
@@ -115,6 +221,70 @@ func (m *BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification) 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")
+		}
+
+		// Simple Field (monitoredDeviceIdentifier)
+		if pushErr := writeBuffer.PushContext("monitoredDeviceIdentifier"); pushErr != nil {
+			return pushErr
+		}
+		_monitoredDeviceIdentifierErr := m.MonitoredDeviceIdentifier.Serialize(writeBuffer)
+		if popErr := writeBuffer.PopContext("monitoredDeviceIdentifier"); popErr != nil {
+			return popErr
+		}
+		if _monitoredDeviceIdentifierErr != nil {
+			return errors.Wrap(_monitoredDeviceIdentifierErr, "Error serializing 'monitoredDeviceIdentifier' field")
+		}
+
+		// 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 (lifetime)
+		if pushErr := writeBuffer.PushContext("lifetime"); pushErr != nil {
+			return pushErr
+		}
+		_lifetimeErr := m.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 (listOfValues) (Can be skipped, if the value is null)
+		var listOfValues *BACnetConstructedData = nil
+		if m.ListOfValues != nil {
+			if pushErr := writeBuffer.PushContext("listOfValues"); pushErr != nil {
+				return pushErr
+			}
+			listOfValues = m.ListOfValues
+			_listOfValuesErr := listOfValues.Serialize(writeBuffer)
+			if popErr := writeBuffer.PopContext("listOfValues"); popErr != nil {
+				return popErr
+			}
+			if _listOfValuesErr != nil {
+				return errors.Wrap(_listOfValuesErr, "Error serializing 'listOfValues' field")
+			}
+		}
+
 		if popErr := writeBuffer.PopContext("BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification"); popErr != nil {
 			return popErr
 		}
diff --git a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
index c65ee42..1ba0e17 100644
--- a/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
+++ b/protocols/bacnetip/src/main/resources/protocols/bacnetip/bacnetip.mspec
@@ -158,20 +158,11 @@
         ['0x00' BACnetConfirmedServiceRequestAcknowledgeAlarm
         ]
         ['0x01' BACnetConfirmedServiceRequestConfirmedCOVNotification
-            [const  uint 8               subscriberProcessIdentifierHeader         0x09                 ]
-            [simple uint 8               subscriberProcessIdentifier                                      ]
-            [const  uint 8               monitoredObjectIdentifierHeader           0x1C                 ]
-            [simple uint 10              monitoredObjectType                                              ]
-            [simple uint 22              monitoredObjectInstanceNumber                                    ]
-            [const  uint 8               issueConfirmedNotificationsHeader         0x2C                 ]
-            [simple uint 10              issueConfirmedNotificationsType                                  ]
-            [simple uint 22              issueConfirmedNotificationsInstanceNumber                        ]
-            [const  uint 5               lifetimeHeader                            0x07                 ]
-            [simple uint 3               lifetimeLength                                                   ]
-            [array  int  8               lifetimeSeconds                           count  'lifetimeLength']
-            [const  uint 8               listOfValuesOpeningTag                    0x4E                 ]
-            [array  BACnetTagWithContent notifications                             length 'len - 18'      ]
-            [const  uint 8               listOfValuesClosingTag                    0x4F                 ]
+            [simple BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')          subscriberProcessIdentifier ]
+            [simple BACnetContextTagObjectIdentifier('1', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') monitoredObjectIdentifier   ]
+            [simple BACnetContextTagBoolean('2', 'BACnetDataType.BOOLEAN')                           issueConfirmed              ]
+            [simple BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')          lifetimeInSeconds           ]
+            [optional BACnetConstructedData('4', 'BACnetPropertyIdentifier.ALL') listOfValues                                    ]
         ]
         ['0x02' BACnetConfirmedServiceRequestConfirmedEventNotification
         ]
@@ -179,17 +170,10 @@
         ['0x04' BACnetConfirmedServiceRequestGetEnrollmentSummary
         ]
         ['0x05' BACnetConfirmedServiceRequestSubscribeCOV
-            [const  uint 8  subscriberProcessIdentifierHeader   0x09                ]
-            [simple uint 8  subscriberProcessIdentifier                               ]
-            [const  uint 8  monitoredObjectIdentifierHeader     0x1C                ]
-            [simple uint 10 monitoredObjectType                                       ]
-            [simple uint 22 monitoredObjectInstanceNumber                             ]
-            [const  uint 8  issueConfirmedNotificationsHeader   0x29                ]
-            [const  uint 7  issueConfirmedNotificationsSkipBits 0x00                ]
-            [simple bit     issueConfirmedNotifications                               ]
-            [const  uint 5  lifetimeHeader                      0x07                ]
-            [simple uint 3  lifetimeLength                                            ]
-            [array  int 8   lifetimeSeconds                     count 'lifetimeLength']
+            [simple BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')          subscriberProcessIdentifier ]
+            [simple BACnetContextTagObjectIdentifier('1', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') monitoredObjectIdentifier   ]
+            [simple BACnetContextTagBoolean('2', 'BACnetDataType.BOOLEAN')                           issueConfirmed              ]
+            [simple BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')          lifetimeInSeconds           ]
         ]
 
         ['0x06' BACnetConfirmedServiceRequestAtomicReadFile
@@ -223,9 +207,9 @@
             [simple   BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER')     objectIdentifier                                                                    ]
             [simple   BACnetContextTagPropertyIdentifier('1', 'BACnetDataType.BACNET_PROPERTY_IDENTIFIER') propertyIdentifier                                                                  ]
             // TODO: check if this is the right identifier type and size
+            // TODO: replace with proper tag
             [optional uint 32 arrayIndex 'propertyIdentifier.value == BACnetPropertyIdentifier.VALUE_SOURCE_ARRAY']
-             // TODO: possible revert again
-            [simple   ConstructedData('propertyIdentifier.value')                                      propertyValue                                                                       ]
+            [simple   BACnetConstructedData('3', 'propertyIdentifier.value')                                      propertyValue                                                                       ]
             [optional BACnetTag priority                  'curPos < (len - 1)'            ]
         ]
         ['0x10' BACnetConfirmedServiceRequestWritePropertyMultiple
@@ -288,6 +272,11 @@
             [simple BACnetApplicationTagCharacterString     objectName          ]
         ]
         ['0x02' BACnetUnconfirmedServiceRequestUnconfirmedCOVNotification
+            [simple BACnetContextTagUnsignedInteger('0', 'BACnetDataType.UNSIGNED_INTEGER')          subscriberProcessIdentifier ]
+            [simple BACnetContextTagObjectIdentifier('1', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER')  monitoredDeviceIdentifier  ]
+            [simple BACnetContextTagObjectIdentifier('2', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER') monitoredObjectIdentifier   ]
+            [simple BACnetContextTagUnsignedInteger('3', 'BACnetDataType.UNSIGNED_INTEGER')          lifetime                    ]
+            [optional BACnetConstructedData('4', 'BACnetPropertyIdentifier.ALL') listOfValues                                    ]
         ]
         ['0x03' BACnetUnconfirmedServiceRequestUnconfirmedEventNotification
         ]
@@ -352,8 +341,9 @@
             [simple BACnetContextTagObjectIdentifier('0', 'BACnetDataType.BACNET_OBJECT_IDENTIFIER')     objectIdentifier   ]
             [simple BACnetContextTagPropertyIdentifier('1', 'BACnetDataType.BACNET_PROPERTY_IDENTIFIER') propertyIdentifier ]
             // TODO: check if this is the right identifier type and size
+            // TODO: replace with proper tag
             [optional uint 32 arrayIndex 'propertyIdentifier.value == BACnetPropertyIdentifier.VALUE_SOURCE_ARRAY']
-            [optional ConstructedData('propertyIdentifier.value') constructedData]
+            [optional BACnetConstructedData('3','propertyIdentifier.value') constructedData]
         ]
         ['0x0E' BACnetServiceAckReadPropertyMultiple
 
@@ -604,11 +594,11 @@
     ]
 ]
 
-[type ConstructedData(BACnetPropertyIdentifier identifier)
-    [optional       BACnetContextTag('3', 'BACnetDataType.NULL') openingTag]
+[type BACnetConstructedData(uint 4 tagNumberArgument, BACnetPropertyIdentifier identifier)
+    [optional       BACnetContextTag('tagNumberArgument', 'BACnetDataType.NULL') openingTag]
     // TODO: BACnetTag is not yet smart enough and looses type information
     [manualArray    BACnetTag data terminated 'STATIC_CALL("openingClosingTerminate", readBuffer, openingTag)' 'STATIC_CALL("parseTags", readBuffer)' 'STATIC_CALL("writeTags", writeBuffer, _value)' 'STATIC_CALL("tagsLength", data)']
-    [optional       BACnetContextTag('3', 'BACnetDataType.NULL') closingTag]
+    [optional       BACnetContextTag('tagNumberArgument', 'BACnetDataType.NULL') closingTag]
 ]
 
 [discriminatedType BACnetPropertyValue(BACnetPropertyIdentifier identifier, uint 32 actualLength)
@@ -625,9 +615,9 @@
         ['RELINQUISH_DEFAULT'   BACnetPropertyValueRelinquishDefault
             [simple BACnetApplicationTagReal value]
         ]
-        [BACnetPropertyValueDefault
+        /*[BACnetPropertyValueDefault
             [array int 8 data length 'actualLength']
-        ]
+        ]*/
     ]
 ]
 
@@ -644,10 +634,10 @@
     [typeSwitch dataType
         ['NULL' BACnetContextTagNull
         ]
-        ['BOOLEAN' BACnetContextTagBoolean(uint 32 actualLength)
-            [virtual bit value   'actualLength == 1'    ]
-            [virtual bit isTrue  'value'                ]
-            [virtual bit isFalse '!value'               ]
+        ['BOOLEAN' BACnetContextTagBoolean
+            [simple  uint 8 value                          ]
+            [virtual bit    isTrue  'value == 1'           ]
+            [virtual bit    isFalse 'value == 0'           ]
         ]
         ['UNSIGNED_INTEGER' BACnetContextTagUnsignedInteger(uint 32 actualLength)
             [virtual    bit     isUint8     'actualLength == 1' ]
diff --git a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
index a1fde0c..6e39204 100644
--- a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
+++ b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
@@ -146,13 +146,15 @@ public class BacNetIpProtocolLogic extends Plc4xProtocolBase<BVLC> implements Ha
             BACnetConfirmedServiceRequestConfirmedCOVNotification valueChange =
                 (BACnetConfirmedServiceRequestConfirmedCOVNotification) serviceRequest;
 
-            long deviceIdentifier = valueChange.getMonitoredObjectInstanceNumber();
-            int objectType = valueChange.getIssueConfirmedNotificationsType();
-            long objectInstance = valueChange.getIssueConfirmedNotificationsInstanceNumber();
+            long deviceIdentifier = valueChange.getMonitoredObjectIdentifier().getInstanceNumber();
+            int objectType = valueChange.getMonitoredObjectIdentifier().getObjectType().getValue();
+            long objectInstance = valueChange.getMonitoredObjectIdentifier().getInstanceNumber();
             BacNetIpField curField = new BacNetIpField(deviceIdentifier, objectType, objectInstance);
 
             // The actual value change is in the notifications ... iterate through them to get it.
-            for (BACnetTagWithContent notification : valueChange.getNotifications()) {
+            for (BACnetTag notification1 : valueChange.getListOfValues().getData()) {
+                // TODO: fixme
+                BACnetTagWithContent notification=null;
                 // These are value change notifications. Ignore the rest.
                 if (notification.getPropertyIdentifier().get(0) == (short) 0x55) {
                     final BACnetTag baCnetTag = notification.getValue();
diff --git a/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/RandomPackagesTest.java b/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/RandomPackagesTest.java
index 6573da9..18d6b02 100644
--- a/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/RandomPackagesTest.java
+++ b/sandbox/test-java-bacnetip-driver/src/test/java/org/apache/plc4x/java/bacnetip/RandomPackagesTest.java
@@ -739,27 +739,54 @@ public class RandomPackagesTest {
         );
     }
 
+    @Disabled("This needs more work")
     @TestFactory
     @DisplayName("COV_AWF_ARF")
     Collection<DynamicTest> COV_AWF_ARF() throws Exception {
         PCAPEvaluator pcapEvaluator = pcapEvaluator("COV_AWF_ARF.cap");
         return Arrays.asList(
-            DynamicTest.dynamicTest("TODO",
+            DynamicTest.dynamicTest("Confirmed-REQ   subscribeCOV[ 10] binary-input,0",
                 () -> {
                     BVLC bvlc;
                     bvlc = pcapEvaluator.nextBVLC();
                     dump(bvlc);
-                    // TODO:
-                    assumeTrue(false, "not properly implemented. Check manually and add asserts");
+                    BVLCOriginalUnicastNPDU bvlcOriginalUnicastNPDU = (BVLCOriginalUnicastNPDU) bvlc;
+                    APDUConfirmedRequest apduConfirmedRequest = (APDUConfirmedRequest) bvlcOriginalUnicastNPDU.getNpdu().getApdu();
+                    BACnetConfirmedServiceRequest serviceRequest = apduConfirmedRequest.getServiceRequest();
+                    assertNotNull(serviceRequest);
+                    BACnetConfirmedServiceRequestSubscribeCOV baCnetConfirmedServiceRequestSubscribeCOV = (BACnetConfirmedServiceRequestSubscribeCOV) serviceRequest;
+                    assertEquals((short) 123, baCnetConfirmedServiceRequestSubscribeCOV.getSubscriberProcessIdentifier().getValueUint8());
+                    assertEquals(BACnetObjectType.BINARY_INPUT, baCnetConfirmedServiceRequestSubscribeCOV.getMonitoredObjectIdentifier().getObjectType());
+                    assertEquals(0, baCnetConfirmedServiceRequestSubscribeCOV.getMonitoredObjectIdentifier().getInstanceNumber());
+                    assertTrue(baCnetConfirmedServiceRequestSubscribeCOV.getIssueConfirmed().getIsFalse());
+                    assertEquals(10, baCnetConfirmedServiceRequestSubscribeCOV.getLifetimeInSeconds().getActualValue() / 60);
                 }),
-            DynamicTest.dynamicTest("TODO",
+            DynamicTest.dynamicTest("Simple-ACK      subscribeCOV[ 10]",
                 () -> {
                     BVLC bvlc;
                     bvlc = pcapEvaluator.nextBVLC();
                     dump(bvlc);
-                    // TODO:
-                    assumeTrue(false, "not properly implemented. Check manually and add asserts");
-                })
+                    BVLCOriginalUnicastNPDU bvlcOriginalUnicastNPDU = (BVLCOriginalUnicastNPDU) bvlc;
+                    APDUSimpleAck apduSimpleAck = (APDUSimpleAck) bvlcOriginalUnicastNPDU.getNpdu().getApdu();
+                    assertEquals((short) 5,apduSimpleAck.getServiceChoice());
+                }),
+            DynamicTest.dynamicTest("Unconfirmed-REQ unconfirmedCOVNotification device,12345 binary-input,0 present-value status-flags",
+                () -> {
+                    BVLC bvlc;
+                    bvlc = pcapEvaluator.nextBVLC();
+                    dump(bvlc);
+                    BVLCOriginalUnicastNPDU bvlcOriginalUnicastNPDU = (BVLCOriginalUnicastNPDU) bvlc;
+                    APDUConfirmedRequest apduConfirmedRequest = (APDUConfirmedRequest) bvlcOriginalUnicastNPDU.getNpdu().getApdu();
+                    BACnetConfirmedServiceRequest serviceRequest = apduConfirmedRequest.getServiceRequest();
+                    assertNotNull(serviceRequest);
+                    BACnetConfirmedServiceRequestSubscribeCOV baCnetConfirmedServiceRequestSubscribeCOV = (BACnetConfirmedServiceRequestSubscribeCOV) serviceRequest;
+                    assertEquals((short) 123, baCnetConfirmedServiceRequestSubscribeCOV.getSubscriberProcessIdentifier().getValueUint8());
+                    assertEquals(BACnetObjectType.BINARY_INPUT, baCnetConfirmedServiceRequestSubscribeCOV.getMonitoredObjectIdentifier().getObjectType());
+                    assertEquals(0, baCnetConfirmedServiceRequestSubscribeCOV.getMonitoredObjectIdentifier().getInstanceNumber());
+                    assertTrue(baCnetConfirmedServiceRequestSubscribeCOV.getIssueConfirmed().getIsFalse());
+                    assertEquals(10, baCnetConfirmedServiceRequestSubscribeCOV.getLifetimeInSeconds().getActualValue() / 60);
+                })
+            // TODO: finish me
         );
     }