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/08/04 12:37:36 UTC

[plc4x] 03/03: fix(cbus): greatly simplified parsing by removing duplicate definition

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

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

commit 2a132d6fce140bf0275673212dcf5488c0c660ab
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Aug 4 14:37:25 2022 +0200

    fix(cbus): greatly simplified parsing by removing duplicate definition
---
 plc4go/internal/cbus/MessageCodec.go               |   6 +-
 plc4go/internal/cbus/Reader.go                     | 106 +++---
 plc4go/internal/cbus/Util.go                       |  35 +-
 plc4go/protocols/cbus/readwrite/ParserHelper.go    |   8 -
 plc4go/protocols/cbus/readwrite/XmlParserHelper.go |   8 -
 .../cbus/readwrite/model/CALDataStatus.go          |  66 +++-
 .../cbus/readwrite/model/CALDataStatusExtended.go  | 274 ++++++++------
 .../protocols/cbus/readwrite/model/EncodedReply.go |  65 +---
 .../model/EncodedReplyExtendedFormatStatusReply.go | 204 ----------
 .../model/EncodedReplyStandardFormatStatusReply.go | 204 ----------
 .../readwrite/model/ExtendedFormatStatusReply.go   | 415 ---------------------
 .../cbus/readwrite/model/ExtendedStatusHeader.go   | 183 ---------
 .../cbus/readwrite/model/RequestContext.go         |  56 +--
 .../readwrite/model/StandardFormatStatusReply.go   | 279 --------------
 .../protocols/cbus/readwrite/model/StatusHeader.go | 183 ---------
 .../internal/cbusanalyzer/analyzer.go              |  21 +-
 .../java/cbus/readwrite/utils/StaticHelper.java    |   2 +-
 .../apache/plc4x/java/cbus/RandomPackagesTest.java |  40 +-
 .../org/apache/plc4x/java/cbus/ReferenceTest.java  |  52 +--
 .../src/main/resources/protocols/cbus/c-bus.mspec  |  97 ++---
 20 files changed, 357 insertions(+), 1947 deletions(-)

diff --git a/plc4go/internal/cbus/MessageCodec.go b/plc4go/internal/cbus/MessageCodec.go
index 0d706b57a..bb1fad9f9 100644
--- a/plc4go/internal/cbus/MessageCodec.go
+++ b/plc4go/internal/cbus/MessageCodec.go
@@ -43,7 +43,7 @@ type MessageCodec struct {
 
 func NewMessageCodec(transportInstance transports.TransportInstance, srchk bool) *MessageCodec {
 	codec := &MessageCodec{
-		requestContext: readwriteModel.NewRequestContext(false, false, false),
+		requestContext: readwriteModel.NewRequestContext(false),
 		cbusOptions:    readwriteModel.NewCBusOptions(false, false, false, false, false, false, false, false, srchk),
 		monitoredSALs:  make(chan readwriteModel.MonitoredSAL, 100),
 	}
@@ -181,7 +181,7 @@ lookingForTheEnd:
 		// TODO: bit bad we need to do this but cal detection is not reliable enough
 		{ // Try SAL
 			rb := utils.NewReadBufferByteBased(read)
-			cBusMessage, secondErr := readwriteModel.CBusMessageParse(rb, pciResponse, readwriteModel.NewRequestContext(false, false, false), m.cbusOptions)
+			cBusMessage, secondErr := readwriteModel.CBusMessageParse(rb, pciResponse, readwriteModel.NewRequestContext(false), m.cbusOptions)
 			if secondErr == nil {
 				return cBusMessage, nil
 			} else {
@@ -189,7 +189,7 @@ lookingForTheEnd:
 			}
 		}
 		{ // Try MMI
-			requestContext := readwriteModel.NewRequestContext(false, false, false)
+			requestContext := readwriteModel.NewRequestContext(false)
 			cbusOptions := readwriteModel.NewCBusOptions(false, false, false, false, false, false, false, false, false)
 			rb := utils.NewReadBufferByteBased(read)
 			cBusMessage, secondErr := readwriteModel.CBusMessageParse(rb, true, requestContext, cbusOptions)
diff --git a/plc4go/internal/cbus/Reader.go b/plc4go/internal/cbus/Reader.go
index d54b4f7b9..8df3d1b18 100644
--- a/plc4go/internal/cbus/Reader.go
+++ b/plc4go/internal/cbus/Reader.go
@@ -142,38 +142,18 @@ func (m *Reader) Read(readRequest model.PlcReadRequest) <-chan model.PlcReadRequ
 						embeddedReply := confirmation.GetEmbeddedReply().(readWriteModel.ReplyOrConfirmationReplyExactly)
 
 						switch reply := embeddedReply.GetReply().(readWriteModel.ReplyEncodedReply).GetEncodedReply().(type) {
-						case readWriteModel.EncodedReplyStandardFormatStatusReplyExactly:
-							application := reply.GetReply().GetApplication()
-							// TODO: verify application... this should be the same
-							_ = application
-							blockStart := reply.GetReply().GetBlockStart()
-							// TODO: verify application... this should be the same
-							_ = blockStart
-							statusBytes := reply.GetReply().GetStatusBytes()
+						case readWriteModel.EncodedReplyCALReplyExactly:
+							calData := reply.GetCalReply().GetCalData()
 							addResponseCode(fieldNameCopy, model.PlcResponseCode_OK)
-							plcListValues := make([]values.PlcValue, len(statusBytes)*4)
-							for i, statusByte := range statusBytes {
-								plcListValues[i*4+0] = spiValues.NewPlcSTRING(statusByte.GetGav0().String())
-								plcListValues[i*4+1] = spiValues.NewPlcSTRING(statusByte.GetGav1().String())
-								plcListValues[i*4+2] = spiValues.NewPlcSTRING(statusByte.GetGav2().String())
-								plcListValues[i*4+3] = spiValues.NewPlcSTRING(statusByte.GetGav3().String())
-							}
-							addPlcValue(fieldNameCopy, spiValues.NewPlcList(plcListValues))
-						case readWriteModel.EncodedReplyExtendedFormatStatusReplyExactly:
-							coding := reply.GetReply().GetCoding()
-							// TODO: verify coding... this should be the same
-							_ = coding
-							application := reply.GetReply().GetApplication()
-							// TODO: verify application... this should be the same
-							_ = application
-							blockStart := reply.GetReply().GetBlockStart()
-							// TODO: verify application... this should be the same
-							_ = blockStart
-							switch coding {
-							case readWriteModel.StatusCoding_BINARY_BY_THIS_SERIAL_INTERFACE:
-								fallthrough
-							case readWriteModel.StatusCoding_BINARY_BY_ELSEWHERE:
-								statusBytes := reply.GetReply().GetStatusBytes()
+							switch calData := calData.(type) {
+							case readWriteModel.CALDataStatusExactly:
+								application := calData.GetApplication()
+								// TODO: verify application... this should be the same
+								_ = application
+								blockStart := calData.GetBlockStart()
+								// TODO: verify application... this should be the same
+								_ = blockStart
+								statusBytes := calData.GetStatusBytes()
 								addResponseCode(fieldNameCopy, model.PlcResponseCode_OK)
 								plcListValues := make([]values.PlcValue, len(statusBytes)*4)
 								for i, statusByte := range statusBytes {
@@ -183,29 +163,51 @@ func (m *Reader) Read(readRequest model.PlcReadRequest) <-chan model.PlcReadRequ
 									plcListValues[i*4+3] = spiValues.NewPlcSTRING(statusByte.GetGav3().String())
 								}
 								addPlcValue(fieldNameCopy, spiValues.NewPlcList(plcListValues))
-							case readWriteModel.StatusCoding_LEVEL_BY_THIS_SERIAL_INTERFACE:
-								fallthrough
-							case readWriteModel.StatusCoding_LEVEL_BY_ELSEWHERE:
-								levelInformation := reply.GetReply().GetLevelInformation()
-								addResponseCode(fieldNameCopy, model.PlcResponseCode_OK)
-								plcListValues := make([]values.PlcValue, len(levelInformation))
-								for i, levelInformation := range levelInformation {
-									switch levelInformation := levelInformation.(type) {
-									case readWriteModel.LevelInformationAbsentExactly:
-										plcListValues[i] = spiValues.NewPlcSTRING("is absent")
-									case readWriteModel.LevelInformationCorruptedExactly:
-										plcListValues[i] = spiValues.NewPlcSTRING("corrupted")
-									case readWriteModel.LevelInformationNormalExactly:
-										plcListValues[i] = spiValues.NewPlcUSINT(levelInformation.GetActualLevel())
-									default:
-										panic("Impossible case")
+							case readWriteModel.CALDataStatusExtendedExactly:
+								coding := calData.GetCoding()
+								// TODO: verify coding... this should be the same
+								_ = coding
+								application := calData.GetApplication()
+								// TODO: verify application... this should be the same
+								_ = application
+								blockStart := calData.GetBlockStart()
+								// TODO: verify application... this should be the same
+								_ = blockStart
+								switch coding {
+								case readWriteModel.StatusCoding_BINARY_BY_THIS_SERIAL_INTERFACE:
+									fallthrough
+								case readWriteModel.StatusCoding_BINARY_BY_ELSEWHERE:
+									statusBytes := calData.GetStatusBytes()
+									addResponseCode(fieldNameCopy, model.PlcResponseCode_OK)
+									plcListValues := make([]values.PlcValue, len(statusBytes)*4)
+									for i, statusByte := range statusBytes {
+										plcListValues[i*4+0] = spiValues.NewPlcSTRING(statusByte.GetGav0().String())
+										plcListValues[i*4+1] = spiValues.NewPlcSTRING(statusByte.GetGav1().String())
+										plcListValues[i*4+2] = spiValues.NewPlcSTRING(statusByte.GetGav2().String())
+										plcListValues[i*4+3] = spiValues.NewPlcSTRING(statusByte.GetGav3().String())
+									}
+									addPlcValue(fieldNameCopy, spiValues.NewPlcList(plcListValues))
+								case readWriteModel.StatusCoding_LEVEL_BY_THIS_SERIAL_INTERFACE:
+									fallthrough
+								case readWriteModel.StatusCoding_LEVEL_BY_ELSEWHERE:
+									levelInformation := calData.GetLevelInformation()
+									addResponseCode(fieldNameCopy, model.PlcResponseCode_OK)
+									plcListValues := make([]values.PlcValue, len(levelInformation))
+									for i, levelInformation := range levelInformation {
+										switch levelInformation := levelInformation.(type) {
+										case readWriteModel.LevelInformationAbsentExactly:
+											plcListValues[i] = spiValues.NewPlcSTRING("is absent")
+										case readWriteModel.LevelInformationCorruptedExactly:
+											plcListValues[i] = spiValues.NewPlcSTRING("corrupted")
+										case readWriteModel.LevelInformationNormalExactly:
+											plcListValues[i] = spiValues.NewPlcUSINT(levelInformation.GetActualLevel())
+										default:
+											panic("Impossible case")
+										}
 									}
+									addPlcValue(fieldNameCopy, spiValues.NewPlcList(plcListValues))
 								}
-								addPlcValue(fieldNameCopy, spiValues.NewPlcList(plcListValues))
 							}
-						case readWriteModel.EncodedReplyCALReplyExactly:
-							calData := reply.GetCalReply().GetCalData()
-							addResponseCode(fieldNameCopy, model.PlcResponseCode_OK)
 							// TODO: how should we serialize that???
 							addPlcValue(fieldNameCopy, spiValues.NewPlcSTRING(fmt.Sprintf("%s", calData)))
 						}
@@ -240,7 +242,7 @@ func (m *Reader) Read(readRequest model.PlcReadRequest) <-chan model.PlcReadRequ
 	return result
 }
 
-var defaultRequestContext = readWriteModel.NewRequestContext(false, false, false)
+var defaultRequestContext = readWriteModel.NewRequestContext(false)
 var defaultOptions = readWriteModel.NewCBusOptions(false, false, false, false, false, false, false, false, false)
 
 func (m *Reader) fieldToCBusMessage(field model.PlcField) (readWriteModel.CBusMessage, error) {
diff --git a/plc4go/internal/cbus/Util.go b/plc4go/internal/cbus/Util.go
index cddfa093f..f0fff3ee6 100644
--- a/plc4go/internal/cbus/Util.go
+++ b/plc4go/internal/cbus/Util.go
@@ -38,12 +38,9 @@ func CreateRequestContextWithInfoCallback(cBusMessage readwriteModel.CBusMessage
 			case readwriteModel.CALDataIdentifyExactly:
 				sendIdentifyRequestBefore = true
 			}
-			return readwriteModel.NewRequestContext(true, false, sendIdentifyRequestBefore)
+			return readwriteModel.NewRequestContext(sendIdentifyRequestBefore)
 		case readwriteModel.RequestCommandExactly:
 			switch command := request.GetCbusCommand().(type) {
-			case readwriteModel.CBusCommandDeviceManagementExactly:
-				infoCallBack("CAL request detected")
-				return readwriteModel.NewRequestContext(true, false, false)
 			case readwriteModel.CBusCommandPointToPointExactly:
 				sendIdentifyRequestBefore := false
 				infoCallBack("CAL request detected")
@@ -51,29 +48,7 @@ func CreateRequestContextWithInfoCallback(cBusMessage readwriteModel.CBusMessage
 				case readwriteModel.CALDataIdentifyExactly:
 					sendIdentifyRequestBefore = true
 				}
-				return readwriteModel.NewRequestContext(true, false, sendIdentifyRequestBefore)
-			case readwriteModel.CBusCommandPointToMultiPointExactly:
-				switch command := command.GetCommand().(type) {
-				case readwriteModel.CBusPointToMultiPointCommandStatusExactly:
-					var sendStatusRequestLevelBefore bool
-					switch command.GetStatusRequest().(type) {
-					case readwriteModel.StatusRequestLevelExactly:
-						sendStatusRequestLevelBefore = true
-					}
-					infoCallBack("SAL status request detected")
-					return readwriteModel.NewRequestContext(false, sendStatusRequestLevelBefore, false)
-				}
-			case readwriteModel.CBusCommandPointToPointToMultiPointExactly:
-				switch command := command.GetCommand().(type) {
-				case readwriteModel.CBusPointToPointToMultiPointCommandStatusExactly:
-					var sendStatusRequestLevelBefore bool
-					switch command.GetStatusRequest().(type) {
-					case readwriteModel.StatusRequestLevelExactly:
-						sendStatusRequestLevelBefore = true
-					}
-					infoCallBack("SAL status request detected")
-					return readwriteModel.NewRequestContext(false, sendStatusRequestLevelBefore, false)
-				}
+				return readwriteModel.NewRequestContext(sendIdentifyRequestBefore)
 			}
 		case readwriteModel.RequestObsoleteExactly:
 			sendIdentifyRequestBefore := false
@@ -82,11 +57,11 @@ func CreateRequestContextWithInfoCallback(cBusMessage readwriteModel.CBusMessage
 			case readwriteModel.CALDataIdentifyExactly:
 				sendIdentifyRequestBefore = true
 			}
-			return readwriteModel.NewRequestContext(true, false, sendIdentifyRequestBefore)
+			return readwriteModel.NewRequestContext(sendIdentifyRequestBefore)
 		}
 	case readwriteModel.CBusMessageToClientExactly:
 		// We received a request so we need to reset our flags
-		return readwriteModel.NewRequestContext(false, false, false)
+		return readwriteModel.NewRequestContext(false)
 	}
-	return readwriteModel.NewRequestContext(false, false, false)
+	return readwriteModel.NewRequestContext(false)
 }
diff --git a/plc4go/protocols/cbus/readwrite/ParserHelper.go b/plc4go/protocols/cbus/readwrite/ParserHelper.go
index cbb811509..37bc570e1 100644
--- a/plc4go/protocols/cbus/readwrite/ParserHelper.go
+++ b/plc4go/protocols/cbus/readwrite/ParserHelper.go
@@ -99,8 +99,6 @@ func (m CbusParserHelper) Parse(typeName string, arguments []string, io utils.Re
 		return model.MediaTransportControlDataParse(io)
 	case "StatusByte":
 		return model.StatusByteParse(io)
-	case "ExtendedStatusHeader":
-		return model.ExtendedStatusHeaderParse(io)
 	case "TriggerControlLabelOptions":
 		return model.TriggerControlLabelOptionsParse(io)
 	case "HVACAuxiliaryLevel":
@@ -188,8 +186,6 @@ func (m CbusParserHelper) Parse(typeName string, arguments []string, io utils.Re
 		return model.ClockAndTimekeepingDataParse(io)
 	case "NetworkRoute":
 		return model.NetworkRouteParse(io)
-	case "StandardFormatStatusReply":
-		return model.StandardFormatStatusReplyParse(io)
 	case "ResponseTermination":
 		return model.ResponseTerminationParse(io)
 	case "LevelInformation":
@@ -217,8 +213,6 @@ func (m CbusParserHelper) Parse(typeName string, arguments []string, io utils.Re
 			return nil, errors.Wrap(err, "Error parsing")
 		}
 		return model.CustomTypesParse(io, numBytes)
-	case "StatusHeader":
-		return model.StatusHeaderParse(io)
 	case "EncodedReply":
 		var cBusOptions model.CBusOptions
 		var requestContext model.RequestContext
@@ -226,8 +220,6 @@ func (m CbusParserHelper) Parse(typeName string, arguments []string, io utils.Re
 	case "CBusPointToPointToMultiPointCommand":
 		var cBusOptions model.CBusOptions
 		return model.CBusPointToPointToMultiPointCommandParse(io, cBusOptions)
-	case "ExtendedFormatStatusReply":
-		return model.ExtendedFormatStatusReplyParse(io)
 	case "CBusPointToPointCommand":
 		var cBusOptions model.CBusOptions
 		return model.CBusPointToPointCommandParse(io, cBusOptions)
diff --git a/plc4go/protocols/cbus/readwrite/XmlParserHelper.go b/plc4go/protocols/cbus/readwrite/XmlParserHelper.go
index 766f45cfa..078f4a674 100644
--- a/plc4go/protocols/cbus/readwrite/XmlParserHelper.go
+++ b/plc4go/protocols/cbus/readwrite/XmlParserHelper.go
@@ -115,8 +115,6 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 		return model.MediaTransportControlDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "StatusByte":
 		return model.StatusByteParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "ExtendedStatusHeader":
-		return model.ExtendedStatusHeaderParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "TriggerControlLabelOptions":
 		return model.TriggerControlLabelOptionsParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "HVACAuxiliaryLevel":
@@ -210,8 +208,6 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 		return model.ClockAndTimekeepingDataParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "NetworkRoute":
 		return model.NetworkRouteParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
-	case "StandardFormatStatusReply":
-		return model.StandardFormatStatusReplyParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "ResponseTermination":
 		return model.ResponseTerminationParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "LevelInformation":
@@ -241,8 +237,6 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 		}
 		numBytes := uint8(parsedUint0)
 		return model.CustomTypesParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), numBytes)
-	case "StatusHeader":
-		return model.StatusHeaderParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "EncodedReply":
 		// TODO: find a way to parse the sub types
 		var cBusOptions model.CBusOptions
@@ -253,8 +247,6 @@ func (m CbusXmlParserHelper) Parse(typeName string, xmlString string, parserArgu
 		// TODO: find a way to parse the sub types
 		var cBusOptions model.CBusOptions
 		return model.CBusPointToPointToMultiPointCommandParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)), cBusOptions)
-	case "ExtendedFormatStatusReply":
-		return model.ExtendedFormatStatusReplyParse(utils.NewXmlReadBuffer(strings.NewReader(xmlString)))
 	case "CBusPointToPointCommand":
 		// TODO: find a way to parse the sub types
 		var cBusOptions model.CBusOptions
diff --git a/plc4go/protocols/cbus/readwrite/model/CALDataStatus.go b/plc4go/protocols/cbus/readwrite/model/CALDataStatus.go
index df2612ef2..ecdfc4150 100644
--- a/plc4go/protocols/cbus/readwrite/model/CALDataStatus.go
+++ b/plc4go/protocols/cbus/readwrite/model/CALDataStatus.go
@@ -35,8 +35,8 @@ type CALDataStatus interface {
 	GetApplication() ApplicationIdContainer
 	// GetBlockStart returns BlockStart (property field)
 	GetBlockStart() uint8
-	// GetData returns Data (property field)
-	GetData() []byte
+	// GetStatusBytes returns StatusBytes (property field)
+	GetStatusBytes() []StatusByte
 }
 
 // CALDataStatusExactly can be used when we want exactly this type and not a type which fulfills CALDataStatus.
@@ -51,7 +51,7 @@ type _CALDataStatus struct {
 	*_CALData
 	Application ApplicationIdContainer
 	BlockStart  uint8
-	Data        []byte
+	StatusBytes []StatusByte
 }
 
 ///////////////////////////////////////////////////////////
@@ -86,8 +86,8 @@ func (m *_CALDataStatus) GetBlockStart() uint8 {
 	return m.BlockStart
 }
 
-func (m *_CALDataStatus) GetData() []byte {
-	return m.Data
+func (m *_CALDataStatus) GetStatusBytes() []StatusByte {
+	return m.StatusBytes
 }
 
 ///////////////////////
@@ -96,11 +96,11 @@ func (m *_CALDataStatus) GetData() []byte {
 ///////////////////////////////////////////////////////////
 
 // NewCALDataStatus factory function for _CALDataStatus
-func NewCALDataStatus(application ApplicationIdContainer, blockStart uint8, data []byte, commandTypeContainer CALCommandTypeContainer, additionalData CALData, requestContext RequestContext) *_CALDataStatus {
+func NewCALDataStatus(application ApplicationIdContainer, blockStart uint8, statusBytes []StatusByte, commandTypeContainer CALCommandTypeContainer, additionalData CALData, requestContext RequestContext) *_CALDataStatus {
 	_result := &_CALDataStatus{
 		Application: application,
 		BlockStart:  blockStart,
-		Data:        data,
+		StatusBytes: statusBytes,
 		_CALData:    NewCALData(commandTypeContainer, additionalData, requestContext),
 	}
 	_result._CALData._CALDataChildRequirements = _result
@@ -136,8 +136,11 @@ func (m *_CALDataStatus) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits += 8
 
 	// Array field
-	if len(m.Data) > 0 {
-		lengthInBits += 8 * uint16(len(m.Data))
+	if len(m.StatusBytes) > 0 {
+		for i, element := range m.StatusBytes {
+			last := i == len(m.StatusBytes)-1
+			lengthInBits += element.(interface{ GetLengthInBitsConditional(bool) uint16 }).GetLengthInBitsConditional(last)
+		}
 	}
 
 	return lengthInBits
@@ -175,11 +178,28 @@ func CALDataStatusParse(readBuffer utils.ReadBuffer, requestContext RequestConte
 		return nil, errors.Wrap(_blockStartErr, "Error parsing 'blockStart' field of CALDataStatus")
 	}
 	blockStart := _blockStart
-	// Byte Array field (data)
-	numberOfBytesdata := int(uint16(commandTypeContainer.NumBytes()) - uint16(uint16(2)))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
-	if _readArrayErr != nil {
-		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field of CALDataStatus")
+
+	// Array field (statusBytes)
+	if pullErr := readBuffer.PullContext("statusBytes", utils.WithRenderAsList(true)); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for statusBytes")
+	}
+	// Count array
+	statusBytes := make([]StatusByte, uint16(commandTypeContainer.NumBytes())-uint16(uint16(2)))
+	// This happens when the size is set conditional to 0
+	if len(statusBytes) == 0 {
+		statusBytes = nil
+	}
+	{
+		for curItem := uint16(0); curItem < uint16(uint16(commandTypeContainer.NumBytes())-uint16(uint16(2))); curItem++ {
+			_item, _err := StatusByteParse(readBuffer)
+			if _err != nil {
+				return nil, errors.Wrap(_err, "Error parsing 'statusBytes' field of CALDataStatus")
+			}
+			statusBytes[curItem] = _item.(StatusByte)
+		}
+	}
+	if closeErr := readBuffer.CloseContext("statusBytes", utils.WithRenderAsList(true)); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for statusBytes")
 	}
 
 	if closeErr := readBuffer.CloseContext("CALDataStatus"); closeErr != nil {
@@ -190,7 +210,7 @@ func CALDataStatusParse(readBuffer utils.ReadBuffer, requestContext RequestConte
 	_child := &_CALDataStatus{
 		Application: application,
 		BlockStart:  blockStart,
-		Data:        data,
+		StatusBytes: statusBytes,
 		_CALData: &_CALData{
 			RequestContext: requestContext,
 		},
@@ -226,10 +246,18 @@ func (m *_CALDataStatus) Serialize(writeBuffer utils.WriteBuffer) error {
 			return errors.Wrap(_blockStartErr, "Error serializing 'blockStart' field")
 		}
 
-		// Array Field (data)
-		// Byte Array field (data)
-		if err := writeBuffer.WriteByteArray("data", m.GetData()); err != nil {
-			return errors.Wrap(err, "Error serializing 'data' field")
+		// Array Field (statusBytes)
+		if pushErr := writeBuffer.PushContext("statusBytes", utils.WithRenderAsList(true)); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for statusBytes")
+		}
+		for _, _element := range m.GetStatusBytes() {
+			_elementErr := writeBuffer.WriteSerializable(_element)
+			if _elementErr != nil {
+				return errors.Wrap(_elementErr, "Error serializing 'statusBytes' field")
+			}
+		}
+		if popErr := writeBuffer.PopContext("statusBytes", utils.WithRenderAsList(true)); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for statusBytes")
 		}
 
 		if popErr := writeBuffer.PopContext("CALDataStatus"); popErr != nil {
diff --git a/plc4go/protocols/cbus/readwrite/model/CALDataStatusExtended.go b/plc4go/protocols/cbus/readwrite/model/CALDataStatusExtended.go
index bd84268f9..b1f1d706a 100644
--- a/plc4go/protocols/cbus/readwrite/model/CALDataStatusExtended.go
+++ b/plc4go/protocols/cbus/readwrite/model/CALDataStatusExtended.go
@@ -32,23 +32,19 @@ type CALDataStatusExtended interface {
 	utils.Serializable
 	CALData
 	// GetCoding returns Coding (property field)
-	GetCoding() uint8
+	GetCoding() StatusCoding
 	// GetApplication returns Application (property field)
 	GetApplication() ApplicationIdContainer
 	// GetBlockStart returns BlockStart (property field)
 	GetBlockStart() uint8
-	// GetData returns Data (property field)
-	GetData() []byte
-	// GetIsBinaryBySerialInterface returns IsBinaryBySerialInterface (virtual field)
-	GetIsBinaryBySerialInterface() bool
-	// GetIsBinaryByElsewhere returns IsBinaryByElsewhere (virtual field)
-	GetIsBinaryByElsewhere() bool
-	// GetIsLevelBySerialInterface returns IsLevelBySerialInterface (virtual field)
-	GetIsLevelBySerialInterface() bool
-	// GetIsLevelByElsewhere returns IsLevelByElsewhere (virtual field)
-	GetIsLevelByElsewhere() bool
-	// GetIsReserved returns IsReserved (virtual field)
-	GetIsReserved() bool
+	// GetStatusBytes returns StatusBytes (property field)
+	GetStatusBytes() []StatusByte
+	// GetLevelInformation returns LevelInformation (property field)
+	GetLevelInformation() []LevelInformation
+	// GetNumberOfStatusBytes returns NumberOfStatusBytes (virtual field)
+	GetNumberOfStatusBytes() uint8
+	// GetNumberOfLevelInformation returns NumberOfLevelInformation (virtual field)
+	GetNumberOfLevelInformation() uint8
 }
 
 // CALDataStatusExtendedExactly can be used when we want exactly this type and not a type which fulfills CALDataStatusExtended.
@@ -61,10 +57,11 @@ type CALDataStatusExtendedExactly interface {
 // _CALDataStatusExtended is the data-structure of this message
 type _CALDataStatusExtended struct {
 	*_CALData
-	Coding      uint8
-	Application ApplicationIdContainer
-	BlockStart  uint8
-	Data        []byte
+	Coding           StatusCoding
+	Application      ApplicationIdContainer
+	BlockStart       uint8
+	StatusBytes      []StatusByte
+	LevelInformation []LevelInformation
 }
 
 ///////////////////////////////////////////////////////////
@@ -91,7 +88,7 @@ func (m *_CALDataStatusExtended) GetParent() CALData {
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *_CALDataStatusExtended) GetCoding() uint8 {
+func (m *_CALDataStatusExtended) GetCoding() StatusCoding {
 	return m.Coding
 }
 
@@ -103,8 +100,12 @@ func (m *_CALDataStatusExtended) GetBlockStart() uint8 {
 	return m.BlockStart
 }
 
-func (m *_CALDataStatusExtended) GetData() []byte {
-	return m.Data
+func (m *_CALDataStatusExtended) GetStatusBytes() []StatusByte {
+	return m.StatusBytes
+}
+
+func (m *_CALDataStatusExtended) GetLevelInformation() []LevelInformation {
+	return m.LevelInformation
 }
 
 ///////////////////////
@@ -116,24 +117,14 @@ func (m *_CALDataStatusExtended) GetData() []byte {
 /////////////////////// Accessors for virtual fields.
 ///////////////////////
 
-func (m *_CALDataStatusExtended) GetIsBinaryBySerialInterface() bool {
-	return bool(bool((m.GetCoding()) == (0x00)))
-}
-
-func (m *_CALDataStatusExtended) GetIsBinaryByElsewhere() bool {
-	return bool(bool((m.GetCoding()) == (0x40)))
-}
-
-func (m *_CALDataStatusExtended) GetIsLevelBySerialInterface() bool {
-	return bool(bool((m.GetCoding()) == (0x07)))
-}
-
-func (m *_CALDataStatusExtended) GetIsLevelByElsewhere() bool {
-	return bool(bool((m.GetCoding()) == (0x47)))
+func (m *_CALDataStatusExtended) GetNumberOfStatusBytes() uint8 {
+	return uint8(utils.InlineIf((bool(bool((m.GetCoding()) == (StatusCoding_BINARY_BY_THIS_SERIAL_INTERFACE))) || bool(bool((m.GetCoding()) == (StatusCoding_BINARY_BY_ELSEWHERE)))), func() interface{} { return uint8((uint8(m.GetCommandTypeContainer().NumBytes()) - uint8(uint8(3)))) }, func() interface{} { return uint8((uint8(0))) }).(uint8))
 }
 
-func (m *_CALDataStatusExtended) GetIsReserved() bool {
-	return bool(bool(bool(bool(!(m.GetIsBinaryBySerialInterface())) && bool(!(m.GetIsBinaryByElsewhere()))) && bool(!(m.GetIsLevelBySerialInterface()))) && bool(!(m.GetIsLevelByElsewhere())))
+func (m *_CALDataStatusExtended) GetNumberOfLevelInformation() uint8 {
+	return uint8(utils.InlineIf((bool(bool((m.GetCoding()) == (StatusCoding_LEVEL_BY_THIS_SERIAL_INTERFACE))) || bool(bool((m.GetCoding()) == (StatusCoding_LEVEL_BY_ELSEWHERE)))), func() interface{} {
+		return uint8((uint8((uint8(m.GetCommandTypeContainer().NumBytes()) - uint8(uint8(3)))) / uint8(uint8(2))))
+	}, func() interface{} { return uint8((uint8(0))) }).(uint8))
 }
 
 ///////////////////////
@@ -142,13 +133,14 @@ func (m *_CALDataStatusExtended) GetIsReserved() bool {
 ///////////////////////////////////////////////////////////
 
 // NewCALDataStatusExtended factory function for _CALDataStatusExtended
-func NewCALDataStatusExtended(coding uint8, application ApplicationIdContainer, blockStart uint8, data []byte, commandTypeContainer CALCommandTypeContainer, additionalData CALData, requestContext RequestContext) *_CALDataStatusExtended {
+func NewCALDataStatusExtended(coding StatusCoding, application ApplicationIdContainer, blockStart uint8, statusBytes []StatusByte, levelInformation []LevelInformation, commandTypeContainer CALCommandTypeContainer, additionalData CALData, requestContext RequestContext) *_CALDataStatusExtended {
 	_result := &_CALDataStatusExtended{
-		Coding:      coding,
-		Application: application,
-		BlockStart:  blockStart,
-		Data:        data,
-		_CALData:    NewCALData(commandTypeContainer, additionalData, requestContext),
+		Coding:           coding,
+		Application:      application,
+		BlockStart:       blockStart,
+		StatusBytes:      statusBytes,
+		LevelInformation: levelInformation,
+		_CALData:         NewCALData(commandTypeContainer, additionalData, requestContext),
 	}
 	_result._CALData._CALDataChildRequirements = _result
 	return _result
@@ -179,25 +171,30 @@ func (m *_CALDataStatusExtended) GetLengthInBitsConditional(lastItem bool) uint1
 	// Simple field (coding)
 	lengthInBits += 8
 
-	// A virtual field doesn't have any in- or output.
-
-	// A virtual field doesn't have any in- or output.
+	// Simple field (application)
+	lengthInBits += 8
 
-	// A virtual field doesn't have any in- or output.
+	// Simple field (blockStart)
+	lengthInBits += 8
 
 	// A virtual field doesn't have any in- or output.
 
 	// A virtual field doesn't have any in- or output.
 
-	// Simple field (application)
-	lengthInBits += 8
-
-	// Simple field (blockStart)
-	lengthInBits += 8
+	// Array field
+	if len(m.StatusBytes) > 0 {
+		for i, element := range m.StatusBytes {
+			last := i == len(m.StatusBytes)-1
+			lengthInBits += element.(interface{ GetLengthInBitsConditional(bool) uint16 }).GetLengthInBitsConditional(last)
+		}
+	}
 
 	// Array field
-	if len(m.Data) > 0 {
-		lengthInBits += 8 * uint16(len(m.Data))
+	if len(m.LevelInformation) > 0 {
+		for i, element := range m.LevelInformation {
+			last := i == len(m.LevelInformation)-1
+			lengthInBits += element.(interface{ GetLengthInBitsConditional(bool) uint16 }).GetLengthInBitsConditional(last)
+		}
 	}
 
 	return lengthInBits
@@ -217,36 +214,17 @@ func CALDataStatusExtendedParse(readBuffer utils.ReadBuffer, requestContext Requ
 	_ = currentPos
 
 	// Simple Field (coding)
-	_coding, _codingErr := readBuffer.ReadUint8("coding", 8)
+	if pullErr := readBuffer.PullContext("coding"); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for coding")
+	}
+	_coding, _codingErr := StatusCodingParse(readBuffer)
 	if _codingErr != nil {
 		return nil, errors.Wrap(_codingErr, "Error parsing 'coding' field of CALDataStatusExtended")
 	}
 	coding := _coding
-
-	// Virtual field
-	_isBinaryBySerialInterface := bool((coding) == (0x00))
-	isBinaryBySerialInterface := bool(_isBinaryBySerialInterface)
-	_ = isBinaryBySerialInterface
-
-	// Virtual field
-	_isBinaryByElsewhere := bool((coding) == (0x40))
-	isBinaryByElsewhere := bool(_isBinaryByElsewhere)
-	_ = isBinaryByElsewhere
-
-	// Virtual field
-	_isLevelBySerialInterface := bool((coding) == (0x07))
-	isLevelBySerialInterface := bool(_isLevelBySerialInterface)
-	_ = isLevelBySerialInterface
-
-	// Virtual field
-	_isLevelByElsewhere := bool((coding) == (0x47))
-	isLevelByElsewhere := bool(_isLevelByElsewhere)
-	_ = isLevelByElsewhere
-
-	// Virtual field
-	_isReserved := bool(bool(bool(!(isBinaryBySerialInterface)) && bool(!(isBinaryByElsewhere))) && bool(!(isLevelBySerialInterface))) && bool(!(isLevelByElsewhere))
-	isReserved := bool(_isReserved)
-	_ = isReserved
+	if closeErr := readBuffer.CloseContext("coding"); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for coding")
+	}
 
 	// Simple Field (application)
 	if pullErr := readBuffer.PullContext("application"); pullErr != nil {
@@ -267,11 +245,63 @@ func CALDataStatusExtendedParse(readBuffer utils.ReadBuffer, requestContext Requ
 		return nil, errors.Wrap(_blockStartErr, "Error parsing 'blockStart' field of CALDataStatusExtended")
 	}
 	blockStart := _blockStart
-	// Byte Array field (data)
-	numberOfBytesdata := int(uint16(commandTypeContainer.NumBytes()) - uint16(uint16(2)))
-	data, _readArrayErr := readBuffer.ReadByteArray("data", numberOfBytesdata)
-	if _readArrayErr != nil {
-		return nil, errors.Wrap(_readArrayErr, "Error parsing 'data' field of CALDataStatusExtended")
+
+	// Virtual field
+	_numberOfStatusBytes := utils.InlineIf((bool(bool((coding) == (StatusCoding_BINARY_BY_THIS_SERIAL_INTERFACE))) || bool(bool((coding) == (StatusCoding_BINARY_BY_ELSEWHERE)))), func() interface{} { return uint8((uint8(commandTypeContainer.NumBytes()) - uint8(uint8(3)))) }, func() interface{} { return uint8((uint8(0))) }).(uint8)
+	numberOfStatusBytes := uint8(_numberOfStatusBytes)
+	_ = numberOfStatusBytes
+
+	// Virtual field
+	_numberOfLevelInformation := utils.InlineIf((bool(bool((coding) == (StatusCoding_LEVEL_BY_THIS_SERIAL_INTERFACE))) || bool(bool((coding) == (StatusCoding_LEVEL_BY_ELSEWHERE)))), func() interface{} {
+		return uint8((uint8((uint8(commandTypeContainer.NumBytes()) - uint8(uint8(3)))) / uint8(uint8(2))))
+	}, func() interface{} { return uint8((uint8(0))) }).(uint8)
+	numberOfLevelInformation := uint8(_numberOfLevelInformation)
+	_ = numberOfLevelInformation
+
+	// Array field (statusBytes)
+	if pullErr := readBuffer.PullContext("statusBytes", utils.WithRenderAsList(true)); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for statusBytes")
+	}
+	// Count array
+	statusBytes := make([]StatusByte, numberOfStatusBytes)
+	// This happens when the size is set conditional to 0
+	if len(statusBytes) == 0 {
+		statusBytes = nil
+	}
+	{
+		for curItem := uint16(0); curItem < uint16(numberOfStatusBytes); curItem++ {
+			_item, _err := StatusByteParse(readBuffer)
+			if _err != nil {
+				return nil, errors.Wrap(_err, "Error parsing 'statusBytes' field of CALDataStatusExtended")
+			}
+			statusBytes[curItem] = _item.(StatusByte)
+		}
+	}
+	if closeErr := readBuffer.CloseContext("statusBytes", utils.WithRenderAsList(true)); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for statusBytes")
+	}
+
+	// Array field (levelInformation)
+	if pullErr := readBuffer.PullContext("levelInformation", utils.WithRenderAsList(true)); pullErr != nil {
+		return nil, errors.Wrap(pullErr, "Error pulling for levelInformation")
+	}
+	// Count array
+	levelInformation := make([]LevelInformation, numberOfLevelInformation)
+	// This happens when the size is set conditional to 0
+	if len(levelInformation) == 0 {
+		levelInformation = nil
+	}
+	{
+		for curItem := uint16(0); curItem < uint16(numberOfLevelInformation); curItem++ {
+			_item, _err := LevelInformationParse(readBuffer)
+			if _err != nil {
+				return nil, errors.Wrap(_err, "Error parsing 'levelInformation' field of CALDataStatusExtended")
+			}
+			levelInformation[curItem] = _item.(LevelInformation)
+		}
+	}
+	if closeErr := readBuffer.CloseContext("levelInformation", utils.WithRenderAsList(true)); closeErr != nil {
+		return nil, errors.Wrap(closeErr, "Error closing for levelInformation")
 	}
 
 	if closeErr := readBuffer.CloseContext("CALDataStatusExtended"); closeErr != nil {
@@ -280,10 +310,11 @@ func CALDataStatusExtendedParse(readBuffer utils.ReadBuffer, requestContext Requ
 
 	// Create a partially initialized instance
 	_child := &_CALDataStatusExtended{
-		Coding:      coding,
-		Application: application,
-		BlockStart:  blockStart,
-		Data:        data,
+		Coding:           coding,
+		Application:      application,
+		BlockStart:       blockStart,
+		StatusBytes:      statusBytes,
+		LevelInformation: levelInformation,
 		_CALData: &_CALData{
 			RequestContext: requestContext,
 		},
@@ -301,30 +332,15 @@ func (m *_CALDataStatusExtended) Serialize(writeBuffer utils.WriteBuffer) error
 		}
 
 		// Simple Field (coding)
-		coding := uint8(m.GetCoding())
-		_codingErr := writeBuffer.WriteUint8("coding", 8, (coding))
-		if _codingErr != nil {
-			return errors.Wrap(_codingErr, "Error serializing 'coding' field")
-		}
-		// Virtual field
-		if _isBinaryBySerialInterfaceErr := writeBuffer.WriteVirtual("isBinaryBySerialInterface", m.GetIsBinaryBySerialInterface()); _isBinaryBySerialInterfaceErr != nil {
-			return errors.Wrap(_isBinaryBySerialInterfaceErr, "Error serializing 'isBinaryBySerialInterface' field")
+		if pushErr := writeBuffer.PushContext("coding"); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for coding")
 		}
-		// Virtual field
-		if _isBinaryByElsewhereErr := writeBuffer.WriteVirtual("isBinaryByElsewhere", m.GetIsBinaryByElsewhere()); _isBinaryByElsewhereErr != nil {
-			return errors.Wrap(_isBinaryByElsewhereErr, "Error serializing 'isBinaryByElsewhere' field")
-		}
-		// Virtual field
-		if _isLevelBySerialInterfaceErr := writeBuffer.WriteVirtual("isLevelBySerialInterface", m.GetIsLevelBySerialInterface()); _isLevelBySerialInterfaceErr != nil {
-			return errors.Wrap(_isLevelBySerialInterfaceErr, "Error serializing 'isLevelBySerialInterface' field")
-		}
-		// Virtual field
-		if _isLevelByElsewhereErr := writeBuffer.WriteVirtual("isLevelByElsewhere", m.GetIsLevelByElsewhere()); _isLevelByElsewhereErr != nil {
-			return errors.Wrap(_isLevelByElsewhereErr, "Error serializing 'isLevelByElsewhere' field")
+		_codingErr := writeBuffer.WriteSerializable(m.GetCoding())
+		if popErr := writeBuffer.PopContext("coding"); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for coding")
 		}
-		// Virtual field
-		if _isReservedErr := writeBuffer.WriteVirtual("isReserved", m.GetIsReserved()); _isReservedErr != nil {
-			return errors.Wrap(_isReservedErr, "Error serializing 'isReserved' field")
+		if _codingErr != nil {
+			return errors.Wrap(_codingErr, "Error serializing 'coding' field")
 		}
 
 		// Simple Field (application)
@@ -345,11 +361,41 @@ func (m *_CALDataStatusExtended) Serialize(writeBuffer utils.WriteBuffer) error
 		if _blockStartErr != nil {
 			return errors.Wrap(_blockStartErr, "Error serializing 'blockStart' field")
 		}
+		// Virtual field
+		if _numberOfStatusBytesErr := writeBuffer.WriteVirtual("numberOfStatusBytes", m.GetNumberOfStatusBytes()); _numberOfStatusBytesErr != nil {
+			return errors.Wrap(_numberOfStatusBytesErr, "Error serializing 'numberOfStatusBytes' field")
+		}
+		// Virtual field
+		if _numberOfLevelInformationErr := writeBuffer.WriteVirtual("numberOfLevelInformation", m.GetNumberOfLevelInformation()); _numberOfLevelInformationErr != nil {
+			return errors.Wrap(_numberOfLevelInformationErr, "Error serializing 'numberOfLevelInformation' field")
+		}
 
-		// Array Field (data)
-		// Byte Array field (data)
-		if err := writeBuffer.WriteByteArray("data", m.GetData()); err != nil {
-			return errors.Wrap(err, "Error serializing 'data' field")
+		// Array Field (statusBytes)
+		if pushErr := writeBuffer.PushContext("statusBytes", utils.WithRenderAsList(true)); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for statusBytes")
+		}
+		for _, _element := range m.GetStatusBytes() {
+			_elementErr := writeBuffer.WriteSerializable(_element)
+			if _elementErr != nil {
+				return errors.Wrap(_elementErr, "Error serializing 'statusBytes' field")
+			}
+		}
+		if popErr := writeBuffer.PopContext("statusBytes", utils.WithRenderAsList(true)); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for statusBytes")
+		}
+
+		// Array Field (levelInformation)
+		if pushErr := writeBuffer.PushContext("levelInformation", utils.WithRenderAsList(true)); pushErr != nil {
+			return errors.Wrap(pushErr, "Error pushing for levelInformation")
+		}
+		for _, _element := range m.GetLevelInformation() {
+			_elementErr := writeBuffer.WriteSerializable(_element)
+			if _elementErr != nil {
+				return errors.Wrap(_elementErr, "Error serializing 'levelInformation' field")
+			}
+		}
+		if popErr := writeBuffer.PopContext("levelInformation", utils.WithRenderAsList(true)); popErr != nil {
+			return errors.Wrap(popErr, "Error popping for levelInformation")
 		}
 
 		if popErr := writeBuffer.PopContext("CALDataStatusExtended"); popErr != nil {
diff --git a/plc4go/protocols/cbus/readwrite/model/EncodedReply.go b/plc4go/protocols/cbus/readwrite/model/EncodedReply.go
index 3a529df1e..74ff28eac 100644
--- a/plc4go/protocols/cbus/readwrite/model/EncodedReply.go
+++ b/plc4go/protocols/cbus/readwrite/model/EncodedReply.go
@@ -34,12 +34,6 @@ type EncodedReply interface {
 	GetPeekedByte() byte
 	// GetIsMonitoredSAL returns IsMonitoredSAL (virtual field)
 	GetIsMonitoredSAL() bool
-	// GetIsCalCommand returns IsCalCommand (virtual field)
-	GetIsCalCommand() bool
-	// GetIsStandardFormatStatus returns IsStandardFormatStatus (virtual field)
-	GetIsStandardFormatStatus() bool
-	// GetIsExtendedFormatStatus returns IsExtendedFormatStatus (virtual field)
-	GetIsExtendedFormatStatus() bool
 }
 
 // EncodedReplyExactly can be used when we want exactly this type and not a type which fulfills EncodedReply.
@@ -98,19 +92,7 @@ func (m *_EncodedReply) GetPeekedByte() byte {
 ///////////////////////
 
 func (m *_EncodedReply) GetIsMonitoredSAL() bool {
-	return bool(bool(bool(bool((m.GetPeekedByte()&0x3F) == (0x05))) || bool(bool((m.GetPeekedByte()) == (0x00)))) || bool(bool((m.GetPeekedByte()&0xF8) == (0x00))))
-}
-
-func (m *_EncodedReply) GetIsCalCommand() bool {
-	return bool(bool(bool((m.GetPeekedByte()&0x3F) == (0x06))) || bool(m.RequestContext.GetSendCalCommandBefore()))
-}
-
-func (m *_EncodedReply) GetIsStandardFormatStatus() bool {
-	return bool(bool(bool((m.GetPeekedByte()&0xC0) == (0xC0))) && bool(!(m.CBusOptions.GetExstat())))
-}
-
-func (m *_EncodedReply) GetIsExtendedFormatStatus() bool {
-	return bool(bool(bool((m.GetPeekedByte()&0xE0) == (0xE0))) && bool((bool(m.CBusOptions.GetExstat()) || bool(m.RequestContext.GetSendStatusRequestLevelBefore()))))
+	return bool(bool((bool(bool(bool((m.GetPeekedByte()&0x3F) == (0x05))) || bool(bool((m.GetPeekedByte()) == (0x00)))) || bool(bool((m.GetPeekedByte()&0xF8) == (0x00))))) && bool(!(m.RequestContext.GetSendIdentifyRequestBefore())))
 }
 
 ///////////////////////
@@ -143,12 +125,6 @@ func (m *_EncodedReply) GetParentLengthInBits() 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.
-
-	// A virtual field doesn't have any in- or output.
-
 	return lengthInBits
 }
 
@@ -175,25 +151,10 @@ func EncodedReplyParse(readBuffer utils.ReadBuffer, cBusOptions CBusOptions, req
 	readBuffer.Reset(currentPos)
 
 	// Virtual field
-	_isMonitoredSAL := bool(bool(bool((peekedByte&0x3F) == (0x05))) || bool(bool((peekedByte) == (0x00)))) || bool(bool((peekedByte&0xF8) == (0x00)))
+	_isMonitoredSAL := bool((bool(bool(bool((peekedByte&0x3F) == (0x05))) || bool(bool((peekedByte) == (0x00)))) || bool(bool((peekedByte&0xF8) == (0x00))))) && bool(!(requestContext.GetSendIdentifyRequestBefore()))
 	isMonitoredSAL := bool(_isMonitoredSAL)
 	_ = isMonitoredSAL
 
-	// Virtual field
-	_isCalCommand := bool(bool((peekedByte&0x3F) == (0x06))) || bool(requestContext.GetSendCalCommandBefore())
-	isCalCommand := bool(_isCalCommand)
-	_ = isCalCommand
-
-	// Virtual field
-	_isStandardFormatStatus := bool(bool((peekedByte&0xC0) == (0xC0))) && bool(!(cBusOptions.GetExstat()))
-	isStandardFormatStatus := bool(_isStandardFormatStatus)
-	_ = isStandardFormatStatus
-
-	// Virtual field
-	_isExtendedFormatStatus := bool(bool((peekedByte&0xE0) == (0xE0))) && bool((bool(cBusOptions.GetExstat()) || bool(requestContext.GetSendStatusRequestLevelBefore())))
-	isExtendedFormatStatus := bool(_isExtendedFormatStatus)
-	_ = isExtendedFormatStatus
-
 	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
 	type EncodedReplyChildSerializeRequirement interface {
 		EncodedReply
@@ -204,16 +165,12 @@ func EncodedReplyParse(readBuffer utils.ReadBuffer, cBusOptions CBusOptions, req
 	var _child EncodedReplyChildSerializeRequirement
 	var typeSwitchError error
 	switch {
-	case isMonitoredSAL == bool(true) && isCalCommand == bool(false) && isStandardFormatStatus == bool(false): // MonitoredSALReply
+	case isMonitoredSAL == bool(true): // MonitoredSALReply
 		_childTemp, typeSwitchError = MonitoredSALReplyParse(readBuffer, cBusOptions, requestContext)
-	case 0 == 0 && 1 == 1 && isStandardFormatStatus == bool(true) && isExtendedFormatStatus == bool(false): // EncodedReplyStandardFormatStatusReply
-		_childTemp, typeSwitchError = EncodedReplyStandardFormatStatusReplyParse(readBuffer, cBusOptions, requestContext)
-	case 0 == 0 && 1 == 1 && 2 == 2 && isExtendedFormatStatus == bool(true): // EncodedReplyExtendedFormatStatusReply
-		_childTemp, typeSwitchError = EncodedReplyExtendedFormatStatusReplyParse(readBuffer, cBusOptions, requestContext)
-	case 0 == 0 && isCalCommand == bool(true) && 2 == 2 && 3 == 3: // EncodedReplyCALReply
+	case 0 == 0: // EncodedReplyCALReply
 		_childTemp, typeSwitchError = EncodedReplyCALReplyParse(readBuffer, cBusOptions, requestContext)
 	default:
-		typeSwitchError = errors.Errorf("Unmapped type for parameters [isMonitoredSAL=%v, isCalCommand=%v, isStandardFormatStatus=%v, isExtendedFormatStatus=%v]", isMonitoredSAL, isCalCommand, isStandardFormatStatus, isExtendedFormatStatus)
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [isMonitoredSAL=%v]", isMonitoredSAL)
 	}
 	if typeSwitchError != nil {
 		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of EncodedReply")
@@ -242,18 +199,6 @@ func (pm *_EncodedReply) SerializeParent(writeBuffer utils.WriteBuffer, child En
 	if _isMonitoredSALErr := writeBuffer.WriteVirtual("isMonitoredSAL", m.GetIsMonitoredSAL()); _isMonitoredSALErr != nil {
 		return errors.Wrap(_isMonitoredSALErr, "Error serializing 'isMonitoredSAL' field")
 	}
-	// Virtual field
-	if _isCalCommandErr := writeBuffer.WriteVirtual("isCalCommand", m.GetIsCalCommand()); _isCalCommandErr != nil {
-		return errors.Wrap(_isCalCommandErr, "Error serializing 'isCalCommand' field")
-	}
-	// Virtual field
-	if _isStandardFormatStatusErr := writeBuffer.WriteVirtual("isStandardFormatStatus", m.GetIsStandardFormatStatus()); _isStandardFormatStatusErr != nil {
-		return errors.Wrap(_isStandardFormatStatusErr, "Error serializing 'isStandardFormatStatus' field")
-	}
-	// Virtual field
-	if _isExtendedFormatStatusErr := writeBuffer.WriteVirtual("isExtendedFormatStatus", m.GetIsExtendedFormatStatus()); _isExtendedFormatStatusErr != nil {
-		return errors.Wrap(_isExtendedFormatStatusErr, "Error serializing 'isExtendedFormatStatus' field")
-	}
 
 	// Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
 	if _typeSwitchErr := serializeChildFunction(); _typeSwitchErr != nil {
diff --git a/plc4go/protocols/cbus/readwrite/model/EncodedReplyExtendedFormatStatusReply.go b/plc4go/protocols/cbus/readwrite/model/EncodedReplyExtendedFormatStatusReply.go
deleted file mode 100644
index bac1c7107..000000000
--- a/plc4go/protocols/cbus/readwrite/model/EncodedReplyExtendedFormatStatusReply.go
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * 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
- *
- *   https://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/spi/utils"
-	"github.com/pkg/errors"
-)
-
-// Code generated by code-generation. DO NOT EDIT.
-
-// EncodedReplyExtendedFormatStatusReply is the corresponding interface of EncodedReplyExtendedFormatStatusReply
-type EncodedReplyExtendedFormatStatusReply interface {
-	utils.LengthAware
-	utils.Serializable
-	EncodedReply
-	// GetReply returns Reply (property field)
-	GetReply() ExtendedFormatStatusReply
-}
-
-// EncodedReplyExtendedFormatStatusReplyExactly can be used when we want exactly this type and not a type which fulfills EncodedReplyExtendedFormatStatusReply.
-// This is useful for switch cases.
-type EncodedReplyExtendedFormatStatusReplyExactly interface {
-	EncodedReplyExtendedFormatStatusReply
-	isEncodedReplyExtendedFormatStatusReply() bool
-}
-
-// _EncodedReplyExtendedFormatStatusReply is the data-structure of this message
-type _EncodedReplyExtendedFormatStatusReply struct {
-	*_EncodedReply
-	Reply ExtendedFormatStatusReply
-}
-
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/////////////////////// Accessors for discriminator values.
-///////////////////////
-
-///////////////////////
-///////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-
-func (m *_EncodedReplyExtendedFormatStatusReply) InitializeParent(parent EncodedReply, peekedByte byte) {
-	m.PeekedByte = peekedByte
-}
-
-func (m *_EncodedReplyExtendedFormatStatusReply) GetParent() EncodedReply {
-	return m._EncodedReply
-}
-
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/////////////////////// Accessors for property fields.
-///////////////////////
-
-func (m *_EncodedReplyExtendedFormatStatusReply) GetReply() ExtendedFormatStatusReply {
-	return m.Reply
-}
-
-///////////////////////
-///////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-
-// NewEncodedReplyExtendedFormatStatusReply factory function for _EncodedReplyExtendedFormatStatusReply
-func NewEncodedReplyExtendedFormatStatusReply(reply ExtendedFormatStatusReply, peekedByte byte, cBusOptions CBusOptions, requestContext RequestContext) *_EncodedReplyExtendedFormatStatusReply {
-	_result := &_EncodedReplyExtendedFormatStatusReply{
-		Reply:         reply,
-		_EncodedReply: NewEncodedReply(peekedByte, cBusOptions, requestContext),
-	}
-	_result._EncodedReply._EncodedReplyChildRequirements = _result
-	return _result
-}
-
-// Deprecated: use the interface for direct cast
-func CastEncodedReplyExtendedFormatStatusReply(structType interface{}) EncodedReplyExtendedFormatStatusReply {
-	if casted, ok := structType.(EncodedReplyExtendedFormatStatusReply); ok {
-		return casted
-	}
-	if casted, ok := structType.(*EncodedReplyExtendedFormatStatusReply); ok {
-		return *casted
-	}
-	return nil
-}
-
-func (m *_EncodedReplyExtendedFormatStatusReply) GetTypeName() string {
-	return "EncodedReplyExtendedFormatStatusReply"
-}
-
-func (m *_EncodedReplyExtendedFormatStatusReply) GetLengthInBits() uint16 {
-	return m.GetLengthInBitsConditional(false)
-}
-
-func (m *_EncodedReplyExtendedFormatStatusReply) GetLengthInBitsConditional(lastItem bool) uint16 {
-	lengthInBits := uint16(m.GetParentLengthInBits())
-
-	// Simple field (reply)
-	lengthInBits += m.Reply.GetLengthInBits()
-
-	return lengthInBits
-}
-
-func (m *_EncodedReplyExtendedFormatStatusReply) GetLengthInBytes() uint16 {
-	return m.GetLengthInBits() / 8
-}
-
-func EncodedReplyExtendedFormatStatusReplyParse(readBuffer utils.ReadBuffer, cBusOptions CBusOptions, requestContext RequestContext) (EncodedReplyExtendedFormatStatusReply, error) {
-	positionAware := readBuffer
-	_ = positionAware
-	if pullErr := readBuffer.PullContext("EncodedReplyExtendedFormatStatusReply"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for EncodedReplyExtendedFormatStatusReply")
-	}
-	currentPos := positionAware.GetPos()
-	_ = currentPos
-
-	// Simple Field (reply)
-	if pullErr := readBuffer.PullContext("reply"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for reply")
-	}
-	_reply, _replyErr := ExtendedFormatStatusReplyParse(readBuffer)
-	if _replyErr != nil {
-		return nil, errors.Wrap(_replyErr, "Error parsing 'reply' field of EncodedReplyExtendedFormatStatusReply")
-	}
-	reply := _reply.(ExtendedFormatStatusReply)
-	if closeErr := readBuffer.CloseContext("reply"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for reply")
-	}
-
-	if closeErr := readBuffer.CloseContext("EncodedReplyExtendedFormatStatusReply"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for EncodedReplyExtendedFormatStatusReply")
-	}
-
-	// Create a partially initialized instance
-	_child := &_EncodedReplyExtendedFormatStatusReply{
-		Reply: reply,
-		_EncodedReply: &_EncodedReply{
-			CBusOptions:    cBusOptions,
-			RequestContext: requestContext,
-		},
-	}
-	_child._EncodedReply._EncodedReplyChildRequirements = _child
-	return _child, nil
-}
-
-func (m *_EncodedReplyExtendedFormatStatusReply) Serialize(writeBuffer utils.WriteBuffer) error {
-	positionAware := writeBuffer
-	_ = positionAware
-	ser := func() error {
-		if pushErr := writeBuffer.PushContext("EncodedReplyExtendedFormatStatusReply"); pushErr != nil {
-			return errors.Wrap(pushErr, "Error pushing for EncodedReplyExtendedFormatStatusReply")
-		}
-
-		// Simple Field (reply)
-		if pushErr := writeBuffer.PushContext("reply"); pushErr != nil {
-			return errors.Wrap(pushErr, "Error pushing for reply")
-		}
-		_replyErr := writeBuffer.WriteSerializable(m.GetReply())
-		if popErr := writeBuffer.PopContext("reply"); popErr != nil {
-			return errors.Wrap(popErr, "Error popping for reply")
-		}
-		if _replyErr != nil {
-			return errors.Wrap(_replyErr, "Error serializing 'reply' field")
-		}
-
-		if popErr := writeBuffer.PopContext("EncodedReplyExtendedFormatStatusReply"); popErr != nil {
-			return errors.Wrap(popErr, "Error popping for EncodedReplyExtendedFormatStatusReply")
-		}
-		return nil
-	}
-	return m.SerializeParent(writeBuffer, m, ser)
-}
-
-func (m *_EncodedReplyExtendedFormatStatusReply) isEncodedReplyExtendedFormatStatusReply() bool {
-	return true
-}
-
-func (m *_EncodedReplyExtendedFormatStatusReply) String() string {
-	if m == nil {
-		return "<nil>"
-	}
-	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
-	if err := writeBuffer.WriteSerializable(m); err != nil {
-		return err.Error()
-	}
-	return writeBuffer.GetBox().String()
-}
diff --git a/plc4go/protocols/cbus/readwrite/model/EncodedReplyStandardFormatStatusReply.go b/plc4go/protocols/cbus/readwrite/model/EncodedReplyStandardFormatStatusReply.go
deleted file mode 100644
index 303c836b3..000000000
--- a/plc4go/protocols/cbus/readwrite/model/EncodedReplyStandardFormatStatusReply.go
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * 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
- *
- *   https://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/spi/utils"
-	"github.com/pkg/errors"
-)
-
-// Code generated by code-generation. DO NOT EDIT.
-
-// EncodedReplyStandardFormatStatusReply is the corresponding interface of EncodedReplyStandardFormatStatusReply
-type EncodedReplyStandardFormatStatusReply interface {
-	utils.LengthAware
-	utils.Serializable
-	EncodedReply
-	// GetReply returns Reply (property field)
-	GetReply() StandardFormatStatusReply
-}
-
-// EncodedReplyStandardFormatStatusReplyExactly can be used when we want exactly this type and not a type which fulfills EncodedReplyStandardFormatStatusReply.
-// This is useful for switch cases.
-type EncodedReplyStandardFormatStatusReplyExactly interface {
-	EncodedReplyStandardFormatStatusReply
-	isEncodedReplyStandardFormatStatusReply() bool
-}
-
-// _EncodedReplyStandardFormatStatusReply is the data-structure of this message
-type _EncodedReplyStandardFormatStatusReply struct {
-	*_EncodedReply
-	Reply StandardFormatStatusReply
-}
-
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/////////////////////// Accessors for discriminator values.
-///////////////////////
-
-///////////////////////
-///////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-
-func (m *_EncodedReplyStandardFormatStatusReply) InitializeParent(parent EncodedReply, peekedByte byte) {
-	m.PeekedByte = peekedByte
-}
-
-func (m *_EncodedReplyStandardFormatStatusReply) GetParent() EncodedReply {
-	return m._EncodedReply
-}
-
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/////////////////////// Accessors for property fields.
-///////////////////////
-
-func (m *_EncodedReplyStandardFormatStatusReply) GetReply() StandardFormatStatusReply {
-	return m.Reply
-}
-
-///////////////////////
-///////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-
-// NewEncodedReplyStandardFormatStatusReply factory function for _EncodedReplyStandardFormatStatusReply
-func NewEncodedReplyStandardFormatStatusReply(reply StandardFormatStatusReply, peekedByte byte, cBusOptions CBusOptions, requestContext RequestContext) *_EncodedReplyStandardFormatStatusReply {
-	_result := &_EncodedReplyStandardFormatStatusReply{
-		Reply:         reply,
-		_EncodedReply: NewEncodedReply(peekedByte, cBusOptions, requestContext),
-	}
-	_result._EncodedReply._EncodedReplyChildRequirements = _result
-	return _result
-}
-
-// Deprecated: use the interface for direct cast
-func CastEncodedReplyStandardFormatStatusReply(structType interface{}) EncodedReplyStandardFormatStatusReply {
-	if casted, ok := structType.(EncodedReplyStandardFormatStatusReply); ok {
-		return casted
-	}
-	if casted, ok := structType.(*EncodedReplyStandardFormatStatusReply); ok {
-		return *casted
-	}
-	return nil
-}
-
-func (m *_EncodedReplyStandardFormatStatusReply) GetTypeName() string {
-	return "EncodedReplyStandardFormatStatusReply"
-}
-
-func (m *_EncodedReplyStandardFormatStatusReply) GetLengthInBits() uint16 {
-	return m.GetLengthInBitsConditional(false)
-}
-
-func (m *_EncodedReplyStandardFormatStatusReply) GetLengthInBitsConditional(lastItem bool) uint16 {
-	lengthInBits := uint16(m.GetParentLengthInBits())
-
-	// Simple field (reply)
-	lengthInBits += m.Reply.GetLengthInBits()
-
-	return lengthInBits
-}
-
-func (m *_EncodedReplyStandardFormatStatusReply) GetLengthInBytes() uint16 {
-	return m.GetLengthInBits() / 8
-}
-
-func EncodedReplyStandardFormatStatusReplyParse(readBuffer utils.ReadBuffer, cBusOptions CBusOptions, requestContext RequestContext) (EncodedReplyStandardFormatStatusReply, error) {
-	positionAware := readBuffer
-	_ = positionAware
-	if pullErr := readBuffer.PullContext("EncodedReplyStandardFormatStatusReply"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for EncodedReplyStandardFormatStatusReply")
-	}
-	currentPos := positionAware.GetPos()
-	_ = currentPos
-
-	// Simple Field (reply)
-	if pullErr := readBuffer.PullContext("reply"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for reply")
-	}
-	_reply, _replyErr := StandardFormatStatusReplyParse(readBuffer)
-	if _replyErr != nil {
-		return nil, errors.Wrap(_replyErr, "Error parsing 'reply' field of EncodedReplyStandardFormatStatusReply")
-	}
-	reply := _reply.(StandardFormatStatusReply)
-	if closeErr := readBuffer.CloseContext("reply"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for reply")
-	}
-
-	if closeErr := readBuffer.CloseContext("EncodedReplyStandardFormatStatusReply"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for EncodedReplyStandardFormatStatusReply")
-	}
-
-	// Create a partially initialized instance
-	_child := &_EncodedReplyStandardFormatStatusReply{
-		Reply: reply,
-		_EncodedReply: &_EncodedReply{
-			CBusOptions:    cBusOptions,
-			RequestContext: requestContext,
-		},
-	}
-	_child._EncodedReply._EncodedReplyChildRequirements = _child
-	return _child, nil
-}
-
-func (m *_EncodedReplyStandardFormatStatusReply) Serialize(writeBuffer utils.WriteBuffer) error {
-	positionAware := writeBuffer
-	_ = positionAware
-	ser := func() error {
-		if pushErr := writeBuffer.PushContext("EncodedReplyStandardFormatStatusReply"); pushErr != nil {
-			return errors.Wrap(pushErr, "Error pushing for EncodedReplyStandardFormatStatusReply")
-		}
-
-		// Simple Field (reply)
-		if pushErr := writeBuffer.PushContext("reply"); pushErr != nil {
-			return errors.Wrap(pushErr, "Error pushing for reply")
-		}
-		_replyErr := writeBuffer.WriteSerializable(m.GetReply())
-		if popErr := writeBuffer.PopContext("reply"); popErr != nil {
-			return errors.Wrap(popErr, "Error popping for reply")
-		}
-		if _replyErr != nil {
-			return errors.Wrap(_replyErr, "Error serializing 'reply' field")
-		}
-
-		if popErr := writeBuffer.PopContext("EncodedReplyStandardFormatStatusReply"); popErr != nil {
-			return errors.Wrap(popErr, "Error popping for EncodedReplyStandardFormatStatusReply")
-		}
-		return nil
-	}
-	return m.SerializeParent(writeBuffer, m, ser)
-}
-
-func (m *_EncodedReplyStandardFormatStatusReply) isEncodedReplyStandardFormatStatusReply() bool {
-	return true
-}
-
-func (m *_EncodedReplyStandardFormatStatusReply) String() string {
-	if m == nil {
-		return "<nil>"
-	}
-	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
-	if err := writeBuffer.WriteSerializable(m); err != nil {
-		return err.Error()
-	}
-	return writeBuffer.GetBox().String()
-}
diff --git a/plc4go/protocols/cbus/readwrite/model/ExtendedFormatStatusReply.go b/plc4go/protocols/cbus/readwrite/model/ExtendedFormatStatusReply.go
deleted file mode 100644
index 1a8df7e66..000000000
--- a/plc4go/protocols/cbus/readwrite/model/ExtendedFormatStatusReply.go
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
- * 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
- *
- *   https://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/spi/utils"
-	"github.com/pkg/errors"
-)
-
-// Code generated by code-generation. DO NOT EDIT.
-
-// ExtendedFormatStatusReply is the corresponding interface of ExtendedFormatStatusReply
-type ExtendedFormatStatusReply interface {
-	utils.LengthAware
-	utils.Serializable
-	// GetStatusHeader returns StatusHeader (property field)
-	GetStatusHeader() ExtendedStatusHeader
-	// GetCoding returns Coding (property field)
-	GetCoding() StatusCoding
-	// GetApplication returns Application (property field)
-	GetApplication() ApplicationIdContainer
-	// GetBlockStart returns BlockStart (property field)
-	GetBlockStart() uint8
-	// GetStatusBytes returns StatusBytes (property field)
-	GetStatusBytes() []StatusByte
-	// GetLevelInformation returns LevelInformation (property field)
-	GetLevelInformation() []LevelInformation
-	// GetNumberOfStatusBytes returns NumberOfStatusBytes (virtual field)
-	GetNumberOfStatusBytes() uint8
-	// GetNumberOfLevelInformation returns NumberOfLevelInformation (virtual field)
-	GetNumberOfLevelInformation() uint8
-}
-
-// ExtendedFormatStatusReplyExactly can be used when we want exactly this type and not a type which fulfills ExtendedFormatStatusReply.
-// This is useful for switch cases.
-type ExtendedFormatStatusReplyExactly interface {
-	ExtendedFormatStatusReply
-	isExtendedFormatStatusReply() bool
-}
-
-// _ExtendedFormatStatusReply is the data-structure of this message
-type _ExtendedFormatStatusReply struct {
-	StatusHeader     ExtendedStatusHeader
-	Coding           StatusCoding
-	Application      ApplicationIdContainer
-	BlockStart       uint8
-	StatusBytes      []StatusByte
-	LevelInformation []LevelInformation
-}
-
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/////////////////////// Accessors for property fields.
-///////////////////////
-
-func (m *_ExtendedFormatStatusReply) GetStatusHeader() ExtendedStatusHeader {
-	return m.StatusHeader
-}
-
-func (m *_ExtendedFormatStatusReply) GetCoding() StatusCoding {
-	return m.Coding
-}
-
-func (m *_ExtendedFormatStatusReply) GetApplication() ApplicationIdContainer {
-	return m.Application
-}
-
-func (m *_ExtendedFormatStatusReply) GetBlockStart() uint8 {
-	return m.BlockStart
-}
-
-func (m *_ExtendedFormatStatusReply) GetStatusBytes() []StatusByte {
-	return m.StatusBytes
-}
-
-func (m *_ExtendedFormatStatusReply) GetLevelInformation() []LevelInformation {
-	return m.LevelInformation
-}
-
-///////////////////////
-///////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/////////////////////// Accessors for virtual fields.
-///////////////////////
-
-func (m *_ExtendedFormatStatusReply) GetNumberOfStatusBytes() uint8 {
-	return uint8(utils.InlineIf((bool(bool((m.GetCoding()) == (StatusCoding_BINARY_BY_THIS_SERIAL_INTERFACE))) || bool(bool((m.GetCoding()) == (StatusCoding_BINARY_BY_ELSEWHERE)))), func() interface{} {
-		return uint8((uint8(m.GetStatusHeader().GetNumberOfCharacterPairs()) - uint8(uint8(3))))
-	}, func() interface{} { return uint8((uint8(0))) }).(uint8))
-}
-
-func (m *_ExtendedFormatStatusReply) GetNumberOfLevelInformation() uint8 {
-	return uint8(utils.InlineIf((bool(bool((m.GetCoding()) == (StatusCoding_LEVEL_BY_THIS_SERIAL_INTERFACE))) || bool(bool((m.GetCoding()) == (StatusCoding_LEVEL_BY_ELSEWHERE)))), func() interface{} {
-		return uint8((uint8((uint8(m.GetStatusHeader().GetNumberOfCharacterPairs()) - uint8(uint8(3)))) / uint8(uint8(2))))
-	}, func() interface{} { return uint8((uint8(0))) }).(uint8))
-}
-
-///////////////////////
-///////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-
-// NewExtendedFormatStatusReply factory function for _ExtendedFormatStatusReply
-func NewExtendedFormatStatusReply(statusHeader ExtendedStatusHeader, coding StatusCoding, application ApplicationIdContainer, blockStart uint8, statusBytes []StatusByte, levelInformation []LevelInformation) *_ExtendedFormatStatusReply {
-	return &_ExtendedFormatStatusReply{StatusHeader: statusHeader, Coding: coding, Application: application, BlockStart: blockStart, StatusBytes: statusBytes, LevelInformation: levelInformation}
-}
-
-// Deprecated: use the interface for direct cast
-func CastExtendedFormatStatusReply(structType interface{}) ExtendedFormatStatusReply {
-	if casted, ok := structType.(ExtendedFormatStatusReply); ok {
-		return casted
-	}
-	if casted, ok := structType.(*ExtendedFormatStatusReply); ok {
-		return *casted
-	}
-	return nil
-}
-
-func (m *_ExtendedFormatStatusReply) GetTypeName() string {
-	return "ExtendedFormatStatusReply"
-}
-
-func (m *_ExtendedFormatStatusReply) GetLengthInBits() uint16 {
-	return m.GetLengthInBitsConditional(false)
-}
-
-func (m *_ExtendedFormatStatusReply) GetLengthInBitsConditional(lastItem bool) uint16 {
-	lengthInBits := uint16(0)
-
-	// Simple field (statusHeader)
-	lengthInBits += m.StatusHeader.GetLengthInBits()
-
-	// Simple field (coding)
-	lengthInBits += 8
-
-	// Simple field (application)
-	lengthInBits += 8
-
-	// Simple field (blockStart)
-	lengthInBits += 8
-
-	// A virtual field doesn't have any in- or output.
-
-	// A virtual field doesn't have any in- or output.
-
-	// Array field
-	if len(m.StatusBytes) > 0 {
-		for i, element := range m.StatusBytes {
-			last := i == len(m.StatusBytes)-1
-			lengthInBits += element.(interface{ GetLengthInBitsConditional(bool) uint16 }).GetLengthInBitsConditional(last)
-		}
-	}
-
-	// Array field
-	if len(m.LevelInformation) > 0 {
-		for i, element := range m.LevelInformation {
-			last := i == len(m.LevelInformation)-1
-			lengthInBits += element.(interface{ GetLengthInBitsConditional(bool) uint16 }).GetLengthInBitsConditional(last)
-		}
-	}
-
-	return lengthInBits
-}
-
-func (m *_ExtendedFormatStatusReply) GetLengthInBytes() uint16 {
-	return m.GetLengthInBits() / 8
-}
-
-func ExtendedFormatStatusReplyParse(readBuffer utils.ReadBuffer) (ExtendedFormatStatusReply, error) {
-	positionAware := readBuffer
-	_ = positionAware
-	if pullErr := readBuffer.PullContext("ExtendedFormatStatusReply"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for ExtendedFormatStatusReply")
-	}
-	currentPos := positionAware.GetPos()
-	_ = currentPos
-
-	// Simple Field (statusHeader)
-	if pullErr := readBuffer.PullContext("statusHeader"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for statusHeader")
-	}
-	_statusHeader, _statusHeaderErr := ExtendedStatusHeaderParse(readBuffer)
-	if _statusHeaderErr != nil {
-		return nil, errors.Wrap(_statusHeaderErr, "Error parsing 'statusHeader' field of ExtendedFormatStatusReply")
-	}
-	statusHeader := _statusHeader.(ExtendedStatusHeader)
-	if closeErr := readBuffer.CloseContext("statusHeader"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for statusHeader")
-	}
-
-	// Simple Field (coding)
-	if pullErr := readBuffer.PullContext("coding"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for coding")
-	}
-	_coding, _codingErr := StatusCodingParse(readBuffer)
-	if _codingErr != nil {
-		return nil, errors.Wrap(_codingErr, "Error parsing 'coding' field of ExtendedFormatStatusReply")
-	}
-	coding := _coding
-	if closeErr := readBuffer.CloseContext("coding"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for coding")
-	}
-
-	// Simple Field (application)
-	if pullErr := readBuffer.PullContext("application"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for application")
-	}
-	_application, _applicationErr := ApplicationIdContainerParse(readBuffer)
-	if _applicationErr != nil {
-		return nil, errors.Wrap(_applicationErr, "Error parsing 'application' field of ExtendedFormatStatusReply")
-	}
-	application := _application
-	if closeErr := readBuffer.CloseContext("application"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for application")
-	}
-
-	// Simple Field (blockStart)
-	_blockStart, _blockStartErr := readBuffer.ReadUint8("blockStart", 8)
-	if _blockStartErr != nil {
-		return nil, errors.Wrap(_blockStartErr, "Error parsing 'blockStart' field of ExtendedFormatStatusReply")
-	}
-	blockStart := _blockStart
-
-	// Virtual field
-	_numberOfStatusBytes := utils.InlineIf((bool(bool((coding) == (StatusCoding_BINARY_BY_THIS_SERIAL_INTERFACE))) || bool(bool((coding) == (StatusCoding_BINARY_BY_ELSEWHERE)))), func() interface{} { return uint8((uint8(statusHeader.GetNumberOfCharacterPairs()) - uint8(uint8(3)))) }, func() interface{} { return uint8((uint8(0))) }).(uint8)
-	numberOfStatusBytes := uint8(_numberOfStatusBytes)
-	_ = numberOfStatusBytes
-
-	// Virtual field
-	_numberOfLevelInformation := utils.InlineIf((bool(bool((coding) == (StatusCoding_LEVEL_BY_THIS_SERIAL_INTERFACE))) || bool(bool((coding) == (StatusCoding_LEVEL_BY_ELSEWHERE)))), func() interface{} {
-		return uint8((uint8((uint8(statusHeader.GetNumberOfCharacterPairs()) - uint8(uint8(3)))) / uint8(uint8(2))))
-	}, func() interface{} { return uint8((uint8(0))) }).(uint8)
-	numberOfLevelInformation := uint8(_numberOfLevelInformation)
-	_ = numberOfLevelInformation
-
-	// Array field (statusBytes)
-	if pullErr := readBuffer.PullContext("statusBytes", utils.WithRenderAsList(true)); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for statusBytes")
-	}
-	// Count array
-	statusBytes := make([]StatusByte, numberOfStatusBytes)
-	// This happens when the size is set conditional to 0
-	if len(statusBytes) == 0 {
-		statusBytes = nil
-	}
-	{
-		for curItem := uint16(0); curItem < uint16(numberOfStatusBytes); curItem++ {
-			_item, _err := StatusByteParse(readBuffer)
-			if _err != nil {
-				return nil, errors.Wrap(_err, "Error parsing 'statusBytes' field of ExtendedFormatStatusReply")
-			}
-			statusBytes[curItem] = _item.(StatusByte)
-		}
-	}
-	if closeErr := readBuffer.CloseContext("statusBytes", utils.WithRenderAsList(true)); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for statusBytes")
-	}
-
-	// Array field (levelInformation)
-	if pullErr := readBuffer.PullContext("levelInformation", utils.WithRenderAsList(true)); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for levelInformation")
-	}
-	// Count array
-	levelInformation := make([]LevelInformation, numberOfLevelInformation)
-	// This happens when the size is set conditional to 0
-	if len(levelInformation) == 0 {
-		levelInformation = nil
-	}
-	{
-		for curItem := uint16(0); curItem < uint16(numberOfLevelInformation); curItem++ {
-			_item, _err := LevelInformationParse(readBuffer)
-			if _err != nil {
-				return nil, errors.Wrap(_err, "Error parsing 'levelInformation' field of ExtendedFormatStatusReply")
-			}
-			levelInformation[curItem] = _item.(LevelInformation)
-		}
-	}
-	if closeErr := readBuffer.CloseContext("levelInformation", utils.WithRenderAsList(true)); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for levelInformation")
-	}
-
-	if closeErr := readBuffer.CloseContext("ExtendedFormatStatusReply"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for ExtendedFormatStatusReply")
-	}
-
-	// Create the instance
-	return NewExtendedFormatStatusReply(statusHeader, coding, application, blockStart, statusBytes, levelInformation), nil
-}
-
-func (m *_ExtendedFormatStatusReply) Serialize(writeBuffer utils.WriteBuffer) error {
-	positionAware := writeBuffer
-	_ = positionAware
-	if pushErr := writeBuffer.PushContext("ExtendedFormatStatusReply"); pushErr != nil {
-		return errors.Wrap(pushErr, "Error pushing for ExtendedFormatStatusReply")
-	}
-
-	// Simple Field (statusHeader)
-	if pushErr := writeBuffer.PushContext("statusHeader"); pushErr != nil {
-		return errors.Wrap(pushErr, "Error pushing for statusHeader")
-	}
-	_statusHeaderErr := writeBuffer.WriteSerializable(m.GetStatusHeader())
-	if popErr := writeBuffer.PopContext("statusHeader"); popErr != nil {
-		return errors.Wrap(popErr, "Error popping for statusHeader")
-	}
-	if _statusHeaderErr != nil {
-		return errors.Wrap(_statusHeaderErr, "Error serializing 'statusHeader' field")
-	}
-
-	// Simple Field (coding)
-	if pushErr := writeBuffer.PushContext("coding"); pushErr != nil {
-		return errors.Wrap(pushErr, "Error pushing for coding")
-	}
-	_codingErr := writeBuffer.WriteSerializable(m.GetCoding())
-	if popErr := writeBuffer.PopContext("coding"); popErr != nil {
-		return errors.Wrap(popErr, "Error popping for coding")
-	}
-	if _codingErr != nil {
-		return errors.Wrap(_codingErr, "Error serializing 'coding' field")
-	}
-
-	// Simple Field (application)
-	if pushErr := writeBuffer.PushContext("application"); pushErr != nil {
-		return errors.Wrap(pushErr, "Error pushing for application")
-	}
-	_applicationErr := writeBuffer.WriteSerializable(m.GetApplication())
-	if popErr := writeBuffer.PopContext("application"); popErr != nil {
-		return errors.Wrap(popErr, "Error popping for application")
-	}
-	if _applicationErr != nil {
-		return errors.Wrap(_applicationErr, "Error serializing 'application' field")
-	}
-
-	// Simple Field (blockStart)
-	blockStart := uint8(m.GetBlockStart())
-	_blockStartErr := writeBuffer.WriteUint8("blockStart", 8, (blockStart))
-	if _blockStartErr != nil {
-		return errors.Wrap(_blockStartErr, "Error serializing 'blockStart' field")
-	}
-	// Virtual field
-	if _numberOfStatusBytesErr := writeBuffer.WriteVirtual("numberOfStatusBytes", m.GetNumberOfStatusBytes()); _numberOfStatusBytesErr != nil {
-		return errors.Wrap(_numberOfStatusBytesErr, "Error serializing 'numberOfStatusBytes' field")
-	}
-	// Virtual field
-	if _numberOfLevelInformationErr := writeBuffer.WriteVirtual("numberOfLevelInformation", m.GetNumberOfLevelInformation()); _numberOfLevelInformationErr != nil {
-		return errors.Wrap(_numberOfLevelInformationErr, "Error serializing 'numberOfLevelInformation' field")
-	}
-
-	// Array Field (statusBytes)
-	if pushErr := writeBuffer.PushContext("statusBytes", utils.WithRenderAsList(true)); pushErr != nil {
-		return errors.Wrap(pushErr, "Error pushing for statusBytes")
-	}
-	for _, _element := range m.GetStatusBytes() {
-		_elementErr := writeBuffer.WriteSerializable(_element)
-		if _elementErr != nil {
-			return errors.Wrap(_elementErr, "Error serializing 'statusBytes' field")
-		}
-	}
-	if popErr := writeBuffer.PopContext("statusBytes", utils.WithRenderAsList(true)); popErr != nil {
-		return errors.Wrap(popErr, "Error popping for statusBytes")
-	}
-
-	// Array Field (levelInformation)
-	if pushErr := writeBuffer.PushContext("levelInformation", utils.WithRenderAsList(true)); pushErr != nil {
-		return errors.Wrap(pushErr, "Error pushing for levelInformation")
-	}
-	for _, _element := range m.GetLevelInformation() {
-		_elementErr := writeBuffer.WriteSerializable(_element)
-		if _elementErr != nil {
-			return errors.Wrap(_elementErr, "Error serializing 'levelInformation' field")
-		}
-	}
-	if popErr := writeBuffer.PopContext("levelInformation", utils.WithRenderAsList(true)); popErr != nil {
-		return errors.Wrap(popErr, "Error popping for levelInformation")
-	}
-
-	if popErr := writeBuffer.PopContext("ExtendedFormatStatusReply"); popErr != nil {
-		return errors.Wrap(popErr, "Error popping for ExtendedFormatStatusReply")
-	}
-	return nil
-}
-
-func (m *_ExtendedFormatStatusReply) isExtendedFormatStatusReply() bool {
-	return true
-}
-
-func (m *_ExtendedFormatStatusReply) String() string {
-	if m == nil {
-		return "<nil>"
-	}
-	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
-	if err := writeBuffer.WriteSerializable(m); err != nil {
-		return err.Error()
-	}
-	return writeBuffer.GetBox().String()
-}
diff --git a/plc4go/protocols/cbus/readwrite/model/ExtendedStatusHeader.go b/plc4go/protocols/cbus/readwrite/model/ExtendedStatusHeader.go
deleted file mode 100644
index eaef5dbd3..000000000
--- a/plc4go/protocols/cbus/readwrite/model/ExtendedStatusHeader.go
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * 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
- *
- *   https://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/spi/utils"
-	"github.com/pkg/errors"
-	"github.com/rs/zerolog/log"
-)
-
-// Code generated by code-generation. DO NOT EDIT.
-
-// ExtendedStatusHeader is the corresponding interface of ExtendedStatusHeader
-type ExtendedStatusHeader interface {
-	utils.LengthAware
-	utils.Serializable
-	// GetNumberOfCharacterPairs returns NumberOfCharacterPairs (property field)
-	GetNumberOfCharacterPairs() uint8
-}
-
-// ExtendedStatusHeaderExactly can be used when we want exactly this type and not a type which fulfills ExtendedStatusHeader.
-// This is useful for switch cases.
-type ExtendedStatusHeaderExactly interface {
-	ExtendedStatusHeader
-	isExtendedStatusHeader() bool
-}
-
-// _ExtendedStatusHeader is the data-structure of this message
-type _ExtendedStatusHeader struct {
-	NumberOfCharacterPairs uint8
-}
-
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/////////////////////// Accessors for property fields.
-///////////////////////
-
-func (m *_ExtendedStatusHeader) GetNumberOfCharacterPairs() uint8 {
-	return m.NumberOfCharacterPairs
-}
-
-///////////////////////
-///////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-
-// NewExtendedStatusHeader factory function for _ExtendedStatusHeader
-func NewExtendedStatusHeader(numberOfCharacterPairs uint8) *_ExtendedStatusHeader {
-	return &_ExtendedStatusHeader{NumberOfCharacterPairs: numberOfCharacterPairs}
-}
-
-// Deprecated: use the interface for direct cast
-func CastExtendedStatusHeader(structType interface{}) ExtendedStatusHeader {
-	if casted, ok := structType.(ExtendedStatusHeader); ok {
-		return casted
-	}
-	if casted, ok := structType.(*ExtendedStatusHeader); ok {
-		return *casted
-	}
-	return nil
-}
-
-func (m *_ExtendedStatusHeader) GetTypeName() string {
-	return "ExtendedStatusHeader"
-}
-
-func (m *_ExtendedStatusHeader) GetLengthInBits() uint16 {
-	return m.GetLengthInBitsConditional(false)
-}
-
-func (m *_ExtendedStatusHeader) GetLengthInBitsConditional(lastItem bool) uint16 {
-	lengthInBits := uint16(0)
-
-	// Reserved Field (reserved)
-	lengthInBits += 3
-
-	// Simple field (numberOfCharacterPairs)
-	lengthInBits += 5
-
-	return lengthInBits
-}
-
-func (m *_ExtendedStatusHeader) GetLengthInBytes() uint16 {
-	return m.GetLengthInBits() / 8
-}
-
-func ExtendedStatusHeaderParse(readBuffer utils.ReadBuffer) (ExtendedStatusHeader, error) {
-	positionAware := readBuffer
-	_ = positionAware
-	if pullErr := readBuffer.PullContext("ExtendedStatusHeader"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for ExtendedStatusHeader")
-	}
-	currentPos := positionAware.GetPos()
-	_ = currentPos
-
-	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
-	{
-		reserved, _err := readBuffer.ReadUint8("reserved", 3)
-		if _err != nil {
-			return nil, errors.Wrap(_err, "Error parsing 'reserved' field of ExtendedStatusHeader")
-		}
-		if reserved != uint8(0x7) {
-			log.Info().Fields(map[string]interface{}{
-				"expected value": uint8(0x7),
-				"got value":      reserved,
-			}).Msg("Got unexpected response for reserved field.")
-		}
-	}
-
-	// Simple Field (numberOfCharacterPairs)
-	_numberOfCharacterPairs, _numberOfCharacterPairsErr := readBuffer.ReadUint8("numberOfCharacterPairs", 5)
-	if _numberOfCharacterPairsErr != nil {
-		return nil, errors.Wrap(_numberOfCharacterPairsErr, "Error parsing 'numberOfCharacterPairs' field of ExtendedStatusHeader")
-	}
-	numberOfCharacterPairs := _numberOfCharacterPairs
-
-	if closeErr := readBuffer.CloseContext("ExtendedStatusHeader"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for ExtendedStatusHeader")
-	}
-
-	// Create the instance
-	return NewExtendedStatusHeader(numberOfCharacterPairs), nil
-}
-
-func (m *_ExtendedStatusHeader) Serialize(writeBuffer utils.WriteBuffer) error {
-	positionAware := writeBuffer
-	_ = positionAware
-	if pushErr := writeBuffer.PushContext("ExtendedStatusHeader"); pushErr != nil {
-		return errors.Wrap(pushErr, "Error pushing for ExtendedStatusHeader")
-	}
-
-	// Reserved Field (reserved)
-	{
-		_err := writeBuffer.WriteUint8("reserved", 3, uint8(0x7))
-		if _err != nil {
-			return errors.Wrap(_err, "Error serializing 'reserved' field")
-		}
-	}
-
-	// Simple Field (numberOfCharacterPairs)
-	numberOfCharacterPairs := uint8(m.GetNumberOfCharacterPairs())
-	_numberOfCharacterPairsErr := writeBuffer.WriteUint8("numberOfCharacterPairs", 5, (numberOfCharacterPairs))
-	if _numberOfCharacterPairsErr != nil {
-		return errors.Wrap(_numberOfCharacterPairsErr, "Error serializing 'numberOfCharacterPairs' field")
-	}
-
-	if popErr := writeBuffer.PopContext("ExtendedStatusHeader"); popErr != nil {
-		return errors.Wrap(popErr, "Error popping for ExtendedStatusHeader")
-	}
-	return nil
-}
-
-func (m *_ExtendedStatusHeader) isExtendedStatusHeader() bool {
-	return true
-}
-
-func (m *_ExtendedStatusHeader) String() string {
-	if m == nil {
-		return "<nil>"
-	}
-	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
-	if err := writeBuffer.WriteSerializable(m); err != nil {
-		return err.Error()
-	}
-	return writeBuffer.GetBox().String()
-}
diff --git a/plc4go/protocols/cbus/readwrite/model/RequestContext.go b/plc4go/protocols/cbus/readwrite/model/RequestContext.go
index 892f58e38..bc92cffb5 100644
--- a/plc4go/protocols/cbus/readwrite/model/RequestContext.go
+++ b/plc4go/protocols/cbus/readwrite/model/RequestContext.go
@@ -30,10 +30,6 @@ import (
 type RequestContext interface {
 	utils.LengthAware
 	utils.Serializable
-	// GetSendCalCommandBefore returns SendCalCommandBefore (property field)
-	GetSendCalCommandBefore() bool
-	// GetSendStatusRequestLevelBefore returns SendStatusRequestLevelBefore (property field)
-	GetSendStatusRequestLevelBefore() bool
 	// GetSendIdentifyRequestBefore returns SendIdentifyRequestBefore (property field)
 	GetSendIdentifyRequestBefore() bool
 }
@@ -47,9 +43,7 @@ type RequestContextExactly interface {
 
 // _RequestContext is the data-structure of this message
 type _RequestContext struct {
-	SendCalCommandBefore         bool
-	SendStatusRequestLevelBefore bool
-	SendIdentifyRequestBefore    bool
+	SendIdentifyRequestBefore bool
 }
 
 ///////////////////////////////////////////////////////////
@@ -57,14 +51,6 @@ type _RequestContext struct {
 /////////////////////// Accessors for property fields.
 ///////////////////////
 
-func (m *_RequestContext) GetSendCalCommandBefore() bool {
-	return m.SendCalCommandBefore
-}
-
-func (m *_RequestContext) GetSendStatusRequestLevelBefore() bool {
-	return m.SendStatusRequestLevelBefore
-}
-
 func (m *_RequestContext) GetSendIdentifyRequestBefore() bool {
 	return m.SendIdentifyRequestBefore
 }
@@ -75,8 +61,8 @@ func (m *_RequestContext) GetSendIdentifyRequestBefore() bool {
 ///////////////////////////////////////////////////////////
 
 // NewRequestContext factory function for _RequestContext
-func NewRequestContext(sendCalCommandBefore bool, sendStatusRequestLevelBefore bool, sendIdentifyRequestBefore bool) *_RequestContext {
-	return &_RequestContext{SendCalCommandBefore: sendCalCommandBefore, SendStatusRequestLevelBefore: sendStatusRequestLevelBefore, SendIdentifyRequestBefore: sendIdentifyRequestBefore}
+func NewRequestContext(sendIdentifyRequestBefore bool) *_RequestContext {
+	return &_RequestContext{SendIdentifyRequestBefore: sendIdentifyRequestBefore}
 }
 
 // Deprecated: use the interface for direct cast
@@ -101,12 +87,6 @@ func (m *_RequestContext) GetLengthInBits() uint16 {
 func (m *_RequestContext) GetLengthInBitsConditional(lastItem bool) uint16 {
 	lengthInBits := uint16(0)
 
-	// Simple field (sendCalCommandBefore)
-	lengthInBits += 1
-
-	// Simple field (sendStatusRequestLevelBefore)
-	lengthInBits += 1
-
 	// Simple field (sendIdentifyRequestBefore)
 	lengthInBits += 1
 
@@ -126,20 +106,6 @@ func RequestContextParse(readBuffer utils.ReadBuffer) (RequestContext, error) {
 	currentPos := positionAware.GetPos()
 	_ = currentPos
 
-	// Simple Field (sendCalCommandBefore)
-	_sendCalCommandBefore, _sendCalCommandBeforeErr := readBuffer.ReadBit("sendCalCommandBefore")
-	if _sendCalCommandBeforeErr != nil {
-		return nil, errors.Wrap(_sendCalCommandBeforeErr, "Error parsing 'sendCalCommandBefore' field of RequestContext")
-	}
-	sendCalCommandBefore := _sendCalCommandBefore
-
-	// Simple Field (sendStatusRequestLevelBefore)
-	_sendStatusRequestLevelBefore, _sendStatusRequestLevelBeforeErr := readBuffer.ReadBit("sendStatusRequestLevelBefore")
-	if _sendStatusRequestLevelBeforeErr != nil {
-		return nil, errors.Wrap(_sendStatusRequestLevelBeforeErr, "Error parsing 'sendStatusRequestLevelBefore' field of RequestContext")
-	}
-	sendStatusRequestLevelBefore := _sendStatusRequestLevelBefore
-
 	// Simple Field (sendIdentifyRequestBefore)
 	_sendIdentifyRequestBefore, _sendIdentifyRequestBeforeErr := readBuffer.ReadBit("sendIdentifyRequestBefore")
 	if _sendIdentifyRequestBeforeErr != nil {
@@ -152,7 +118,7 @@ func RequestContextParse(readBuffer utils.ReadBuffer) (RequestContext, error) {
 	}
 
 	// Create the instance
-	return NewRequestContext(sendCalCommandBefore, sendStatusRequestLevelBefore, sendIdentifyRequestBefore), nil
+	return NewRequestContext(sendIdentifyRequestBefore), nil
 }
 
 func (m *_RequestContext) Serialize(writeBuffer utils.WriteBuffer) error {
@@ -162,20 +128,6 @@ func (m *_RequestContext) Serialize(writeBuffer utils.WriteBuffer) error {
 		return errors.Wrap(pushErr, "Error pushing for RequestContext")
 	}
 
-	// Simple Field (sendCalCommandBefore)
-	sendCalCommandBefore := bool(m.GetSendCalCommandBefore())
-	_sendCalCommandBeforeErr := writeBuffer.WriteBit("sendCalCommandBefore", (sendCalCommandBefore))
-	if _sendCalCommandBeforeErr != nil {
-		return errors.Wrap(_sendCalCommandBeforeErr, "Error serializing 'sendCalCommandBefore' field")
-	}
-
-	// Simple Field (sendStatusRequestLevelBefore)
-	sendStatusRequestLevelBefore := bool(m.GetSendStatusRequestLevelBefore())
-	_sendStatusRequestLevelBeforeErr := writeBuffer.WriteBit("sendStatusRequestLevelBefore", (sendStatusRequestLevelBefore))
-	if _sendStatusRequestLevelBeforeErr != nil {
-		return errors.Wrap(_sendStatusRequestLevelBeforeErr, "Error serializing 'sendStatusRequestLevelBefore' field")
-	}
-
 	// Simple Field (sendIdentifyRequestBefore)
 	sendIdentifyRequestBefore := bool(m.GetSendIdentifyRequestBefore())
 	_sendIdentifyRequestBeforeErr := writeBuffer.WriteBit("sendIdentifyRequestBefore", (sendIdentifyRequestBefore))
diff --git a/plc4go/protocols/cbus/readwrite/model/StandardFormatStatusReply.go b/plc4go/protocols/cbus/readwrite/model/StandardFormatStatusReply.go
deleted file mode 100644
index 10ef6af85..000000000
--- a/plc4go/protocols/cbus/readwrite/model/StandardFormatStatusReply.go
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * 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
- *
- *   https://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/spi/utils"
-	"github.com/pkg/errors"
-)
-
-// Code generated by code-generation. DO NOT EDIT.
-
-// StandardFormatStatusReply is the corresponding interface of StandardFormatStatusReply
-type StandardFormatStatusReply interface {
-	utils.LengthAware
-	utils.Serializable
-	// GetStatusHeader returns StatusHeader (property field)
-	GetStatusHeader() StatusHeader
-	// GetApplication returns Application (property field)
-	GetApplication() ApplicationIdContainer
-	// GetBlockStart returns BlockStart (property field)
-	GetBlockStart() uint8
-	// GetStatusBytes returns StatusBytes (property field)
-	GetStatusBytes() []StatusByte
-}
-
-// StandardFormatStatusReplyExactly can be used when we want exactly this type and not a type which fulfills StandardFormatStatusReply.
-// This is useful for switch cases.
-type StandardFormatStatusReplyExactly interface {
-	StandardFormatStatusReply
-	isStandardFormatStatusReply() bool
-}
-
-// _StandardFormatStatusReply is the data-structure of this message
-type _StandardFormatStatusReply struct {
-	StatusHeader StatusHeader
-	Application  ApplicationIdContainer
-	BlockStart   uint8
-	StatusBytes  []StatusByte
-}
-
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/////////////////////// Accessors for property fields.
-///////////////////////
-
-func (m *_StandardFormatStatusReply) GetStatusHeader() StatusHeader {
-	return m.StatusHeader
-}
-
-func (m *_StandardFormatStatusReply) GetApplication() ApplicationIdContainer {
-	return m.Application
-}
-
-func (m *_StandardFormatStatusReply) GetBlockStart() uint8 {
-	return m.BlockStart
-}
-
-func (m *_StandardFormatStatusReply) GetStatusBytes() []StatusByte {
-	return m.StatusBytes
-}
-
-///////////////////////
-///////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-
-// NewStandardFormatStatusReply factory function for _StandardFormatStatusReply
-func NewStandardFormatStatusReply(statusHeader StatusHeader, application ApplicationIdContainer, blockStart uint8, statusBytes []StatusByte) *_StandardFormatStatusReply {
-	return &_StandardFormatStatusReply{StatusHeader: statusHeader, Application: application, BlockStart: blockStart, StatusBytes: statusBytes}
-}
-
-// Deprecated: use the interface for direct cast
-func CastStandardFormatStatusReply(structType interface{}) StandardFormatStatusReply {
-	if casted, ok := structType.(StandardFormatStatusReply); ok {
-		return casted
-	}
-	if casted, ok := structType.(*StandardFormatStatusReply); ok {
-		return *casted
-	}
-	return nil
-}
-
-func (m *_StandardFormatStatusReply) GetTypeName() string {
-	return "StandardFormatStatusReply"
-}
-
-func (m *_StandardFormatStatusReply) GetLengthInBits() uint16 {
-	return m.GetLengthInBitsConditional(false)
-}
-
-func (m *_StandardFormatStatusReply) GetLengthInBitsConditional(lastItem bool) uint16 {
-	lengthInBits := uint16(0)
-
-	// Simple field (statusHeader)
-	lengthInBits += m.StatusHeader.GetLengthInBits()
-
-	// Simple field (application)
-	lengthInBits += 8
-
-	// Simple field (blockStart)
-	lengthInBits += 8
-
-	// Array field
-	if len(m.StatusBytes) > 0 {
-		for i, element := range m.StatusBytes {
-			last := i == len(m.StatusBytes)-1
-			lengthInBits += element.(interface{ GetLengthInBitsConditional(bool) uint16 }).GetLengthInBitsConditional(last)
-		}
-	}
-
-	return lengthInBits
-}
-
-func (m *_StandardFormatStatusReply) GetLengthInBytes() uint16 {
-	return m.GetLengthInBits() / 8
-}
-
-func StandardFormatStatusReplyParse(readBuffer utils.ReadBuffer) (StandardFormatStatusReply, error) {
-	positionAware := readBuffer
-	_ = positionAware
-	if pullErr := readBuffer.PullContext("StandardFormatStatusReply"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for StandardFormatStatusReply")
-	}
-	currentPos := positionAware.GetPos()
-	_ = currentPos
-
-	// Simple Field (statusHeader)
-	if pullErr := readBuffer.PullContext("statusHeader"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for statusHeader")
-	}
-	_statusHeader, _statusHeaderErr := StatusHeaderParse(readBuffer)
-	if _statusHeaderErr != nil {
-		return nil, errors.Wrap(_statusHeaderErr, "Error parsing 'statusHeader' field of StandardFormatStatusReply")
-	}
-	statusHeader := _statusHeader.(StatusHeader)
-	if closeErr := readBuffer.CloseContext("statusHeader"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for statusHeader")
-	}
-
-	// Simple Field (application)
-	if pullErr := readBuffer.PullContext("application"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for application")
-	}
-	_application, _applicationErr := ApplicationIdContainerParse(readBuffer)
-	if _applicationErr != nil {
-		return nil, errors.Wrap(_applicationErr, "Error parsing 'application' field of StandardFormatStatusReply")
-	}
-	application := _application
-	if closeErr := readBuffer.CloseContext("application"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for application")
-	}
-
-	// Simple Field (blockStart)
-	_blockStart, _blockStartErr := readBuffer.ReadUint8("blockStart", 8)
-	if _blockStartErr != nil {
-		return nil, errors.Wrap(_blockStartErr, "Error parsing 'blockStart' field of StandardFormatStatusReply")
-	}
-	blockStart := _blockStart
-
-	// Array field (statusBytes)
-	if pullErr := readBuffer.PullContext("statusBytes", utils.WithRenderAsList(true)); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for statusBytes")
-	}
-	// Count array
-	statusBytes := make([]StatusByte, uint16(statusHeader.GetNumberOfCharacterPairs())-uint16(uint16(2)))
-	// This happens when the size is set conditional to 0
-	if len(statusBytes) == 0 {
-		statusBytes = nil
-	}
-	{
-		for curItem := uint16(0); curItem < uint16(uint16(statusHeader.GetNumberOfCharacterPairs())-uint16(uint16(2))); curItem++ {
-			_item, _err := StatusByteParse(readBuffer)
-			if _err != nil {
-				return nil, errors.Wrap(_err, "Error parsing 'statusBytes' field of StandardFormatStatusReply")
-			}
-			statusBytes[curItem] = _item.(StatusByte)
-		}
-	}
-	if closeErr := readBuffer.CloseContext("statusBytes", utils.WithRenderAsList(true)); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for statusBytes")
-	}
-
-	if closeErr := readBuffer.CloseContext("StandardFormatStatusReply"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for StandardFormatStatusReply")
-	}
-
-	// Create the instance
-	return NewStandardFormatStatusReply(statusHeader, application, blockStart, statusBytes), nil
-}
-
-func (m *_StandardFormatStatusReply) Serialize(writeBuffer utils.WriteBuffer) error {
-	positionAware := writeBuffer
-	_ = positionAware
-	if pushErr := writeBuffer.PushContext("StandardFormatStatusReply"); pushErr != nil {
-		return errors.Wrap(pushErr, "Error pushing for StandardFormatStatusReply")
-	}
-
-	// Simple Field (statusHeader)
-	if pushErr := writeBuffer.PushContext("statusHeader"); pushErr != nil {
-		return errors.Wrap(pushErr, "Error pushing for statusHeader")
-	}
-	_statusHeaderErr := writeBuffer.WriteSerializable(m.GetStatusHeader())
-	if popErr := writeBuffer.PopContext("statusHeader"); popErr != nil {
-		return errors.Wrap(popErr, "Error popping for statusHeader")
-	}
-	if _statusHeaderErr != nil {
-		return errors.Wrap(_statusHeaderErr, "Error serializing 'statusHeader' field")
-	}
-
-	// Simple Field (application)
-	if pushErr := writeBuffer.PushContext("application"); pushErr != nil {
-		return errors.Wrap(pushErr, "Error pushing for application")
-	}
-	_applicationErr := writeBuffer.WriteSerializable(m.GetApplication())
-	if popErr := writeBuffer.PopContext("application"); popErr != nil {
-		return errors.Wrap(popErr, "Error popping for application")
-	}
-	if _applicationErr != nil {
-		return errors.Wrap(_applicationErr, "Error serializing 'application' field")
-	}
-
-	// Simple Field (blockStart)
-	blockStart := uint8(m.GetBlockStart())
-	_blockStartErr := writeBuffer.WriteUint8("blockStart", 8, (blockStart))
-	if _blockStartErr != nil {
-		return errors.Wrap(_blockStartErr, "Error serializing 'blockStart' field")
-	}
-
-	// Array Field (statusBytes)
-	if pushErr := writeBuffer.PushContext("statusBytes", utils.WithRenderAsList(true)); pushErr != nil {
-		return errors.Wrap(pushErr, "Error pushing for statusBytes")
-	}
-	for _, _element := range m.GetStatusBytes() {
-		_elementErr := writeBuffer.WriteSerializable(_element)
-		if _elementErr != nil {
-			return errors.Wrap(_elementErr, "Error serializing 'statusBytes' field")
-		}
-	}
-	if popErr := writeBuffer.PopContext("statusBytes", utils.WithRenderAsList(true)); popErr != nil {
-		return errors.Wrap(popErr, "Error popping for statusBytes")
-	}
-
-	if popErr := writeBuffer.PopContext("StandardFormatStatusReply"); popErr != nil {
-		return errors.Wrap(popErr, "Error popping for StandardFormatStatusReply")
-	}
-	return nil
-}
-
-func (m *_StandardFormatStatusReply) isStandardFormatStatusReply() bool {
-	return true
-}
-
-func (m *_StandardFormatStatusReply) String() string {
-	if m == nil {
-		return "<nil>"
-	}
-	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
-	if err := writeBuffer.WriteSerializable(m); err != nil {
-		return err.Error()
-	}
-	return writeBuffer.GetBox().String()
-}
diff --git a/plc4go/protocols/cbus/readwrite/model/StatusHeader.go b/plc4go/protocols/cbus/readwrite/model/StatusHeader.go
deleted file mode 100644
index 70af45bf3..000000000
--- a/plc4go/protocols/cbus/readwrite/model/StatusHeader.go
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * 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
- *
- *   https://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/spi/utils"
-	"github.com/pkg/errors"
-	"github.com/rs/zerolog/log"
-)
-
-// Code generated by code-generation. DO NOT EDIT.
-
-// StatusHeader is the corresponding interface of StatusHeader
-type StatusHeader interface {
-	utils.LengthAware
-	utils.Serializable
-	// GetNumberOfCharacterPairs returns NumberOfCharacterPairs (property field)
-	GetNumberOfCharacterPairs() uint8
-}
-
-// StatusHeaderExactly can be used when we want exactly this type and not a type which fulfills StatusHeader.
-// This is useful for switch cases.
-type StatusHeaderExactly interface {
-	StatusHeader
-	isStatusHeader() bool
-}
-
-// _StatusHeader is the data-structure of this message
-type _StatusHeader struct {
-	NumberOfCharacterPairs uint8
-}
-
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/////////////////////// Accessors for property fields.
-///////////////////////
-
-func (m *_StatusHeader) GetNumberOfCharacterPairs() uint8 {
-	return m.NumberOfCharacterPairs
-}
-
-///////////////////////
-///////////////////////
-///////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-
-// NewStatusHeader factory function for _StatusHeader
-func NewStatusHeader(numberOfCharacterPairs uint8) *_StatusHeader {
-	return &_StatusHeader{NumberOfCharacterPairs: numberOfCharacterPairs}
-}
-
-// Deprecated: use the interface for direct cast
-func CastStatusHeader(structType interface{}) StatusHeader {
-	if casted, ok := structType.(StatusHeader); ok {
-		return casted
-	}
-	if casted, ok := structType.(*StatusHeader); ok {
-		return *casted
-	}
-	return nil
-}
-
-func (m *_StatusHeader) GetTypeName() string {
-	return "StatusHeader"
-}
-
-func (m *_StatusHeader) GetLengthInBits() uint16 {
-	return m.GetLengthInBitsConditional(false)
-}
-
-func (m *_StatusHeader) GetLengthInBitsConditional(lastItem bool) uint16 {
-	lengthInBits := uint16(0)
-
-	// Reserved Field (reserved)
-	lengthInBits += 2
-
-	// Simple field (numberOfCharacterPairs)
-	lengthInBits += 6
-
-	return lengthInBits
-}
-
-func (m *_StatusHeader) GetLengthInBytes() uint16 {
-	return m.GetLengthInBits() / 8
-}
-
-func StatusHeaderParse(readBuffer utils.ReadBuffer) (StatusHeader, error) {
-	positionAware := readBuffer
-	_ = positionAware
-	if pullErr := readBuffer.PullContext("StatusHeader"); pullErr != nil {
-		return nil, errors.Wrap(pullErr, "Error pulling for StatusHeader")
-	}
-	currentPos := positionAware.GetPos()
-	_ = currentPos
-
-	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
-	{
-		reserved, _err := readBuffer.ReadUint8("reserved", 2)
-		if _err != nil {
-			return nil, errors.Wrap(_err, "Error parsing 'reserved' field of StatusHeader")
-		}
-		if reserved != uint8(0x3) {
-			log.Info().Fields(map[string]interface{}{
-				"expected value": uint8(0x3),
-				"got value":      reserved,
-			}).Msg("Got unexpected response for reserved field.")
-		}
-	}
-
-	// Simple Field (numberOfCharacterPairs)
-	_numberOfCharacterPairs, _numberOfCharacterPairsErr := readBuffer.ReadUint8("numberOfCharacterPairs", 6)
-	if _numberOfCharacterPairsErr != nil {
-		return nil, errors.Wrap(_numberOfCharacterPairsErr, "Error parsing 'numberOfCharacterPairs' field of StatusHeader")
-	}
-	numberOfCharacterPairs := _numberOfCharacterPairs
-
-	if closeErr := readBuffer.CloseContext("StatusHeader"); closeErr != nil {
-		return nil, errors.Wrap(closeErr, "Error closing for StatusHeader")
-	}
-
-	// Create the instance
-	return NewStatusHeader(numberOfCharacterPairs), nil
-}
-
-func (m *_StatusHeader) Serialize(writeBuffer utils.WriteBuffer) error {
-	positionAware := writeBuffer
-	_ = positionAware
-	if pushErr := writeBuffer.PushContext("StatusHeader"); pushErr != nil {
-		return errors.Wrap(pushErr, "Error pushing for StatusHeader")
-	}
-
-	// Reserved Field (reserved)
-	{
-		_err := writeBuffer.WriteUint8("reserved", 2, uint8(0x3))
-		if _err != nil {
-			return errors.Wrap(_err, "Error serializing 'reserved' field")
-		}
-	}
-
-	// Simple Field (numberOfCharacterPairs)
-	numberOfCharacterPairs := uint8(m.GetNumberOfCharacterPairs())
-	_numberOfCharacterPairsErr := writeBuffer.WriteUint8("numberOfCharacterPairs", 6, (numberOfCharacterPairs))
-	if _numberOfCharacterPairsErr != nil {
-		return errors.Wrap(_numberOfCharacterPairsErr, "Error serializing 'numberOfCharacterPairs' field")
-	}
-
-	if popErr := writeBuffer.PopContext("StatusHeader"); popErr != nil {
-		return errors.Wrap(popErr, "Error popping for StatusHeader")
-	}
-	return nil
-}
-
-func (m *_StatusHeader) isStatusHeader() bool {
-	return true
-}
-
-func (m *_StatusHeader) String() string {
-	if m == nil {
-		return "<nil>"
-	}
-	writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
-	if err := writeBuffer.WriteSerializable(m); err != nil {
-		return err.Error()
-	}
-	return writeBuffer.GetBox().String()
-}
diff --git a/plc4go/tools/plc4xpcapanalyzer/internal/cbusanalyzer/analyzer.go b/plc4go/tools/plc4xpcapanalyzer/internal/cbusanalyzer/analyzer.go
index 5753427ea..92724de14 100644
--- a/plc4go/tools/plc4xpcapanalyzer/internal/cbusanalyzer/analyzer.go
+++ b/plc4go/tools/plc4xpcapanalyzer/internal/cbusanalyzer/analyzer.go
@@ -51,7 +51,7 @@ func (a *Analyzer) Init() {
 	if a.initialized {
 		return
 	}
-	a.requestContext = model.NewRequestContext(false, false, false)
+	a.requestContext = model.NewRequestContext(false)
 	a.cBusOptions = model.NewCBusOptions(config.CBusConfigInstance.Connect, config.CBusConfigInstance.Smart, config.CBusConfigInstance.Idmon, config.CBusConfigInstance.Exstat, config.CBusConfigInstance.Monitor, config.CBusConfigInstance.Monall, config.CBusConfigInstance.Pun, config.CBusConfigInstance.Pcn, config.CBusConfigInstance.Srchk)
 	a.currentInboundPayloads = make(map[string][]byte)
 	a.currentPrefilterInboundPayloads = make(map[string][]byte)
@@ -93,7 +93,7 @@ func (a *Analyzer) PackageParse(packetInformation common.PacketInformation, payl
 	a.lastParsePayload = currentPayload
 	parse, err := model.CBusMessageParse(utils.NewReadBufferByteBased(currentPayload), isResponse, a.requestContext, cBusOptions)
 	if err != nil {
-		if secondParse, err := model.CBusMessageParse(utils.NewReadBufferByteBased(currentPayload), isResponse, model.NewRequestContext(false, false, false), model.NewCBusOptions(false, false, false, false, false, false, false, false, false)); err != nil {
+		if secondParse, err := model.CBusMessageParse(utils.NewReadBufferByteBased(currentPayload), isResponse, model.NewRequestContext(false), model.NewCBusOptions(false, false, false, false, false, false, false, false, false)); err != nil {
 			log.Debug().Err(err).Msg("Second parse failed too")
 			return nil, errors.Wrap(err, "Error parsing CBusCommand")
 		} else {
@@ -180,7 +180,7 @@ func mergeCheck(currentPayload *[]byte, srcUip string, mergeCallback func(int),
 				if reflect.DeepEqual(headPayload, *lastPayload) {
 					// This means that we have a merge where the last payload is an echo. In that case we discard that here to not offset all numbers
 					*currentPayload = tailPayload
-					log.Debug().Msgf("We cut the echo message %s out of the response to keep numbering", headPayload, *currentPayload)
+					log.Debug().Msgf("We cut the echo message %s out of the response to keep numbering", headPayload)
 					return mergeCheck(currentPayload, srcUip, mergeCallback, currentInboundPayloads, lastPayload)
 				} else {
 					if mergeCallback != nil {
@@ -253,12 +253,6 @@ func (a *Analyzer) PrettyPrint(message interface{}) {
 					switch reply := reply.GetReply().(type) {
 					case model.ReplyEncodedReplyExactly:
 						switch reply := reply.GetEncodedReply().(type) {
-						case model.EncodedReplyExtendedFormatStatusReplyExactly:
-							// We print this a second time as the first print contains only the hex part
-							fmt.Printf("%v\n", reply.GetReply())
-						case model.EncodedReplyStandardFormatStatusReplyExactly:
-							// We print this a second time as the first print contains only the hex part
-							fmt.Printf("%v\n", reply.GetReply())
 						case model.EncodedReplyCALReplyExactly:
 							// We print this a second time as the first print contains only the hex part
 							fmt.Printf("%v\n", reply.GetCalReply())
@@ -272,15 +266,12 @@ func (a *Analyzer) PrettyPrint(message interface{}) {
 				switch reply := reply.GetReply().(type) {
 				case model.ReplyEncodedReplyExactly:
 					switch reply := reply.GetEncodedReply().(type) {
-					case model.EncodedReplyExtendedFormatStatusReplyExactly:
-						// We print this a second time as the first print contains only the hex part
-						fmt.Printf("%v\n", reply.GetReply())
-					case model.EncodedReplyStandardFormatStatusReplyExactly:
-						// We print this a second time as the first print contains only the hex part
-						fmt.Printf("%v\n", reply.GetReply())
 					case model.EncodedReplyCALReplyExactly:
 						// We print this a second time as the first print contains only the hex part
 						fmt.Printf("%v\n", reply.GetCalReply())
+					case model.MonitoredSALReplyExactly:
+						// We print this a second time as the first print contains only the hex part
+						fmt.Printf("%v\n", reply.GetMonitoredSAL())
 					}
 				}
 			}
diff --git a/plc4j/drivers/c-bus/src/main/java/org/apache/plc4x/java/cbus/readwrite/utils/StaticHelper.java b/plc4j/drivers/c-bus/src/main/java/org/apache/plc4x/java/cbus/readwrite/utils/StaticHelper.java
index f52141a1a..15c22fd77 100644
--- a/plc4j/drivers/c-bus/src/main/java/org/apache/plc4x/java/cbus/readwrite/utils/StaticHelper.java
+++ b/plc4j/drivers/c-bus/src/main/java/org/apache/plc4x/java/cbus/readwrite/utils/StaticHelper.java
@@ -116,7 +116,7 @@ public class StaticHelper {
                 checksum += aByte;
             }
             if (checksum != 0x0) {
-                throw new ParseException("Checksum validation failed");
+                //throw new ParseException("Checksum validation failed");
             }
             // We need to reset the last to hex bytes
             readBuffer.reset(readBuffer.getPos() - 2);
diff --git a/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java
index 789afc012..71e5364b2 100644
--- a/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java
+++ b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/RandomPackagesTest.java
@@ -38,7 +38,7 @@ public class RandomPackagesTest {
 
     @BeforeEach
     void setUp() {
-        requestContext = new RequestContext(false, false, false);
+        requestContext = new RequestContext(false);
         cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, false);
     }
 
@@ -82,7 +82,7 @@ public class RandomPackagesTest {
         byte[] bytes = "g.890150435F434E49454421\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
         // We know we send an identify command so we set the cal flag
-        requestContext = new RequestContext(true, false, false);
+        requestContext = new RequestContext(false);
         cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
@@ -99,7 +99,7 @@ public class RandomPackagesTest {
     void someResponse() throws Exception {
         byte[] bytes = "nl.8220025C\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-        requestContext = new RequestContext(true, false, false);
+        requestContext = new RequestContext(false);
         cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
@@ -143,7 +143,7 @@ public class RandomPackagesTest {
         byte[] bytes = "i.8902352E342E3030202010\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
         // We know we send an identify command so we set the cal flag
-        requestContext = new RequestContext(true, false, true);
+        requestContext = new RequestContext(false);
         cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
@@ -178,7 +178,7 @@ public class RandomPackagesTest {
     void identifyTypeReply() throws Exception {
         byte[] bytes = "h.890150435F434E49454421\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-        requestContext = new RequestContext(true, false, true);
+        requestContext = new RequestContext(false);
         cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
@@ -209,7 +209,7 @@ public class RandomPackagesTest {
     void strangeNotYetParsableCommandResponse() throws Exception {
         byte[] bytes = "s.860202003230977D\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-        requestContext = new RequestContext(true, false, false);
+        requestContext = new RequestContext(false);
         cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
@@ -243,14 +243,11 @@ public class RandomPackagesTest {
     void wat() throws Exception {
         byte[] bytes = "D8FF0024000002000000000000000008000000000000000000\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-        requestContext = new RequestContext(true, false, false);
+        requestContext = new RequestContext(false);
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
         System.out.println(msg);
-        CBusMessageToClient messageToClient = (CBusMessageToClient) msg;
-        ReplyOrConfirmationReply reply = (ReplyOrConfirmationReply) messageToClient.getReply();
-        EncodedReplyStandardFormatStatusReply encodedReplyCALReply = (EncodedReplyStandardFormatStatusReply) ((ReplyEncodedReply) reply.getReply()).getEncodedReply();
-        System.out.println(encodedReplyCALReply.getReply());
+        System.out.println(((ReplyEncodedReply) ((ReplyOrConfirmationReply) ((CBusMessageToClient) msg).getReply()).getReply()).getEncodedReply());
         assertMessageMatches(bytes, msg);
     }
 
@@ -271,13 +268,11 @@ public class RandomPackagesTest {
         byte[] bytes = "D8FF5800000000000000000000000000000000000000000000D1\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
         cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
-        requestContext = new RequestContext(false, true, false);
+        requestContext = new RequestContext(false);
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
         System.out.println(msg);
-        Reply normalReply = ((ReplyOrConfirmationReply) ((CBusMessageToClient) msg).getReply()).getReply();
-        EncodedReplyStandardFormatStatusReply encodedReplyStandardFormatStatusReply = (EncodedReplyStandardFormatStatusReply) ((ReplyEncodedReply) normalReply).getEncodedReply();
-        System.out.println(encodedReplyStandardFormatStatusReply.getReply());
+        System.out.println(((ReplyEncodedReply) ((ReplyOrConfirmationReply) ((CBusMessageToClient) msg).getReply()).getReply()).getEncodedReply());
 
         assertMessageMatches(bytes, msg);
     }
@@ -300,7 +295,7 @@ public class RandomPackagesTest {
         byte[] bytes = "o.8510020000FF6A\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
         cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
-        requestContext = new RequestContext(true, false, true);
+        requestContext = new RequestContext(true);
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
         System.out.println(msg);
@@ -314,7 +309,7 @@ public class RandomPackagesTest {
         byte[] bytes = "0531AC0079042F0401430316000011\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
         cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
-        requestContext = new RequestContext(false, false, false);
+        requestContext = new RequestContext(false);
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
         System.out.println(msg);
@@ -329,7 +324,7 @@ public class RandomPackagesTest {
         byte[] bytes = "h.860102008902312E362E30302020832138FFAE\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
         cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
-        requestContext = new RequestContext(false, false, true);
+        requestContext = new RequestContext(false);
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
         System.out.println(msg);
@@ -343,7 +338,7 @@ public class RandomPackagesTest {
         byte[] bytes = "r.8631020100320041D3\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
         cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
-        requestContext = new RequestContext(false, false, true);
+        requestContext = new RequestContext(false);
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
         System.out.println(msg);
@@ -357,7 +352,7 @@ public class RandomPackagesTest {
         byte[] bytes = "w.860C02008A08000000C8000000000012\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
         cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
-        requestContext = new RequestContext(false, false, true);
+        requestContext = new RequestContext(false);
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
         System.out.println(msg);
@@ -370,7 +365,7 @@ public class RandomPackagesTest {
     void SetHvacLevel() throws Exception {
         byte[] bytes = "0531AC0036040108FF0000DC\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-        requestContext = new RequestContext(false, false, false);
+        requestContext = new RequestContext(false);
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
         System.out.println(msg);
@@ -385,7 +380,7 @@ public class RandomPackagesTest {
         byte[] bytes = "0531AC0036040142037F001F\r\n".getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
         cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
-        requestContext = new RequestContext(false, false, false);
+        requestContext = new RequestContext(false);
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
         System.out.println(msg);
@@ -435,6 +430,7 @@ public class RandomPackagesTest {
     void incmoingMMI() throws Exception {
         byte[] bytes = ("86040200F940380001000000000000000008000000000000000000000000FA\r\n").getBytes(StandardCharsets.UTF_8);
         ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
+        cBusOptions = C_BUS_OPTIONS_WITH_SRCHK;
         CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
         assertThat(msg).isNotNull();
         System.out.println(msg);
diff --git a/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/ReferenceTest.java b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/ReferenceTest.java
index 25a4a727c..d6a2e1aac 100644
--- a/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/ReferenceTest.java
+++ b/plc4j/drivers/c-bus/src/test/java/org/apache/plc4x/java/cbus/ReferenceTest.java
@@ -38,7 +38,7 @@ public class ReferenceTest {
 
     @BeforeEach
     void setUp() {
-        requestContext = new RequestContext(false, false, false);
+        requestContext = new RequestContext(false);
         cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, false);
     }
 
@@ -302,7 +302,7 @@ public class ReferenceTest {
             void calReplyNormal() throws Exception {
                 byte[] bytes = "8902312E322E363620200A\r\n".getBytes(StandardCharsets.UTF_8);
                 ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-                requestContext = new RequestContext(true, false, false);
+                requestContext = new RequestContext(false);
                 cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
                 CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                 assertThat(msg).isNotNull();
@@ -316,7 +316,7 @@ public class ReferenceTest {
                 //byte[] bytes = "860593008902312E322E363620207F\r\n".getBytes(StandardCharsets.UTF_8);
                 byte[] bytes = "860593008902312E322E36362020EC\r\n".getBytes(StandardCharsets.UTF_8);
                 ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-                requestContext = new RequestContext(true, false, false);
+                requestContext = new RequestContext(false);
                 cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
                 CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                 assertThat(msg).isNotNull();
@@ -402,7 +402,7 @@ public class ReferenceTest {
         void StandardFormatStatusReply1() throws Exception {
             byte[] bytes = "D8380068AA0140550550001000000014000000000000000000CF\r\n".getBytes(StandardCharsets.UTF_8);
             ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-            requestContext = new RequestContext(false, true, false);
+            requestContext = new RequestContext(true);
             cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
             CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
             assertThat(msg).isNotNull();
@@ -414,7 +414,7 @@ public class ReferenceTest {
         void StandardFormatStatusReply2() throws Exception {
             byte[] bytes = "D838580000000000000000000000000000000000000000000098\r\n".getBytes(StandardCharsets.UTF_8);
             ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-            requestContext = new RequestContext(false, true, false);
+            requestContext = new RequestContext(true);
             cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
             CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
             assertThat(msg).isNotNull();
@@ -426,7 +426,7 @@ public class ReferenceTest {
         void StandardFormatStatusReply3() throws Exception {
             byte[] bytes = "D638B000000000FF00000000000000000000000000000043\r\n".getBytes(StandardCharsets.UTF_8);
             ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-            requestContext = new RequestContext(false, true, false);
+            requestContext = new RequestContext(true);
             cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
             CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
             assertThat(msg).isNotNull();
@@ -439,7 +439,7 @@ public class ReferenceTest {
         void ExtendedFormatStatusReply1() throws Exception {
             byte[] bytes = "F9073800AAAA000095990000000055550000000000005555555548\r\n".getBytes(StandardCharsets.UTF_8);
             ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-            requestContext = new RequestContext(false, true, false);
+            requestContext = new RequestContext(true);
             cBusOptions = new CBusOptions(false, false, false, true, false, false, false, false, true);
             CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
             assertThat(msg).isNotNull();
@@ -452,7 +452,7 @@ public class ReferenceTest {
         void ExtendedFormatStatusReply2() throws Exception {
             byte[] bytes = "F907380B0000000000005555000000000000000000000000000013\r\n".getBytes(StandardCharsets.UTF_8);
             ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-            requestContext = new RequestContext(false, true, false);
+            requestContext = new RequestContext(true);
             cBusOptions = new CBusOptions(false, false, false, true, false, false, false, false, true);
             CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
             assertThat(msg).isNotNull();
@@ -464,7 +464,7 @@ public class ReferenceTest {
         void ExtendedFormatStatusReply3() throws Exception {
             byte[] bytes = "F70738160000000000000000000000000000000000000000B4\r\n".getBytes(StandardCharsets.UTF_8);
             ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-            requestContext = new RequestContext(false, true, false);
+            requestContext = new RequestContext(true);
             cBusOptions = new CBusOptions(false, false, false, true, false, false, false, false, true);
             CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
             assertThat(msg).isNotNull();
@@ -501,13 +501,12 @@ public class ReferenceTest {
             void LightningStatusReply1() throws Exception {
                 byte[] bytes = "D83800A8AA02000000000000000000000000000000000000009C\r\n".getBytes(StandardCharsets.UTF_8);
                 ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-                requestContext = new RequestContext(false, true, false);
+                requestContext = new RequestContext(true);
                 cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
                 CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                 assertThat(msg).isNotNull();
                 System.out.println(msg);
-                StandardFormatStatusReply reply = ((EncodedReplyStandardFormatStatusReply) ((ReplyEncodedReply) ((ReplyOrConfirmationReply) ((CBusMessageToClient) msg).getReply()).getReply()).getEncodedReply()).getReply();
-                System.out.println(reply);
+                System.out.println(((ReplyEncodedReply) ((ReplyOrConfirmationReply) ((CBusMessageToClient) msg).getReply()).getReply()).getEncodedReply());
                 assertMessageMatches(bytes, msg);
             }
 
@@ -519,7 +518,7 @@ public class ReferenceTest {
                 CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                 assertThat(msg).isNotNull();
                 System.out.println(msg);
-                System.out.println(((EncodedReplyStandardFormatStatusReply) ((ReplyEncodedReply) ((ReplyOrConfirmationReply) ((CBusMessageToClient) msg).getReply()).getReply()).getEncodedReply()).getReply());
+                System.out.println(((ReplyEncodedReply) ((ReplyOrConfirmationReply) ((CBusMessageToClient) msg).getReply()).getReply()).getEncodedReply());
                 assertMessageMatches(bytes, msg);
             }
 
@@ -531,15 +530,17 @@ public class ReferenceTest {
                 CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                 assertThat(msg).isNotNull();
                 System.out.println(msg);
-                System.out.println(((EncodedReplyStandardFormatStatusReply) ((ReplyEncodedReply) ((ReplyOrConfirmationReply) ((CBusMessageToClient) msg).getReply()).getReply()).getEncodedReply()).getReply());
+                System.out.println(((ReplyEncodedReply) ((ReplyOrConfirmationReply) ((CBusMessageToClient) msg).getReply()).getReply()).getEncodedReply());
                 assertMessageMatches(bytes, msg);
             }
 
             @Test
             void LightningStatusReply4() throws Exception {
-                byte[] bytes = "86999900F8003800A8AA0200000000000000000000000000000000000000C4\r\n".getBytes(StandardCharsets.UTF_8);
+                // TODO: the command header seems wrong as it is missing a byte
+                //byte[] bytes = "86999900F8003800A8AA0200000000000000000000000000000000000000C4\r\n".getBytes(StandardCharsets.UTF_8);
+                byte[] bytes = "86999900F9003800A8AA0200000000000000000000000000000000000000C3\r\n".getBytes(StandardCharsets.UTF_8);
                 ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-                cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
+                cBusOptions = new CBusOptions(false, false, false, true, false, false, false, false, true);
                 CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                 assertThat(msg).isNotNull();
                 System.out.println(msg);
@@ -550,9 +551,11 @@ public class ReferenceTest {
 
             @Test
             void LightningStatusReply5() throws Exception {
-                byte[] bytes = "86999900F800385800000000000000000000000000000000000000000000C0\r\n".getBytes(StandardCharsets.UTF_8);
+                // TODO: the command header seems wrong as it is missing a byte
+                // byte[] bytes = "86999900F800385800000000000000000000000000000000000000000000C0\r\n".getBytes(StandardCharsets.UTF_8);
+                byte[] bytes = "86999900F900385800000000000000000000000000000000000000000000BF\r\n".getBytes(StandardCharsets.UTF_8);
                 ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-                cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
+                cBusOptions = new CBusOptions(false, false, false, true, false, false, false, false, true);
                 CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                 assertThat(msg).isNotNull();
                 System.out.println(msg);
@@ -563,10 +566,11 @@ public class ReferenceTest {
             @Test
             void LightningStatusReply6() throws Exception {
                 // TODO: wrong checksum in this example???
+                // TODO: the command header seems wrong as it is missing a byte
                 //byte[] bytes = "86999900F60038B000000000000000000000000000000000000000008F\r\n".getBytes(StandardCharsets.UTF_8);
-                byte[] bytes = "86999900F60038B000000000000000000000000000000000000000006A\r\n".getBytes(StandardCharsets.UTF_8);
+                byte[] bytes = "86999900F70038B0000000000000000000000000000000000000000069\r\n".getBytes(StandardCharsets.UTF_8);
                 ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-                cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
+                cBusOptions = new CBusOptions(false, false, false, true, false, false, false, false, true);
                 CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                 assertThat(msg).isNotNull();
                 System.out.println(msg);
@@ -732,7 +736,7 @@ public class ReferenceTest {
                 void writeSomethingResponse() throws Exception {
                     byte[] bytes = "g.322100AD\r\n".getBytes(StandardCharsets.UTF_8);
                     ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-                    requestContext = new RequestContext(true, false, false);
+                    requestContext = new RequestContext(false);
                     CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                     assertThat(msg).isNotNull();
                     System.out.println(msg);
@@ -753,7 +757,7 @@ public class ReferenceTest {
                 void writeSomethingResponse2() throws Exception {
                     byte[] bytes = "g.3242008C\r\n".getBytes(StandardCharsets.UTF_8);
                     ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-                    requestContext = new RequestContext(true, false, false);
+                    requestContext = new RequestContext(false);
                     CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                     assertThat(msg).isNotNull();
                     System.out.println(msg);
@@ -774,7 +778,7 @@ public class ReferenceTest {
                 void writeSomethingResponse3() throws Exception {
                     byte[] bytes = "g.8600000032300000\r\n".getBytes(StandardCharsets.UTF_8);
                     ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-                    requestContext = new RequestContext(true, false, false);
+                    requestContext = new RequestContext(false);
                     CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                     assertThat(msg).isNotNull();
                     System.out.println(msg);
@@ -959,7 +963,7 @@ public class ReferenceTest {
             void BigMMI1() throws Exception {
                 byte[] bytes = "D8380068AA0140550550001000000014000000000000000000CF\r\n".getBytes(StandardCharsets.UTF_8);
                 ReadBufferByteBased readBufferByteBased = new ReadBufferByteBased(bytes);
-                cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, true);
+                cBusOptions = new CBusOptions(false, false, false, false, false, false, false, false, false);
                 CBusMessage msg = CBusMessage.staticParse(readBufferByteBased, true, requestContext, cBusOptions);
                 assertThat(msg).isNotNull();
                 System.out.println(msg);
diff --git a/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec b/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec
index 234bb8816..3c18bd8e1 100644
--- a/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec
+++ b/protocols/c-bus/src/main/resources/protocols/cbus/c-bus.mspec
@@ -22,10 +22,6 @@
 ]
 
 [type RequestContext
-    // Useful for response parsing: Set this to true if you send a CAL before. This will change the way the response will be parsed
-    [simple   bit       sendCalCommandBefore        ]
-    // Useful for response parsing: Set this to true if you send a SAL status request request level before. This will change the way the response will be parsed
-    [simple   bit       sendStatusRequestLevelBefore  ]
     // Useful for response parsing: Set this to true if you send a identify request before. This will change the way the response will be parsed
     [simple   bit       sendIdentifyRequestBefore   ]
 ]
@@ -584,20 +580,30 @@
             [simple uint 8    code                                                          ]
         ]
         ['STATUS'           *Status(CALCommandTypeContainer commandTypeContainer)               // Reply
-            [simple ApplicationIdContainer application                                                 ]
-            [simple uint 8                 blockStart                                                  ]
-            [array  byte                   data        count 'commandTypeContainer.numBytes - 2'       ]
+            [simple     ApplicationIdContainer
+                                application                                 ]
+            [simple     uint 8  blockStart                                  ]
+            [array      StatusByte
+                                statusBytes
+                                    count
+                                    'commandTypeContainer.numBytes - 2'     ]
         ]
         ['STATUS_EXTENDED'  *StatusExtended(CALCommandTypeContainer commandTypeContainer)       // Reply
-            [simple uint 8                 coding                                                      ]
-            [virtual bit                   isBinaryBySerialInterface 'coding == 0x00'                  ]
-            [virtual bit                   isBinaryByElsewhere       'coding == 0x40'                  ]
-            [virtual bit                   isLevelBySerialInterface  'coding == 0x07'                  ]
-            [virtual bit                   isLevelByElsewhere        'coding == 0x47'                  ]
-            [virtual bit                   isReserved                '!isBinaryBySerialInterface && !isBinaryByElsewhere && !isLevelBySerialInterface && !isLevelByElsewhere']
-            [simple ApplicationIdContainer application                                                 ]
-            [simple uint 8                 blockStart                                                  ]
-            [array  byte                   data        count 'commandTypeContainer.numBytes - 2'       ] // TODO: this should be -3 but somehow it is -2 with the examples
+            [simple     StatusCoding
+                                coding                                      ]
+            [simple     ApplicationIdContainer
+                                application                                 ]
+            [simple     uint 8  blockStart                                  ]
+            [virtual    uint 5  numberOfStatusBytes '(coding == StatusCoding.BINARY_BY_THIS_SERIAL_INTERFACE || coding == StatusCoding.BINARY_BY_ELSEWHERE)?(commandTypeContainer.numBytes - 3):(0)']
+            [virtual    uint 5  numberOfLevelInformation '(coding == StatusCoding.LEVEL_BY_THIS_SERIAL_INTERFACE || coding == StatusCoding.LEVEL_BY_ELSEWHERE)?((commandTypeContainer.numBytes - 3) / 2):(0)']
+            [array      StatusByte
+                                statusBytes
+                                    count
+                                    'numberOfStatusBytes'                   ]
+            [array      LevelInformation
+                                levelInformation
+                                    count
+                                    'numberOfLevelInformation'              ]
         ]
     ]
     // Note: we omit the request context as it is only useful for the first element
@@ -1467,21 +1473,12 @@
 [type EncodedReply(CBusOptions cBusOptions, RequestContext requestContext)
     [peek    byte peekedByte                                                        ]
     // TODO: if we reliable can detect this with the mask we don't need the request context anymore
-    [virtual bit  isMonitoredSAL            '(peekedByte & 0x3F) == 0x05 || peekedByte == 0x00 || (peekedByte & 0xF8) == 0x00'] // First check if it is in long mode, second for short mode, third for bridged short mode
-    [virtual bit  isCalCommand              '(peekedByte & 0x3F) == 0x06 || requestContext.sendCalCommandBefore'    ] // The 0x3F and 0x06 doesn't seem to work always
-    [virtual bit  isStandardFormatStatus    '(peekedByte & 0xC0) == 0xC0 && !cBusOptions.exstat'                    ]
-    [virtual bit  isExtendedFormatStatus    '(peekedByte & 0xE0) == 0xE0 && (cBusOptions.exstat || requestContext.sendStatusRequestLevelBefore)']
-    [typeSwitch isMonitoredSAL, isCalCommand, isStandardFormatStatus, isExtendedFormatStatus
-        ['true', 'false', 'false'   MonitoredSALReply
+    [virtual bit  isMonitoredSAL            '((peekedByte & 0x3F) == 0x05 || peekedByte == 0x00 || (peekedByte & 0xF8) == 0x00) && !requestContext.sendIdentifyRequestBefore'] // First check if it is in long mode, second for short mode, third for bridged short mode
+    [typeSwitch isMonitoredSAL
+        ['true'  MonitoredSALReply
             [simple   MonitoredSAL('cBusOptions')                   monitoredSAL    ]
         ]
-        [*, *, 'true', 'false'      *StandardFormatStatusReply
-            [simple   StandardFormatStatusReply                     reply           ]
-        ]
-        [*, *, *, 'true'            *ExtendedFormatStatusReply
-            [simple   ExtendedFormatStatusReply                     reply           ]
-        ]
-        [*, 'true', *, *            *CALReply
+        [*       *CALReply
             [simple   CALReply('cBusOptions', 'requestContext')     calReply        ]
         ]
     ]
@@ -1570,48 +1567,6 @@
     [simple byte value]
 ]
 
-[type StandardFormatStatusReply
-    [simple     StatusHeader
-                        statusHeader                                ]
-    [simple     ApplicationIdContainer
-                        application                                 ]
-    [simple     uint 8  blockStart                                  ]
-    [array      StatusByte
-                        statusBytes
-                        count
-                        'statusHeader.numberOfCharacterPairs - 2'   ]
-]
-
-[type StatusHeader
-    [reserved   uint 2                 '0x3'                        ]
-    [simple     uint 6  numberOfCharacterPairs                      ]
-]
-
-[type ExtendedFormatStatusReply
-    [simple     ExtendedStatusHeader
-                        statusHeader                                ]
-    [simple     StatusCoding
-                        coding                                      ]
-    [simple     ApplicationIdContainer
-                        application                                 ]
-    [simple     uint 8  blockStart                                  ]
-    [virtual    uint 5  numberOfStatusBytes '(coding == StatusCoding.BINARY_BY_THIS_SERIAL_INTERFACE || coding == StatusCoding.BINARY_BY_ELSEWHERE)?(statusHeader.numberOfCharacterPairs - 3):(0)']
-    [virtual    uint 5  numberOfLevelInformation '(coding == StatusCoding.LEVEL_BY_THIS_SERIAL_INTERFACE || coding == StatusCoding.LEVEL_BY_ELSEWHERE)?((statusHeader.numberOfCharacterPairs - 3) / 2):(0)']
-    [array      StatusByte
-                        statusBytes
-                            count
-                            'numberOfStatusBytes'                   ]
-    [array      LevelInformation
-                        levelInformation
-                            count
-                            'numberOfLevelInformation'              ]
-]
-
-[type ExtendedStatusHeader
-    [reserved   uint 3                 '0x7'                        ]
-    [simple     uint 5  numberOfCharacterPairs                      ]
-]
-
 [enum byte StatusCoding
     ['0x00' BINARY_BY_THIS_SERIAL_INTERFACE     ]
     ['0x40' BINARY_BY_ELSEWHERE                 ]