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 2024/09/13 15:02:15 UTC

(plc4x) branch develop updated: fix(plc4go/bacnetip): fix most of the broken implementation

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

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


The following commit(s) were added to refs/heads/develop by this push:
     new 9ba4d7f48d fix(plc4go/bacnetip): fix most of the broken implementation
9ba4d7f48d is described below

commit 9ba4d7f48d1921ed57748475e24d7b116efe2e36
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Sep 13 17:02:03 2024 +0200

    fix(plc4go/bacnetip): fix most of the broken implementation
---
 .../internal/bacnetip/bacgopes/apdu/apdu_APDU.go   |   3 +-
 .../apdu/apdu_ConfirmedPrivateTransferRequest.go   |   2 +-
 .../bacnetip/bacgopes/apdu/apdu_WhoIsRequest.go    |   2 +-
 .../bacnetip/bacgopes/app/app_Application.go       |   4 +-
 .../bacgopes/app/app_ApplicationIOController.go    |   2 +-
 .../appservice_ApplicationServiceAccessPoint.go    |   8 +-
 .../bacgopes/appservice/appservice_ClientSSM.go    |  52 ++++----
 .../bacnetip/bacgopes/appservice/appservice_SSM.go |   2 +-
 .../bacgopes/appservice/appservice_ServerSSM.go    |  40 +++---
 .../appservice_StateMachineAccessPoint.go          |  20 +--
 .../bacgopes/basetypes/basetypes_NameValue.go      |   4 +-
 plc4go/internal/bacnetip/bacgopes/bvll/bvll.go     |  14 +-
 .../internal/bacnetip/bacgopes/bvll/bvll_BVLCI.go  |   2 +-
 .../internal/bacnetip/bacgopes/bvll/bvll_BVLPDU.go |   2 +
 .../bacnetip/bacgopes/bvll/bvll_ForwardedNPDU.go   |  11 +-
 .../bvll/bvll_ReadForeignDeviceTableAck.go         |   2 +-
 .../bvllservice/bvllservice_AnnexJCodec.go         |   4 +-
 .../bacgopes/bvllservice/bvllservice_BIPBBMD.go    |  50 ++++----
 .../bacgopes/bvllservice/bvllservice_BIPForeign.go |  32 ++---
 .../bacgopes/bvllservice/bvllservice_BIPSimple.go  |   4 +-
 .../bvllservice/bvllservice_UDPMultiplexer.go      |   4 +-
 .../bvllservice/bvllservice__MultiplexClient.go    |   2 +-
 .../bvllservice/bvllservice__MultiplexServer.go    |   2 +-
 plc4go/internal/bacnetip/bacgopes/comm/comm_PDU.go |   9 +-
 plc4go/internal/bacnetip/bacgopes/comp/comp.go     |  45 +++++--
 .../bacgopes/constructeddata/constructeddata.go    |   6 +-
 .../bacnetip/bacgopes/debugging/debugging.go       |   8 +-
 .../bacnetip/bacgopes/iocb/iocb_IOQController.go   |   8 +-
 .../netservice/netservice_NetworkAdapter.go        |   2 +-
 .../netservice_NetworkServiceAccessPoint.go        |   8 +-
 .../netservice/netservice_NetworkServiceElement.go |  22 ++--
 .../internal/bacnetip/bacgopes/npdu/npdu_NPCI.go   |   2 +-
 .../internal/bacnetip/bacgopes/npdu/npdu_NPDU.go   |   3 +-
 .../internal/bacnetip/bacgopes/pdu/comm_PDUData.go |  13 +-
 plc4go/internal/bacnetip/bacgopes/pdu/pdu_PDU.go   |   9 ++
 .../service/service_device_WhoIsIAmServices.go     |   4 +-
 .../internal/bacnetip/bacgopes/tests/quick/bvll.go |  24 ++--
 .../internal/bacnetip/bacgopes/tests/quick/pdu.go  |   4 +-
 .../internal/bacnetip/bacgopes/tests/settings.go   |  31 -----
 .../bacgopes/tests/state_machine/state_machine.go  |   3 +-
 .../state_machine/state_machine_StateMachine.go    |  27 ++--
 ...n.go => state_machine_stateMachine_plc4xgen.go} |   6 +-
 ...elpers_BIPSimpleApplicationLayerStateMachine.go |   4 +-
 .../tests/test_bvll/helpers_BIPStateMachine.go     |   3 +
 .../tests/test_bvll/helpers_FauxMultiplexer.go     |   4 +-
 .../bacgopes/tests/test_bvll/test_bbmd_test.go     |  20 +--
 .../bacgopes/tests/test_bvll/test_codec_test.go    | 142 ++++++++-------------
 .../bacgopes/tests/test_bvll/test_foreign_test.go  |  55 ++++----
 .../bacgopes/tests/test_bvll/test_simple_test.go   |  11 +-
 .../tests/test_comm/test_capability_test.go        |   2 +-
 .../test_constructed_data/test_sequence_test.go    |  18 +--
 .../bacgopes/tests/test_network/helpers.go         |   8 +-
 .../bacgopes/tests/test_network/test_net_1_test.go |  10 +-
 .../bacgopes/tests/test_network/test_net_2_test.go |  12 +-
 .../bacgopes/tests/test_network/test_net_3_test.go |  32 +++--
 .../bacnetip/bacgopes/tests/test_npdu/helpers.go   |   4 +-
 .../bacgopes/tests/test_npdu/test_codec_test.go    | 111 ++++++++--------
 .../tests/test_primitive_data/test_tag_test.go     |   3 +-
 .../tests/test_segmentation/test_1_test.go         |   9 +-
 .../bacgopes/tests/test_service/helpers.go         |  13 +-
 .../test_client_state_machine_test.go              |   3 +-
 .../test_server_state_machine_test.go              |   3 +-
 .../test_service_access_point_test.go              |   8 +-
 .../test_utilities/test_state_machine_test.go      |  35 +++--
 .../tests/test_utilities/test_time_machine_test.go |   4 +-
 .../bacgopes/tests/test_vlan/test_network_test.go  |   4 +-
 plc4go/internal/bacnetip/bacgopes/tests/tests.go   |   4 +-
 .../tests/time_machine/time_machine_TimeMachine.go |   7 -
 .../tests/trapped_classes/trapped_classes.go       |   4 +
 ...ped_classes_TrappedApplicationServiceElement.go |  40 ++++--
 .../trapped_classes_TrappedClient.go               |  15 ++-
 ...> trapped_classes_TrappedClientStateMachine.go} |  28 +++-
 .../trapped_classes_TrappedServer.go               |  18 ++-
 .../trapped_classes_TrappedServerStateMachine.go   |  14 ++
 .../trapped_classes_TrappedServiceAccessPoint.go   |  32 ++++-
 .../trapped_classes_TrappedStateMachine.go         |  10 +-
 .../trapped_classes/trapped_classes_Trapper.go     |  21 +++
 .../internal/bacnetip/bacgopes/udp/udp_UDPActor.go |   2 +-
 .../bacnetip/bacgopes/udp/udp_UDPDirector.go       |   4 +-
 .../bacnetip/bacgopes/vlan/vlan_IPRouterNode.go    |   2 +-
 .../bacnetip/bacgopes/vlan/vlan_Network.go         |   4 +-
 .../internal/bacnetip/bacgopes/vlan/vlan_Node.go   |   2 +-
 82 files changed, 674 insertions(+), 553 deletions(-)

diff --git a/plc4go/internal/bacnetip/bacgopes/apdu/apdu_APDU.go b/plc4go/internal/bacnetip/bacgopes/apdu/apdu_APDU.go
index 8bdde67c6d..b319bb7486 100644
--- a/plc4go/internal/bacnetip/bacgopes/apdu/apdu_APDU.go
+++ b/plc4go/internal/bacnetip/bacgopes/apdu/apdu_APDU.go
@@ -57,7 +57,8 @@ func NewAPDU(apdu readWriteModel.APDU, opts ...func(*__APDU)) (APDU, error) {
 		opt(a)
 	}
 	a._APCI = NewAPCI(apdu).(*_APCI)
-	a.PDUData = NewPDUData(NoArgs, NoKWArgs)
+	a.PDUData = NewPDUData(NoArgs, NoKWArgs())
+	a.AddExtraPrinters(a.PDUData.(DebugContentPrinter))
 	// Do a post construct for a bit more easy initialization
 	for _, f := range a._postConstruct {
 		f()
diff --git a/plc4go/internal/bacnetip/bacgopes/apdu/apdu_ConfirmedPrivateTransferRequest.go b/plc4go/internal/bacnetip/bacgopes/apdu/apdu_ConfirmedPrivateTransferRequest.go
index 5c38d5951c..948b03a37b 100644
--- a/plc4go/internal/bacnetip/bacgopes/apdu/apdu_ConfirmedPrivateTransferRequest.go
+++ b/plc4go/internal/bacnetip/bacgopes/apdu/apdu_ConfirmedPrivateTransferRequest.go
@@ -55,7 +55,7 @@ func NewConfirmedPrivateTransferRequest(_ Args, _ KWArgs) (*ConfirmedPrivateTran
 			nil,
 			0,
 		),
-		NoKWArgs,
+		NoKWArgs(),
 		WithConfirmedRequestSequenceExtension(c),
 	)
 	if err != nil {
diff --git a/plc4go/internal/bacnetip/bacgopes/apdu/apdu_WhoIsRequest.go b/plc4go/internal/bacnetip/bacgopes/apdu/apdu_WhoIsRequest.go
index 7653ea688a..2a2ac86e56 100644
--- a/plc4go/internal/bacnetip/bacgopes/apdu/apdu_WhoIsRequest.go
+++ b/plc4go/internal/bacnetip/bacgopes/apdu/apdu_WhoIsRequest.go
@@ -50,7 +50,7 @@ func NewWhoIsRequest() (*WhoIsRequest, error) {
 			readWriteModel.CreateBACnetContextTagUnsignedInteger(1, 0),
 			0,
 		),
-		NoKWArgs,
+		NoKWArgs(),
 		WithUnconfirmedRequestSequenceExtension(w),
 	)
 	if err != nil {
diff --git a/plc4go/internal/bacnetip/bacgopes/app/app_Application.go b/plc4go/internal/bacnetip/bacgopes/app/app_Application.go
index 256d78d2f1..629bf79215 100644
--- a/plc4go/internal/bacnetip/bacgopes/app/app_Application.go
+++ b/plc4go/internal/bacnetip/bacgopes/app/app_Application.go
@@ -113,7 +113,7 @@ func NewApplication(localLog zerolog.Logger, localDevice *LocalDeviceObject, opt
 	if !a._startupDisabled {
 		for fn := range a.CapabilityFunctions("startup") {
 			localLog.Debug().Interface("fn", fn).Msg("startup fn")
-			Deferred(fn, NoArgs, NoKWArgs)
+			Deferred(fn, NoArgs, NoKWArgs())
 		}
 	}
 	return a, nil
@@ -273,7 +273,7 @@ func (a *Application) Indication(args Args, kwArgs KWArgs) error {
 		a.log.Debug().Err(err).Msg("err result")
 		panic("do it")
 		// TODO: do proper mapping
-		if err := a.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, readWriteModel.NewAPDUError(0, readWriteModel.BACnetConfirmedServiceChoice_CREATE_OBJECT, nil, 0)))), NoKWArgs); err != nil {
+		if err := a.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, readWriteModel.NewAPDUError(0, readWriteModel.BACnetConfirmedServiceChoice_CREATE_OBJECT, nil, 0)))), NoKWArgs()); err != nil {
 			return err
 		}
 	}
diff --git a/plc4go/internal/bacnetip/bacgopes/app/app_ApplicationIOController.go b/plc4go/internal/bacnetip/bacgopes/app/app_ApplicationIOController.go
index aaa5fdb260..1460c434c1 100644
--- a/plc4go/internal/bacnetip/bacgopes/app/app_ApplicationIOController.go
+++ b/plc4go/internal/bacnetip/bacgopes/app/app_ApplicationIOController.go
@@ -147,7 +147,7 @@ func (a *ApplicationIOController) _AppRequest(apdu PDU) {
 	a.log.Debug().Stringer("apdu", apdu).Msg("_AppRequest")
 
 	// send it downstream, bypass the guard
-	if err := a.Application.Request(NA(apdu), NoKWArgs); err != nil {
+	if err := a.Application.Request(NA(apdu), NoKWArgs()); err != nil {
 		a.log.Error().Stack().Err(err).Msg("Uh oh")
 		return
 	}
diff --git a/plc4go/internal/bacnetip/bacgopes/appservice/appservice_ApplicationServiceAccessPoint.go b/plc4go/internal/bacnetip/bacgopes/appservice/appservice_ApplicationServiceAccessPoint.go
index a0b5b94f8f..0969a5f86a 100644
--- a/plc4go/internal/bacnetip/bacgopes/appservice/appservice_ApplicationServiceAccessPoint.go
+++ b/plc4go/internal/bacnetip/bacgopes/appservice/appservice_ApplicationServiceAccessPoint.go
@@ -114,7 +114,7 @@ func (a *ApplicationServiceAccessPoint) Indication(args Args, kwArgs KWArgs) err
 		// no error so far, keep going
 		if errorFound == nil {
 			a.log.Trace().Msg("no decoding error")
-			if err := a.SapRequest(NA(xpdu), NoKWArgs); err != nil {
+			if err := a.SapRequest(NA(xpdu), NoKWArgs()); err != nil {
 				panic("if no abort or reject bubble up")
 				errorFound = err
 			}
@@ -126,7 +126,7 @@ func (a *ApplicationServiceAccessPoint) Indication(args Args, kwArgs KWArgs) err
 			a.log.Debug().Err(errorFound).Msg("got error")
 
 			// TODO: map it to a error... code temporary placeholder
-			return a.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, readWriteModel.NewAPDUReject(_apdu.GetInvokeId(), nil, 0)))), NoKWArgs)
+			return a.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, readWriteModel.NewAPDUReject(_apdu.GetInvokeId(), nil, 0)))), NoKWArgs())
 		}
 	case readWriteModel.APDUUnconfirmedRequest:
 		var apduService readWriteModel.BACnetUnconfirmedServiceChoice
@@ -147,7 +147,7 @@ func (a *ApplicationServiceAccessPoint) Indication(args Args, kwArgs KWArgs) err
 		}
 
 		// forward the decoded packet
-		if err := a.SapRequest(NA(xpdu), NoKWArgs); err != nil {
+		if err := a.SapRequest(NA(xpdu), NoKWArgs()); err != nil {
 			panic("if no abort or reject bubble up")
 		}
 	default:
@@ -189,7 +189,7 @@ func (a *ApplicationServiceAccessPoint) SapIndication(args Args, kwArgs KWArgs)
 	}
 
 	// forward the encoded packet
-	err := a.Request(NA(xpdu), NoKWArgs)
+	err := a.Request(NA(xpdu), NoKWArgs())
 	if err != nil {
 		return errors.Wrap(err, "error forwarding the request ")
 	}
diff --git a/plc4go/internal/bacnetip/bacgopes/appservice/appservice_ClientSSM.go b/plc4go/internal/bacnetip/bacgopes/appservice/appservice_ClientSSM.go
index 157d814ff0..864e47aedf 100644
--- a/plc4go/internal/bacnetip/bacgopes/appservice/appservice_ClientSSM.go
+++ b/plc4go/internal/bacnetip/bacgopes/appservice/appservice_ClientSSM.go
@@ -298,10 +298,10 @@ func (c *ClientSSM) segmentedRequest(apdu PDU) error {
 			if err != nil {
 				return errors.Wrap(err, "error creating abort")
 			}
-			if err := c.Request(NA(abort), NoKWArgs); err != nil { // send it ot the device
+			if err := c.Request(NA(abort), NoKWArgs()); err != nil { // send it ot the device
 				c.log.Debug().Err(err).Msg("error sending request")
 			}
-			if err := c.Response(NA(abort), NoKWArgs); err != nil { // send it ot the application
+			if err := c.Response(NA(abort), NoKWArgs()); err != nil { // send it ot the application
 				c.log.Debug().Err(err).Msg("error sending response")
 			}
 		} else {
@@ -317,10 +317,10 @@ func (c *ClientSSM) segmentedRequest(apdu PDU) error {
 			if err != nil {
 				return errors.Wrap(err, "error creating abort")
 			}
-			if err := c.Request(NA(abort), NoKWArgs); err != nil { // send it ot the device
+			if err := c.Request(NA(abort), NoKWArgs()); err != nil { // send it ot the device
 				c.log.Debug().Err(err).Msg("error sending request")
 			}
-			if err := c.Response(NA(abort), NoKWArgs); err != nil { // send it ot the application
+			if err := c.Response(NA(abort), NoKWArgs()); err != nil { // send it ot the application
 				c.log.Debug().Err(err).Msg("error sending response")
 			}
 		} else if !_apdu.GetSegmentedMessage() {
@@ -328,7 +328,7 @@ func (c *ClientSSM) segmentedRequest(apdu PDU) error {
 			if err := c.setState(SSMState_COMPLETED, nil); err != nil {
 				return errors.Wrap(err, "error switching state")
 			}
-			if err := c.Response(NA(apdu), NoKWArgs); err != nil {
+			if err := c.Response(NA(apdu), NoKWArgs()); err != nil {
 				c.log.Debug().Err(err).Msg("error sending response")
 			}
 		} else {
@@ -351,7 +351,7 @@ func (c *ClientSSM) segmentedRequest(apdu PDU) error {
 		if err := c.setState(SSMState_COMPLETED, nil); err != nil {
 			return errors.Wrap(err, "error switching state")
 		}
-		if err := c.Response(NA(apdu), NoKWArgs); err != nil {
+		if err := c.Response(NA(apdu), NoKWArgs()); err != nil {
 			c.log.Debug().Err(err).Msg("error sending response")
 		}
 	default:
@@ -374,7 +374,7 @@ func (c *ClientSSM) segmentedRequestTimeout() error {
 			if err != nil {
 				return errors.Wrap(err, "error getting first segment")
 			}
-			if err := c.Request(NA(apdu), NoKWArgs); err != nil {
+			if err := c.Request(NA(apdu), NoKWArgs()); err != nil {
 				c.log.Debug().Err(err).Msg("error sending request")
 			}
 		} else {
@@ -389,7 +389,7 @@ func (c *ClientSSM) segmentedRequestTimeout() error {
 		if err != nil {
 			return errors.Wrap(err, "error creating abort")
 		}
-		if err := c.Response(NA(abort), NoKWArgs); err != nil {
+		if err := c.Response(NA(abort), NoKWArgs()); err != nil {
 			c.log.Debug().Err(err).Msg("error sending response")
 		}
 	}
@@ -406,7 +406,7 @@ func (c *ClientSSM) awaitConfirmation(apdu PDU) error {
 		if err := c.setState(SSMState_ABORTED, nil); err != nil {
 			return errors.Wrap(err, "error switching state")
 		}
-		if err := c.Response(NA(apdu), NoKWArgs); err != nil {
+		if err := c.Response(NA(apdu), NoKWArgs()); err != nil {
 			c.log.Debug().Err(err).Msg("error sending response")
 		}
 	case readWriteModel.APDUSimpleAck, readWriteModel.APDUError, readWriteModel.APDUReject:
@@ -415,7 +415,7 @@ func (c *ClientSSM) awaitConfirmation(apdu PDU) error {
 		if err := c.setState(SSMState_COMPLETED, nil); err != nil {
 			return errors.Wrap(err, "error switching state")
 		}
-		if err := c.Response(NA(apdu), NoKWArgs); err != nil {
+		if err := c.Response(NA(apdu), NoKWArgs()); err != nil {
 			c.log.Debug().Err(err).Msg("error sending response")
 		}
 	case readWriteModel.APDUComplexAck:
@@ -427,7 +427,7 @@ func (c *ClientSSM) awaitConfirmation(apdu PDU) error {
 			if err := c.setState(SSMState_COMPLETED, nil); err != nil {
 				return errors.Wrap(err, "error switching state")
 			}
-			if err := c.Response(NA(apdu), NoKWArgs); err != nil {
+			if err := c.Response(NA(apdu), NoKWArgs()); err != nil {
 				c.log.Debug().Err(err).Msg("error sending response")
 			}
 		} else if c.segmentationSupported != readWriteModel.BACnetSegmentation_SEGMENTED_RECEIVE && c.segmentationSupported != readWriteModel.BACnetSegmentation_SEGMENTED_BOTH {
@@ -437,7 +437,7 @@ func (c *ClientSSM) awaitConfirmation(apdu PDU) error {
 			if err != nil {
 				return errors.Wrap(err, "error creating abort")
 			}
-			if err := c.Response(NA(abort), NoKWArgs); err != nil {
+			if err := c.Response(NA(abort), NoKWArgs()); err != nil {
 				c.log.Debug().Err(err).Msg("error sending response")
 			}
 		} else if *_apdu.GetSequenceNumber() == 0 {
@@ -457,7 +457,7 @@ func (c *ClientSSM) awaitConfirmation(apdu PDU) error {
 
 			// send back a segment ack
 			segmentAck := readWriteModel.NewAPDUSegmentAck(false, false, c.invokeId, c.initialSequenceNumber, *c.actualWindowSize, 0)
-			if err := c.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segmentAck))), NoKWArgs); err != nil {
+			if err := c.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segmentAck))), NoKWArgs()); err != nil {
 				c.log.Debug().Err(err).Msg("error sending request")
 			}
 		} else {
@@ -467,10 +467,10 @@ func (c *ClientSSM) awaitConfirmation(apdu PDU) error {
 			if err != nil {
 				return errors.Wrap(err, "error creating abort")
 			}
-			if err := c.Request(NA(abort), NoKWArgs); err != nil { // send it ot the device
+			if err := c.Request(NA(abort), NoKWArgs()); err != nil { // send it ot the device
 				c.log.Debug().Err(err).Msg("error sending request")
 			}
-			if err := c.Response(NA(abort), NoKWArgs); err != nil { // send it ot the application
+			if err := c.Response(NA(abort), NoKWArgs()); err != nil { // send it ot the application
 				c.log.Debug().Err(err).Msg("error sending response")
 			}
 		}
@@ -496,7 +496,7 @@ func (c *ClientSSM) awaitConfirmationTimeout() error {
 		// save the retry count, indication acts like the request is coming from the application so the retryCount gets
 		//            re-initialized.
 		saveCount := c.retryCount
-		if err := c.Indication(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, c.segmentAPDU.originalApdu, KWCPCIDestination, c.pduAddress))), NoKWArgs); err != nil { // TODO: check that it is really the intention to re-send the original apdu here
+		if err := c.Indication(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, c.segmentAPDU.originalApdu, KWCPCIDestination, c.pduAddress))), NoKWArgs()); err != nil { // TODO: check that it is really the intention to re-send the original apdu here
 			return err
 		}
 		c.retryCount = saveCount
@@ -510,7 +510,7 @@ func (c *ClientSSM) awaitConfirmationTimeout() error {
 		if err != nil {
 			return errors.Wrap(err, "error creating abort")
 		}
-		if err := c.Response(NA(abort), NoKWArgs); err != nil {
+		if err := c.Response(NA(abort), NoKWArgs()); err != nil {
 			c.log.Debug().Err(err).Msg("error sending response")
 		}
 	}
@@ -529,10 +529,10 @@ func (c *ClientSSM) segmentedConfirmation(apdu PDU) error {
 		if err != nil {
 			return errors.Wrap(err, "error creating abort")
 		}
-		if err := c.Request(NA(abort), NoKWArgs); err != nil { // send it ot the device
+		if err := c.Request(NA(abort), NoKWArgs()); err != nil { // send it ot the device
 			c.log.Debug().Err(err).Msg("error sending request")
 		}
-		if err := c.Response(NA(abort), NoKWArgs); err != nil { // send it ot the application
+		if err := c.Response(NA(abort), NoKWArgs()); err != nil { // send it ot the application
 			c.log.Debug().Err(err).Msg("error sending response")
 		}
 	}
@@ -543,10 +543,10 @@ func (c *ClientSSM) segmentedConfirmation(apdu PDU) error {
 		if err != nil {
 			return errors.Wrap(err, "error creating abort")
 		}
-		if err := c.Request(NA(abort), NoKWArgs); err != nil { // send it ot the device
+		if err := c.Request(NA(abort), NoKWArgs()); err != nil { // send it ot the device
 			c.log.Debug().Err(err).Msg("error sending request")
 		}
-		if err := c.Response(NA(abort), NoKWArgs); err != nil { // send it ot the application
+		if err := c.Response(NA(abort), NoKWArgs()); err != nil { // send it ot the application
 			c.log.Debug().Err(err).Msg("error sending response")
 		}
 	}
@@ -561,7 +561,7 @@ func (c *ClientSSM) segmentedConfirmation(apdu PDU) error {
 		// segment received out of order
 		c.RestartTimer(c.segmentTimeout)
 		segmentAck := readWriteModel.NewAPDUSegmentAck(true, false, c.invokeId, c.initialSequenceNumber, *c.actualWindowSize, 0)
-		if err := c.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segmentAck))), NoKWArgs); err != nil {
+		if err := c.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segmentAck))), NoKWArgs()); err != nil {
 			c.log.Debug().Err(err).Msg("error sending request")
 		}
 		return nil
@@ -581,7 +581,7 @@ func (c *ClientSSM) segmentedConfirmation(apdu PDU) error {
 
 		// send final ack
 		segmentAck := readWriteModel.NewAPDUSegmentAck(false, false, c.invokeId, c.lastSequenceNumber, *c.actualWindowSize, 0)
-		if err := c.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segmentAck))), NoKWArgs); err != nil {
+		if err := c.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segmentAck))), NoKWArgs()); err != nil {
 			c.log.Debug().Err(err).Msg("error sending request")
 		}
 
@@ -595,7 +595,7 @@ func (c *ClientSSM) segmentedConfirmation(apdu PDU) error {
 		if err != nil {
 			return errors.Wrap(err, "error parsing apdu")
 		}
-		if err := c.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, parse))), NoKWArgs); err != nil {
+		if err := c.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, parse))), NoKWArgs()); err != nil {
 			c.log.Debug().Err(err).Msg("error sending response")
 		}
 	} else if *apduComplexAck.GetSequenceNumber() == c.initialSequenceNumber+*c.actualWindowSize {
@@ -604,7 +604,7 @@ func (c *ClientSSM) segmentedConfirmation(apdu PDU) error {
 		c.initialSequenceNumber = c.lastSequenceNumber
 		c.RestartTimer(c.segmentTimeout)
 		segmentAck := readWriteModel.NewAPDUSegmentAck(false, false, c.invokeId, c.lastSequenceNumber, *c.actualWindowSize, 0)
-		if err := c.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segmentAck))), NoKWArgs); err != nil { // send it ot the device
+		if err := c.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segmentAck))), NoKWArgs()); err != nil { // send it ot the device
 			c.log.Debug().Err(err).Msg("error sending request")
 		}
 	} else {
@@ -623,5 +623,5 @@ func (c *ClientSSM) segmentedConfirmationTimeout() error {
 	if err != nil {
 		return errors.Wrap(err, "error creating abort")
 	}
-	return c.Response(NA(abort), NoKWArgs)
+	return c.Response(NA(abort), NoKWArgs())
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/appservice/appservice_SSM.go b/plc4go/internal/bacnetip/bacgopes/appservice/appservice_SSM.go
index 0460154acc..3ce17f052f 100644
--- a/plc4go/internal/bacnetip/bacgopes/appservice/appservice_SSM.go
+++ b/plc4go/internal/bacnetip/bacgopes/appservice/appservice_SSM.go
@@ -383,7 +383,7 @@ func (s *SSM) fillWindow(sequenceNumber uint8) error {
 		if err != nil {
 			return errors.Wrapf(err, "Error sending out segment %d", i)
 		}
-		if err := s.ssmSAP.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, apdu.GetRootMessage(), KWCPCIDestination, s.pduAddress))), NoKWArgs); err != nil {
+		if err := s.ssmSAP.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, apdu.GetRootMessage(), KWCPCIDestination, s.pduAddress))), NoKWArgs()); err != nil {
 			s.log.Debug().Err(err).Msg("error sending request")
 		}
 		if moreFollows {
diff --git a/plc4go/internal/bacnetip/bacgopes/appservice/appservice_ServerSSM.go b/plc4go/internal/bacnetip/bacgopes/appservice/appservice_ServerSSM.go
index e0746e2779..a6820c85f5 100644
--- a/plc4go/internal/bacnetip/bacgopes/appservice/appservice_ServerSSM.go
+++ b/plc4go/internal/bacnetip/bacgopes/appservice/appservice_ServerSSM.go
@@ -197,7 +197,7 @@ func (s *ServerSSM) Confirmation(args Args, kwArgs KWArgs) error {
 					if err != nil {
 						return errors.Wrap(err, "Error creating abort")
 					}
-					return s.Response(NA(abort), NoKWArgs)
+					return s.Response(NA(abort), NoKWArgs())
 				}
 
 				// make sure client supports segmented receive
@@ -207,7 +207,7 @@ func (s *ServerSSM) Confirmation(args Args, kwArgs KWArgs) error {
 					if err != nil {
 						return errors.Wrap(err, "Error creating abort")
 					}
-					return s.Response(NA(abort), NoKWArgs)
+					return s.Response(NA(abort), NoKWArgs())
 				}
 
 				// make sure we don't exceed the number of segments in our response that the client said it was willing to accept
@@ -218,7 +218,7 @@ func (s *ServerSSM) Confirmation(args Args, kwArgs KWArgs) error {
 					if err != nil {
 						return errors.Wrap(err, "Error creating abort")
 					}
-					return s.Response(NA(abort), NoKWArgs)
+					return s.Response(NA(abort), NoKWArgs())
 				}
 			}
 
@@ -229,7 +229,7 @@ func (s *ServerSSM) Confirmation(args Args, kwArgs KWArgs) error {
 
 			// send out the first segment (or the whole thing)
 			if s.segmentCount == 1 {
-				if err := s.Response(args, NoKWArgs); err != nil {
+				if err := s.Response(args, NoKWArgs()); err != nil {
 					s.log.Debug().Err(err).Msg("error sending response")
 				}
 				if err := s.setState(SSMState_COMPLETED, nil); err != nil {
@@ -240,7 +240,7 @@ func (s *ServerSSM) Confirmation(args Args, kwArgs KWArgs) error {
 				if err != nil {
 					return errors.Wrap(err, "error getting first segment")
 				}
-				if err := s.Response(NA(segment), NoKWArgs); err != nil {
+				if err := s.Response(NA(segment), NoKWArgs()); err != nil {
 					s.log.Debug().Err(err).Msg("error sending response")
 				}
 				if err := s.setState(SSMState_SEGMENTED_RESPONSE, nil); err != nil {
@@ -352,7 +352,7 @@ func (s *ServerSSM) idle(apdu PDU) error {
 		if err := s.setState(SSMState_AWAIT_RESPONSE, nil); err != nil {
 			return errors.Wrap(err, "Error setting state to aborted")
 		}
-		return s.Request(NA(apdu), NoKWArgs)
+		return s.Request(NA(apdu), NoKWArgs())
 	}
 
 	// make sure we support segmented requests
@@ -361,7 +361,7 @@ func (s *ServerSSM) idle(apdu PDU) error {
 		if err != nil {
 			return errors.Wrap(err, "error creating abort")
 		}
-		return s.Response(NA(abort), NoKWArgs)
+		return s.Response(NA(abort), NoKWArgs())
 	}
 
 	// save the response and set the segmentation context
@@ -390,7 +390,7 @@ func (s *ServerSSM) idle(apdu PDU) error {
 	// send back a segment ack
 	segack := readWriteModel.NewAPDUSegmentAck(false, true, s.invokeId, s.initialSequenceNumber, *s.actualWindowSize, 0)
 	s.log.Debug().Stringer("segack", segack).Msg("segAck")
-	return s.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segack))), NoKWArgs)
+	return s.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segack))), NoKWArgs())
 }
 
 func (s *ServerSSM) segmentedRequest(apdu PDU) error {
@@ -401,7 +401,7 @@ func (s *ServerSSM) segmentedRequest(apdu PDU) error {
 		if err := s.setState(SSMState_COMPLETED, nil); err != nil {
 			return errors.Wrap(err, "Error setting state to aborted")
 		}
-		return s.Response(NA(apdu), NoKWArgs)
+		return s.Response(NA(apdu), NoKWArgs())
 	}
 
 	// the only messages we should be getting are confirmed requests
@@ -411,10 +411,10 @@ func (s *ServerSSM) segmentedRequest(apdu PDU) error {
 		if err != nil {
 			return errors.Wrap(err, "error creating abort")
 		}
-		if err := s.Request(NA(abort), NoKWArgs); err != nil { // send it ot the device
+		if err := s.Request(NA(abort), NoKWArgs()); err != nil { // send it ot the device
 			s.log.Debug().Err(err).Msg("error sending request")
 		}
-		if err := s.Response(NA(abort), NoKWArgs); err != nil { // send it ot the application
+		if err := s.Response(NA(abort), NoKWArgs()); err != nil { // send it ot the application
 			s.log.Debug().Err(err).Msg("error sending response")
 		}
 	} else {
@@ -427,10 +427,10 @@ func (s *ServerSSM) segmentedRequest(apdu PDU) error {
 		if err != nil {
 			return errors.Wrap(err, "error creating abort")
 		}
-		if err := s.Request(NA(abort), NoKWArgs); err != nil { // send it ot the device
+		if err := s.Request(NA(abort), NoKWArgs()); err != nil { // send it ot the device
 			s.log.Debug().Err(err).Msg("error sending request")
 		}
-		if err := s.Response(NA(abort), NoKWArgs); err != nil { // send it ot the application
+		if err := s.Response(NA(abort), NoKWArgs()); err != nil { // send it ot the application
 			s.log.Debug().Err(err).Msg("error sending response")
 		}
 	}
@@ -447,7 +447,7 @@ func (s *ServerSSM) segmentedRequest(apdu PDU) error {
 
 		// send back a segment ack
 		segack := readWriteModel.NewAPDUSegmentAck(true, true, s.invokeId, s.initialSequenceNumber, *s.actualWindowSize, 0)
-		return s.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segack))), NoKWArgs)
+		return s.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segack))), NoKWArgs())
 	}
 
 	// add the data
@@ -464,7 +464,7 @@ func (s *ServerSSM) segmentedRequest(apdu PDU) error {
 
 		// send back the final segment ack
 		segack := readWriteModel.NewAPDUSegmentAck(false, true, s.invokeId, s.lastSequenceNumber, *s.actualWindowSize, 0)
-		if err := s.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segack))), NoKWArgs); err != nil {
+		if err := s.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segack))), NoKWArgs()); err != nil {
 			s.log.Debug().Err(err).Msg("error sending response")
 		}
 
@@ -481,7 +481,7 @@ func (s *ServerSSM) segmentedRequest(apdu PDU) error {
 		if err != nil {
 			return errors.Wrap(err, "error parsing apdu")
 		}
-		if err := s.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, parse))), NoKWArgs); err != nil {
+		if err := s.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, parse))), NoKWArgs()); err != nil {
 			s.log.Debug().Err(err).Msg("error sending request")
 		}
 	} else if *apduConfirmedRequest.GetSequenceNumber() == s.initialSequenceNumber+*s.actualWindowSize {
@@ -492,7 +492,7 @@ func (s *ServerSSM) segmentedRequest(apdu PDU) error {
 
 		// send back a segment ack
 		segack := readWriteModel.NewAPDUSegmentAck(false, true, s.invokeId, s.initialSequenceNumber, *s.actualWindowSize, 0)
-		if err := s.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segack))), NoKWArgs); err != nil {
+		if err := s.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, segack))), NoKWArgs()); err != nil {
 			s.log.Debug().Err(err).Msg("error sending response")
 		}
 	} else {
@@ -526,7 +526,7 @@ func (s *ServerSSM) awaitResponse(apdu PDU) error {
 		if err := s.setState(SSMState_ABORTED, nil); err != nil {
 			return errors.Wrap(err, "Error setting state to aborted")
 		}
-		if err := s.Request(NA(apdu), NoKWArgs); err != nil { // send it ot the device
+		if err := s.Request(NA(apdu), NoKWArgs()); err != nil { // send it ot the device
 			s.log.Debug().Err(err).Msg("error sending request")
 		}
 	default:
@@ -545,7 +545,7 @@ func (s *ServerSSM) awaitResponseTimeout() error {
 	if err != nil {
 		return errors.Wrap(err, "error creating abort")
 	}
-	if err := s.Request(NA(abort), NoKWArgs); err != nil {
+	if err := s.Request(NA(abort), NoKWArgs()); err != nil {
 		s.log.Debug().Err(err).Msg("error sending request")
 	}
 	return nil
@@ -590,7 +590,7 @@ func (s *ServerSSM) segmentedResponse(apdu PDU) error {
 		if err := s.setState(SSMState_COMPLETED, nil); err != nil {
 			return errors.Wrap(err, "Error setting state to aborted")
 		}
-		if err := s.Response(NA(apdu), NoKWArgs); err != nil { // send it ot the application
+		if err := s.Response(NA(apdu), NoKWArgs()); err != nil { // send it ot the application
 			s.log.Debug().Err(err).Msg("error sending response")
 		}
 	default:
diff --git a/plc4go/internal/bacnetip/bacgopes/appservice/appservice_StateMachineAccessPoint.go b/plc4go/internal/bacnetip/bacgopes/appservice/appservice_StateMachineAccessPoint.go
index e747a5e39b..d0d4e717b5 100644
--- a/plc4go/internal/bacnetip/bacgopes/appservice/appservice_StateMachineAccessPoint.go
+++ b/plc4go/internal/bacnetip/bacgopes/appservice/appservice_StateMachineAccessPoint.go
@@ -239,12 +239,12 @@ func (s *StateMachineAccessPoint) Confirmation(args Args, kwArgs KWArgs) error {
 		}
 
 		// let it run with the apdu
-		if err := tr.Indication(NA(apdu), NoKWArgs); err != nil {
+		if err := tr.Indication(NA(apdu), NoKWArgs()); err != nil {
 			return errors.Wrap(err, "error runnning indication")
 		}
 	case readWriteModel.APDUUnconfirmedRequest:
 		// deliver directly to the application
-		if err := s.SapRequest(NA(apdu), NoKWArgs); err != nil {
+		if err := s.SapRequest(NA(apdu), NoKWArgs()); err != nil {
 			s.log.Debug().Err(err).Msg("error sending request")
 		}
 	case readWriteModel.APDUSimpleAck, readWriteModel.APDUComplexAck, readWriteModel.APDUError, readWriteModel.APDUReject:
@@ -262,7 +262,7 @@ func (s *StateMachineAccessPoint) Confirmation(args Args, kwArgs KWArgs) error {
 		}
 
 		// send the packet on to the transaction
-		if err := tr.Confirmation(NA(apdu), NoKWArgs); err != nil {
+		if err := tr.Confirmation(NA(apdu), NoKWArgs()); err != nil {
 			return errors.Wrap(err, "error running confirmation")
 		}
 	case readWriteModel.APDUAbort:
@@ -280,7 +280,7 @@ func (s *StateMachineAccessPoint) Confirmation(args Args, kwArgs KWArgs) error {
 			}
 
 			// send the packet on to the transaction
-			if err := tr.Confirmation(NA(apdu), NoKWArgs); err != nil {
+			if err := tr.Confirmation(NA(apdu), NoKWArgs()); err != nil {
 				return errors.Wrap(err, "error running confirmation")
 			}
 		} else {
@@ -297,7 +297,7 @@ func (s *StateMachineAccessPoint) Confirmation(args Args, kwArgs KWArgs) error {
 			}
 
 			// send the packet on to the transaction
-			if err := tr.Indication(NA(apdu), NoKWArgs); err != nil {
+			if err := tr.Indication(NA(apdu), NoKWArgs()); err != nil {
 				return errors.Wrap(err, "error running indication")
 			}
 		}
@@ -316,7 +316,7 @@ func (s *StateMachineAccessPoint) Confirmation(args Args, kwArgs KWArgs) error {
 			}
 
 			// send the packet on to the transaction
-			if err := tr.Confirmation(NA(apdu), NoKWArgs); err != nil {
+			if err := tr.Confirmation(NA(apdu), NoKWArgs()); err != nil {
 				return errors.Wrap(err, "error running confirmation")
 			}
 		} else {
@@ -333,7 +333,7 @@ func (s *StateMachineAccessPoint) Confirmation(args Args, kwArgs KWArgs) error {
 			}
 
 			// send the packet on to the transaction
-			if err := tr.Indication(NA(apdu), NoKWArgs); err != nil {
+			if err := tr.Indication(NA(apdu), NoKWArgs()); err != nil {
 				return errors.Wrap(err, "error running indication")
 			}
 		}
@@ -371,7 +371,7 @@ func (s *StateMachineAccessPoint) SapIndication(args Args, kwArgs KWArgs) error
 	switch _apdu := apdu.GetRootMessage().(type) {
 	case readWriteModel.APDUUnconfirmedRequest:
 		// deliver to the device
-		if err := s.Request(NA(apdu), NoKWArgs); err != nil {
+		if err := s.Request(NA(apdu), NoKWArgs()); err != nil {
 			s.log.Debug().Err(err).Msg("error sending the request")
 		}
 	case readWriteModel.APDUConfirmedRequest:
@@ -397,7 +397,7 @@ func (s *StateMachineAccessPoint) SapIndication(args Args, kwArgs KWArgs) error
 		s.clientTransactions = append(s.clientTransactions, tr)
 
 		// let it run
-		if err := tr.Indication(NA(apdu), NoKWArgs); err != nil {
+		if err := tr.Indication(NA(apdu), NoKWArgs()); err != nil {
 			return errors.Wrap(err, "error doing indication")
 		}
 	default:
@@ -429,7 +429,7 @@ func (s *StateMachineAccessPoint) SapConfirmation(args Args, kwArgs KWArgs) erro
 		}
 
 		// pass control to the transaction
-		if err := tr.Confirmation(NA(apdu), NoKWArgs); err != nil {
+		if err := tr.Confirmation(NA(apdu), NoKWArgs()); err != nil {
 			return errors.Wrap(err, "error running confirmation")
 		}
 	default:
diff --git a/plc4go/internal/bacnetip/bacgopes/basetypes/basetypes_NameValue.go b/plc4go/internal/bacnetip/bacgopes/basetypes/basetypes_NameValue.go
index b2431a0770..c812072720 100644
--- a/plc4go/internal/bacnetip/bacgopes/basetypes/basetypes_NameValue.go
+++ b/plc4go/internal/bacnetip/bacgopes/basetypes/basetypes_NameValue.go
@@ -46,8 +46,8 @@ func NewNameValue(args Args) (*NameValue, error) {
 		},
 	}
 	// default to no value
-	s.name = GAO[string](args, 0, "")
-	s.value = GAO[any](args, 1, nil)
+	s.name, _ = GAO[string](args, 0, "")
+	s.value, _ = GAO[any](args, 1, nil)
 
 	if s.value == nil {
 		return s, nil
diff --git a/plc4go/internal/bacnetip/bacgopes/bvll/bvll.go b/plc4go/internal/bacnetip/bacgopes/bvll/bvll.go
index e6ea68de91..c37f3a87cd 100644
--- a/plc4go/internal/bacnetip/bacgopes/bvll/bvll.go
+++ b/plc4go/internal/bacnetip/bacgopes/bvll/bvll.go
@@ -48,11 +48,11 @@ var BVLPDUTypes map[uint8]func() Decoder
 func init() {
 	BVLPDUTypes = map[uint8]func() Decoder{
 		BVLCIResult: func() Decoder {
-			v, _ := NewResult(nil, NoArgs, NoKWArgs)
+			v, _ := NewResult(nil, NoArgs, NoKWArgs())
 			return v
 		},
 		BVLCIWriteBroadcastDistributionTable: func() Decoder {
-			v, _ := NewWriteBroadcastDistributionTable(nil, NoArgs, NoKWArgs)
+			v, _ := NewWriteBroadcastDistributionTable(nil, NoArgs, NoKWArgs())
 			return v
 		},
 		BVLCIReadBroadcastDistributionTable: func() Decoder {
@@ -60,15 +60,15 @@ func init() {
 			return v
 		},
 		BVLCIReadBroadcastDistributionTableAck: func() Decoder {
-			v, _ := NewReadBroadcastDistributionTableAck(nil, NoArgs, NoKWArgs)
+			v, _ := NewReadBroadcastDistributionTableAck(nil, NoArgs, NoKWArgs())
 			return v
 		},
 		BVLCIForwardedNPDU: func() Decoder {
-			v, _ := NewForwardedNPDU(nil, NoArgs, NoKWArgs)
+			v, _ := NewForwardedNPDU(nil, NoArgs, NoKWArgs())
 			return v
 		},
 		BVLCIRegisterForeignDevice: func() Decoder {
-			v, _ := NewRegisterForeignDevice(nil, NoArgs, NoKWArgs)
+			v, _ := NewRegisterForeignDevice(nil, NoArgs, NoKWArgs())
 			return v
 		},
 		BVLCIReadForeignDeviceTable: func() Decoder {
@@ -76,11 +76,11 @@ func init() {
 			return v
 		},
 		BVLCIReadForeignDeviceTableAck: func() Decoder {
-			v, _ := NewReadForeignDeviceTableAck(nil, NoArgs, NoKWArgs)
+			v, _ := NewReadForeignDeviceTableAck(nil, NoArgs, NoKWArgs())
 			return v
 		},
 		BVLCIDeleteForeignDeviceTableEntry: func() Decoder {
-			v, _ := NewDeleteForeignDeviceTableEntry(nil, NoArgs, NoKWArgs)
+			v, _ := NewDeleteForeignDeviceTableEntry(nil, NoArgs, NoKWArgs())
 			return v
 		},
 		BVLCIDistributeBroadcastToNetwork: func() Decoder {
diff --git a/plc4go/internal/bacnetip/bacgopes/bvll/bvll_BVLCI.go b/plc4go/internal/bacnetip/bacgopes/bvll/bvll_BVLCI.go
index 48166b7759..b7e531b59d 100644
--- a/plc4go/internal/bacnetip/bacgopes/bvll/bvll_BVLCI.go
+++ b/plc4go/internal/bacnetip/bacgopes/bvll/bvll_BVLCI.go
@@ -75,7 +75,7 @@ func NewBVLCI(args Args, kwArgs KWArgs) BVLCI {
 		requirements: KW[BVLCIRequirements](kwArgs, KWCompBVLCIRequirements),
 	}
 	b.DebugContents = NewDebugContents(b, "bvlciType", "bvlciFunction", "bvlciLength")
-	b.PCI = NewPCI(NoArgs, kwArgs)
+	b.PCI = NewPCI(args, kwArgs)
 	b.AddExtraPrinters(b.PCI.(DebugContentPrinter))
 	if bvlc := KWO[readWriteModel.BVLC](kwArgs, KWCompRootMessage, nil); bvlc != nil {
 		b.bvlciFunction = bvlc.GetBvlcFunction()
diff --git a/plc4go/internal/bacnetip/bacgopes/bvll/bvll_BVLPDU.go b/plc4go/internal/bacnetip/bacgopes/bvll/bvll_BVLPDU.go
index b2c204479a..97e12e7b9b 100644
--- a/plc4go/internal/bacnetip/bacgopes/bvll/bvll_BVLPDU.go
+++ b/plc4go/internal/bacnetip/bacgopes/bvll/bvll_BVLPDU.go
@@ -25,6 +25,7 @@ import (
 	"github.com/pkg/errors"
 
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/comp"
+	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/debugging"
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/pdu"
 	readWriteModel "github.com/apache/plc4x/plc4go/protocols/bacnetip/readwrite/model"
 	"github.com/apache/plc4x/plc4go/spi"
@@ -51,6 +52,7 @@ func NewBVLPDU(args Args, kwArgs KWArgs) BVLPDU {
 	kwArgs[KWCompBVLCIRequirements] = b
 	b._BVLCI = NewBVLCI(args, kwArgs).(*_BVLCI)
 	b.PDUData = NewPDUData(args, kwArgs)
+	b.AddExtraPrinters(b.PDUData.(DebugContentPrinter))
 	if b.GetRootMessage() != nil {
 		data, _ := b.GetRootMessage().Serialize()
 		b.SetPduData(data[4:])
diff --git a/plc4go/internal/bacnetip/bacgopes/bvll/bvll_ForwardedNPDU.go b/plc4go/internal/bacnetip/bacgopes/bvll/bvll_ForwardedNPDU.go
index 663cb6e126..13c0b2a7f1 100644
--- a/plc4go/internal/bacnetip/bacgopes/bvll/bvll_ForwardedNPDU.go
+++ b/plc4go/internal/bacnetip/bacgopes/bvll/bvll_ForwardedNPDU.go
@@ -111,7 +111,6 @@ func (f *ForwardedNPDU) Decode(bvlpdu Arg) error {
 	case BVLPDU:
 		switch rm := bvlpdu.GetRootMessage().(type) {
 		case readWriteModel.BVLCForwardedNPDU:
-			_, _ = bvlpdu.GetData(6) // TODO: do we really want to discard that?
 			addr := rm.GetIp()
 			port := rm.GetPort()
 			var portArray = make([]byte, 2)
@@ -124,6 +123,16 @@ func (f *ForwardedNPDU) Decode(bvlpdu Arg) error {
 			f.bvlciAddress = address
 			f.SetRootMessage(rm)
 		}
+
+		// get the address
+		data, err := bvlpdu.GetData(6)
+		if err != nil {
+			return errors.Wrap(err, "error reading data")
+		}
+		f.bvlciAddress, err = NewAddress(NA(UnpackIpAddr(data)))
+		if err != nil {
+			return errors.Wrap(err, "error creating address")
+		}
 	}
 	switch bvlpdu := bvlpdu.(type) {
 	case PDUData:
diff --git a/plc4go/internal/bacnetip/bacgopes/bvll/bvll_ReadForeignDeviceTableAck.go b/plc4go/internal/bacnetip/bacgopes/bvll/bvll_ReadForeignDeviceTableAck.go
index 85a47f5cfe..29c5668271 100644
--- a/plc4go/internal/bacnetip/bacgopes/bvll/bvll_ReadForeignDeviceTableAck.go
+++ b/plc4go/internal/bacnetip/bacgopes/bvll/bvll_ReadForeignDeviceTableAck.go
@@ -45,7 +45,7 @@ func NewReadForeignDeviceTableAck(fdt []*FDTEntry, args Args, kwArgs KWArgs) (*R
 	if r.GetRootMessage() == nil {
 		r.SetRootMessage(readWriteModel.NewBVLCReadForeignDeviceTableAck(r.produceForeignDeviceTable()))
 	}
-	r.bvlciFunction = BVLCIReadBroadcastDistributionTableAck
+	r.bvlciFunction = BVLCIReadForeignDeviceTableAck
 	r.bvlciLength = uint16(4 + 10*len(fdt))
 	r.bvlciFDT = fdt
 	return r, nil
diff --git a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_AnnexJCodec.go b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_AnnexJCodec.go
index 4eaad496c4..03c2730fca 100644
--- a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_AnnexJCodec.go
+++ b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_AnnexJCodec.go
@@ -102,7 +102,7 @@ func (b *AnnexJCodec) Indication(args Args, kwArgs KWArgs) error {
 	}
 
 	// send it downstream
-	return b.Request(NA(pdu), NoKWArgs)
+	return b.Request(NA(pdu), NoKWArgs())
 }
 
 func (b *AnnexJCodec) Confirmation(args Args, kwArgs KWArgs) error {
@@ -125,5 +125,5 @@ func (b *AnnexJCodec) Confirmation(args Args, kwArgs KWArgs) error {
 	}
 
 	// send it upstream
-	return b.Response(NA(rpdu), NoKWArgs)
+	return b.Response(NA(rpdu), NoKWArgs())
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_BIPBBMD.go b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_BIPBBMD.go
index 921c581f80..4fbb04780b 100644
--- a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_BIPBBMD.go
+++ b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_BIPBBMD.go
@@ -129,7 +129,7 @@ func (b *BIPBBMD) Indication(args Args, kwArgs KWArgs) error {
 		b.log.Debug().Stringer("xpdu", xpdu).Msg("original unicast xpdu")
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	} else if pdu.GetPDUDestination().AddrType == LOCAL_BROADCAST_ADDRESS { // check for broadcaste
 		// make an original unicast PDU
 		var xpdu PDU
@@ -146,7 +146,7 @@ func (b *BIPBBMD) Indication(args Args, kwArgs KWArgs) error {
 		b.log.Debug().Stringer("xpdu", xpdu).Msg("original broadcast xpdu")
 
 		// send it downstream
-		err = b.Request(NA(xpdu), NoKWArgs)
+		err = b.Request(NA(xpdu), NoKWArgs())
 		if err != nil {
 			return errors.Wrap(err, "error sending request downstream")
 		}
@@ -174,7 +174,7 @@ func (b *BIPBBMD) Indication(args Args, kwArgs KWArgs) error {
 				}
 				xpdu.SetPDUDestination(dest)
 				b.log.Debug().Stringer("pduDestination", xpdu.GetPDUDestination()).Msg("sending to peer")
-				if err := b.Request(NA(xpdu), NoKWArgs); err != nil {
+				if err := b.Request(NA(xpdu), NoKWArgs()); err != nil {
 					return errors.Wrap(err, "error sending request")
 				}
 			}
@@ -187,7 +187,7 @@ func (b *BIPBBMD) Indication(args Args, kwArgs KWArgs) error {
 				_debug("    - sending to foreign device: %r", xpdu.GetPDUDestination())
 			}
 			b.log.Debug().Stringer("pduDestination", xpdu.GetPDUDestination()).Msg("sending to foreign device")
-			if err := b.Request(NA(xpdu), NoKWArgs); err != nil {
+			if err := b.Request(NA(xpdu), NoKWArgs()); err != nil {
 				return errors.Wrap(err, "error sending request")
 			}
 		}
@@ -207,10 +207,10 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 	switch pdu := pdu.(type) {
 	case *Result: //some kind of response to a request
 		// send this to the service access point
-		return b.SapResponse(NA(pdu), NoKWArgs)
+		return b.SapResponse(NA(pdu), NoKWArgs())
 	case *WriteBroadcastDistributionTable:
 		// build a response
-		xpdu, err := NewResult(ToPtr(model.BVLCResultCode_WRITE_BROADCAST_DISTRIBUTION_TABLE_NAK), NoArgs, NoKWArgs)
+		xpdu, err := NewResult(ToPtr(model.BVLCResultCode_WRITE_BROADCAST_DISTRIBUTION_TABLE_NAK), NoArgs, NoKWArgs())
 		if err != nil {
 			return errors.Wrap(err, "error creating Result")
 		}
@@ -220,10 +220,10 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 		}
 
 		// send it downstream
-		return b.Request(NA(pdu), NoKWArgs)
+		return b.Request(NA(pdu), NoKWArgs())
 	case *ReadBroadcastDistributionTable:
 		// build a response
-		xpdu, err := NewReadBroadcastDistributionTableAck(b.bbmdBDT, NoArgs, NoKWArgs)
+		xpdu, err := NewReadBroadcastDistributionTableAck(b.bbmdBDT, NoArgs, NoKWArgs())
 		if err != nil {
 			return errors.Wrap(err, "error creating Result")
 		}
@@ -233,10 +233,10 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 		}
 
 		// send it downstream
-		return b.Request(NA(pdu), NoKWArgs)
+		return b.Request(NA(pdu), NoKWArgs())
 	case *ReadBroadcastDistributionTableAck:
 		// send it to the service access point
-		return b.SapResponse(NA(pdu), NoKWArgs)
+		return b.SapResponse(NA(pdu), NoKWArgs())
 	case *ForwardedNPDU:
 		// send it upstream if there is a network layer
 		if b.HasServerPeer() {
@@ -253,7 +253,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 			}
 			b.log.Debug().Stringer("xpdu", xpdu).Msg("upstream xpdu")
 
-			return b.Response(NA(xpdu), NoKWArgs)
+			return b.Response(NA(xpdu), NoKWArgs())
 		}
 
 		// build a forwarded NPDU to send out
@@ -281,7 +281,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 					_debug("    - local broadcast")
 				}
 				b.log.Trace().Msg("local broadcast")
-				return b.Request(NA(xpdu), NoKWArgs)
+				return b.Request(NA(xpdu), NoKWArgs())
 			}
 		} else if pdu.GetPDUDestination().AddrType == LOCAL_BROADCAST_ADDRESS {
 			if _debug != nil {
@@ -299,7 +299,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 				_debug("    - sending to foreign device: %r", xpdu.GetPDUDestination())
 			}
 			b.log.Warn().Stringer("destination", xpdu.GetPDUDestination()).Msg("sending to foreign device")
-			if err := b.Request(NA(xpdu), NoKWArgs); err != nil {
+			if err := b.Request(NA(xpdu), NoKWArgs()); err != nil {
 				return errors.Wrapf(err, "error sending request to destination %s", xpdu.GetPDUDestination())
 			}
 		}
@@ -322,7 +322,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 		b.log.Debug().Stringer("xpdu", xpdu).Msg("xpdu")
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	case *ReadForeignDeviceTable:
 		// build a response
 		xpdu, err := NewReadForeignDeviceTableAck(b.bbmdFDT, NoArgs, NKW(KWCPCIDestination, pdu.GetPDUSource(), KWCPCIUserData, pdu.GetPDUUserData()))
@@ -334,10 +334,10 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 		}
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	case *ReadForeignDeviceTableAck:
 		// send this to the service access point
-		return b.SapResponse(NA(pdu), NoKWArgs)
+		return b.SapResponse(NA(pdu), NoKWArgs())
 	case *DeleteForeignDeviceTableEntry:
 		// process the request
 		stat, err := b.DeleteForeignDeviceTableEntry(pdu.GetBvlciAddress())
@@ -355,7 +355,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 		}
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	case *DistributeBroadcastToNetwork:
 		// send it upstream if there is a network layer
 		if b.HasServerPeer() {
@@ -370,7 +370,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 			}
 			b.log.Debug().Stringer("xpdu", xpdu).Msg("upstream xpdu")
 
-			return b.Response(NA(xpdu), NoKWArgs)
+			return b.Response(NA(xpdu), NoKWArgs())
 		}
 
 		// build a forwarded NPDU to send out
@@ -391,7 +391,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 					_debug("    - local broadcast")
 				}
 				b.log.Trace().Msg("local broadcast")
-				err = b.Request(NA(xpdu), NoKWArgs)
+				err = b.Request(NA(xpdu), NoKWArgs())
 				if err != nil {
 					return errors.Wrap(err, "error sending local broadcast")
 				}
@@ -405,7 +405,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 					_debug("    - sending to peer: %r", xpdu.GetPDUDestination())
 				}
 				b.log.Debug().Stringer("designation", xpdu.GetPDUDestination()).Msg("sending to peer")
-				err = b.Request(NA(xpdu), NoKWArgs)
+				err = b.Request(NA(xpdu), NoKWArgs())
 				if err != nil {
 					return errors.Wrap(err, "error sending")
 				}
@@ -420,7 +420,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 					_debug("    - sending to foreign device: %r", xpdu.GetPDUDestination())
 				}
 				b.log.Warn().Stringer("destination", xpdu.GetPDUDestination()).Msg("sending to foreign device")
-				if err := b.Request(NA(xpdu), NoKWArgs); err != nil {
+				if err := b.Request(NA(xpdu), NoKWArgs()); err != nil {
 					return errors.Wrapf(err, "error sending request to destination %s", xpdu.GetPDUDestination())
 				}
 			}
@@ -440,7 +440,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 			//                   xpdu.pduSource.addrRoute = PDUSource
 			b.log.Debug().Stringer("xpdu", xpdu).Msg("upstream xpdu")
 
-			return b.Response(NA(xpdu), NoKWArgs)
+			return b.Response(NA(xpdu), NoKWArgs())
 		}
 	case *OriginalBroadcastNPDU:
 		// send it upstream if there is a network layer
@@ -459,7 +459,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 			}
 			b.log.Debug().Stringer("xpdu", xpdu).Msg("upstream xpdu")
 
-			if err := b.Response(NA(xpdu), NoKWArgs); err != nil {
+			if err := b.Response(NA(xpdu), NoKWArgs()); err != nil {
 				return errors.Wrap(err, "error sending local broadcast")
 			}
 		}
@@ -486,7 +486,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 					_debug("    - sending to peer: %r", xpdu.GetPDUDestination())
 				}
 				b.log.Debug().Stringer("designation", xpdu.GetPDUDestination()).Msg("sending to peer")
-				err = b.Request(NA(xpdu), NoKWArgs)
+				err = b.Request(NA(xpdu), NoKWArgs())
 				if err != nil {
 					return errors.Wrap(err, "error sending")
 				}
@@ -500,7 +500,7 @@ func (b *BIPBBMD) Confirmation(args Args, kwArgs KWArgs) error {
 				_debug("    - sending to foreign device: %r", xpdu.GetPDUDestination())
 			}
 			b.log.Warn().Stringer("destination", xpdu.GetPDUDestination()).Msg("sending to foreign device")
-			if err := b.Request(NA(xpdu), NoKWArgs); err != nil {
+			if err := b.Request(NA(xpdu), NoKWArgs()); err != nil {
 				return errors.Wrapf(err, "error sending request to destination %s", xpdu.GetPDUDestination())
 			}
 		}
diff --git a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_BIPForeign.go b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_BIPForeign.go
index bd86e19260..a1497aa140 100644
--- a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_BIPForeign.go
+++ b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_BIPForeign.go
@@ -103,7 +103,7 @@ func NewBIPForeign(localLog zerolog.Logger, opts ...func(*BIPForeign)) (*BIPFore
 	b.bbmdTimeToLive = nil
 
 	// used in tracking active registration timeouts
-	b.registrationTimeoutTask = OneShotFunction(b.registrationExpired, NoArgs, NoKWArgs)
+	b.registrationTimeoutTask = OneShotFunction(b.registrationExpired, NoArgs, NoKWArgs())
 
 	// registration provided
 	if b.argAddr != nil {
@@ -173,7 +173,7 @@ func (b *BIPForeign) Indication(args Args, kwArgs KWArgs) error {
 		b.log.Debug().Stringer("xpdu", xpdu).Msg("xpdu")
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	case LOCAL_BROADCAST_ADDRESS:
 		// check the BBMD registration status, we may not be registered
 		if b.registrationStatus != 0 {
@@ -195,7 +195,7 @@ func (b *BIPForeign) Indication(args Args, kwArgs KWArgs) error {
 		b.log.Debug().Stringer("xpdu", xpdu).Msg("xpdu")
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	default:
 		return errors.Errorf("invalid destination address: %s", pdu.GetPDUDestination())
 	}
@@ -242,7 +242,7 @@ func (b *BIPForeign) Confirmation(args Args, kwArgs KWArgs) error {
 		b.log.Debug().Stringer("xpdu", xpdu).Msg("xpdu")
 
 		// send it upstream
-		return b.Response(NA(xpdu), NoKWArgs)
+		return b.Response(NA(xpdu), NoKWArgs())
 	case *ForwardedNPDU:
 		// check the BBMD registration status, we may not be registered
 		if b.registrationStatus != 0 {
@@ -267,13 +267,13 @@ func (b *BIPForeign) Confirmation(args Args, kwArgs KWArgs) error {
 		b.log.Debug().Stringer("xpdu", xpdu).Msg("xpdu")
 
 		// send it upstream
-		return b.Response(NA(xpdu), NoKWArgs)
+		return b.Response(NA(xpdu), NoKWArgs())
 	case *ReadBroadcastDistributionTableAck:
 		// send this to the service access point
-		return b.SapResponse(args, NoKWArgs)
+		return b.SapResponse(args, NoKWArgs())
 	case *ReadForeignDeviceTableAck:
 		// send this to the service access point
-		return b.SapResponse(args, NoKWArgs)
+		return b.SapResponse(args, NoKWArgs())
 	case *WriteBroadcastDistributionTable:
 		// build a response
 		xpdu, err := NewResult(ToPtr(model.BVLCResultCode_WRITE_BROADCAST_DISTRIBUTION_TABLE_NAK), NoArgs, NKW(KWCPCIUserData, pdu.GetPDUUserData()))
@@ -283,7 +283,7 @@ func (b *BIPForeign) Confirmation(args Args, kwArgs KWArgs) error {
 		xpdu.SetPDUDestination(pdu.GetPDUSource())
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	case *ReadBroadcastDistributionTable:
 		// build a response
 		xpdu, err := NewResult(ToPtr(model.BVLCResultCode_READ_BROADCAST_DISTRIBUTION_TABLE_NAK), NoArgs, NKW(KWCPCIUserData, pdu.GetPDUUserData()))
@@ -293,7 +293,7 @@ func (b *BIPForeign) Confirmation(args Args, kwArgs KWArgs) error {
 		xpdu.SetPDUDestination(pdu.GetPDUSource())
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	case *RegisterForeignDevice:
 		// build a response
 		xpdu, err := NewResult(ToPtr(model.BVLCResultCode_REGISTER_FOREIGN_DEVICE_NAK), NoArgs, NKW(KWCPCIUserData, pdu.GetPDUUserData()))
@@ -303,7 +303,7 @@ func (b *BIPForeign) Confirmation(args Args, kwArgs KWArgs) error {
 		xpdu.SetPDUDestination(pdu.GetPDUSource())
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	case *ReadForeignDeviceTable:
 		// build a response
 		xpdu, err := NewResult(ToPtr(model.BVLCResultCode_READ_FOREIGN_DEVICE_TABLE_NAK), NoArgs, NKW(KWCPCIUserData, pdu.GetPDUUserData()))
@@ -313,7 +313,7 @@ func (b *BIPForeign) Confirmation(args Args, kwArgs KWArgs) error {
 		xpdu.SetPDUDestination(pdu.GetPDUSource())
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	case *DeleteForeignDeviceTableEntry:
 		// build a response
 		xpdu, err := NewResult(ToPtr(model.BVLCResultCode_DELETE_FOREIGN_DEVICE_TABLE_ENTRY_NAK), NoArgs, NKW(KWCPCIUserData, pdu.GetPDUUserData()))
@@ -323,7 +323,7 @@ func (b *BIPForeign) Confirmation(args Args, kwArgs KWArgs) error {
 		xpdu.SetPDUDestination(pdu.GetPDUSource())
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	case *DistributeBroadcastToNetwork:
 		// build a response
 		xpdu, err := NewResult(ToPtr(model.BVLCResultCode_DISTRIBUTE_BROADCAST_TO_NETWORK_NAK), NoArgs, NKW(KWCPCIUserData, pdu.GetPDUUserData()))
@@ -333,7 +333,7 @@ func (b *BIPForeign) Confirmation(args Args, kwArgs KWArgs) error {
 		xpdu.SetPDUDestination(pdu.GetPDUSource())
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	case *OriginalBroadcastNPDU:
 		if _debug != nil {
 			_debug("    - packet dropped")
@@ -375,7 +375,7 @@ func (b *BIPForeign) Unregister() {
 	pdu := NewPDU(NoArgs, NKW(KWCompRootMessage, model.NewBVLCRegisterForeignDevice(0), KWCPCIDestination, b.bbmdAddress))
 
 	// send it downstream
-	if err := b.Request(NA(pdu), NoKWArgs); err != nil {
+	if err := b.Request(NA(pdu), NoKWArgs()); err != nil {
 		b.log.Debug().Err(err).Msg("error sending request")
 		return
 	}
@@ -395,14 +395,14 @@ func (b *BIPForeign) Unregister() {
 
 // ProcessTask is called when the registration request should be sent to the BBMD.
 func (b *BIPForeign) ProcessTask() error {
-	pdu, err := NewRegisterForeignDevice(b.bbmdTimeToLive, NoArgs, NoKWArgs)
+	pdu, err := NewRegisterForeignDevice(b.bbmdTimeToLive, NoArgs, NoKWArgs())
 	if err != nil {
 		return errors.Wrap(err, "")
 	}
 	pdu.SetPDUDestination(b.bbmdAddress)
 
 	// send it downstream
-	if err := b.Request(NA(pdu), NoKWArgs); err != nil {
+	if err := b.Request(NA(pdu), NoKWArgs()); err != nil {
 		return errors.Wrap(err, "error sending request")
 	}
 
diff --git a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_BIPSimple.go b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_BIPSimple.go
index 69469bb141..983797af25 100644
--- a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_BIPSimple.go
+++ b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_BIPSimple.go
@@ -105,7 +105,7 @@ func (b *BIPSimple) Indication(args Args, kwArgs KWArgs) error {
 		b.log.Debug().Stringer("xpdu", xpdu).Msg("xpdu")
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	case LOCAL_BROADCAST_ADDRESS:
 		// make an original broadcast _PDU
 		xpdu, err := NewOriginalBroadcastNPDU(NA(pdu), NKW(KWCPCIDestination, pdu.GetPDUDestination(), KWCPCIUserData, pdu.GetPDUUserData()))
@@ -119,7 +119,7 @@ func (b *BIPSimple) Indication(args Args, kwArgs KWArgs) error {
 		b.log.Debug().Stringer("xpdu", xpdu).Msg("xpdu")
 
 		// send it downstream
-		return b.Request(NA(xpdu), NoKWArgs)
+		return b.Request(NA(xpdu), NoKWArgs())
 	default:
 		return errors.Errorf("invalid destination address: %s", pdu.GetPDUDestination())
 	}
diff --git a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_UDPMultiplexer.go b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_UDPMultiplexer.go
index cac2c7951c..c9e65f00ea 100644
--- a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_UDPMultiplexer.go
+++ b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice_UDPMultiplexer.go
@@ -197,7 +197,7 @@ func (m *UDPMultiplexer) Indication(args Args, kwArgs KWArgs) error {
 		return errors.New("invalid destination address type")
 	}
 
-	return m.directPort.Indication(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, pdu, KWCPCIDestination, dest))), NoKWArgs)
+	return m.directPort.Indication(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, pdu, KWCPCIDestination, dest))), NoKWArgs())
 }
 
 func (m *UDPMultiplexer) Confirmation(args Args, kwArgs KWArgs) error {
@@ -265,7 +265,7 @@ func (m *UDPMultiplexer) Confirmation(args Args, kwArgs KWArgs) error {
 
 	// TODO: we only support 0x81 at the moment
 	if m.AnnexJ != nil {
-		return m.AnnexJ.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, pdu.GetRootMessage(), KWCPCISource, src, KWCPCIDestination, dest))), NoKWArgs)
+		return m.AnnexJ.Response(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, pdu.GetRootMessage(), KWCPCISource, src, KWCPCIDestination, dest))), NoKWArgs())
 	}
 
 	return nil
diff --git a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice__MultiplexClient.go b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice__MultiplexClient.go
index 1b64be52a6..cd50bcb3ec 100644
--- a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice__MultiplexClient.go
+++ b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice__MultiplexClient.go
@@ -46,5 +46,5 @@ func _New_MultiplexClient(localLog zerolog.Logger, multiplexer *UDPMultiplexer)
 }
 
 func (m *_MultiplexClient) Confirmation(args Args, kwArgs KWArgs) error {
-	return m.multiplexer.Confirmation(NA(m, args), NoKWArgs)
+	return m.multiplexer.Confirmation(NA(m, args), NoKWArgs())
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice__MultiplexServer.go b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice__MultiplexServer.go
index f6c1fa389b..6178eb35b6 100644
--- a/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice__MultiplexServer.go
+++ b/plc4go/internal/bacnetip/bacgopes/bvllservice/bvllservice__MultiplexServer.go
@@ -46,5 +46,5 @@ func _New_MultiplexServer(localLog zerolog.Logger, multiplexer *UDPMultiplexer)
 }
 
 func (m *_MultiplexServer) Indication(args Args, kwArgs KWArgs) error {
-	return m.multiplexer.Indication(NA(m, args), NoKWArgs)
+	return m.multiplexer.Indication(NA(m, args), NoKWArgs())
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/comm/comm_PDU.go b/plc4go/internal/bacnetip/bacgopes/comm/comm_PDU.go
index 65cb3f5fa4..10309b1537 100644
--- a/plc4go/internal/bacnetip/bacgopes/comm/comm_PDU.go
+++ b/plc4go/internal/bacnetip/bacgopes/comm/comm_PDU.go
@@ -41,10 +41,9 @@ type _PDU struct {
 	PDUData
 }
 
-func NewCPDU(args Args, kwArgs KWArgs) CPDU {
-	data := GAO[any](args, 0, nil)
+func NewCPDU(data any, kwArgs KWArgs) CPDU {
 	if _debug != nil {
-		_debug("__init__ %r %r", args, kwArgs)
+		_debug("__init__ %r %r", data, kwArgs)
 	}
 
 	// pick up some optional kwArgs
@@ -63,9 +62,9 @@ func NewCPDU(args Args, kwArgs KWArgs) CPDU {
 
 	// now continue on
 	p := &_PDU{
-		PCI: NewPCI(args, NKW(KWCPCIUserData, userData, KWCPCISource, source, destination, KWCPCIDestination, destination)),
+		PCI: NewPCI(NoArgs, NKW(KWCPCIUserData, userData, KWCPCISource, source, destination, KWCPCIDestination, destination)),
 	}
-	p.PDUData = NewPDUData(NA(KWO[spi.Message](kwArgs, KWCompRootMessage, nil)), NoKWArgs)
+	p.PDUData = NewPDUData(NA(data), kwArgs)
 	return p
 }
 
diff --git a/plc4go/internal/bacnetip/bacgopes/comp/comp.go b/plc4go/internal/bacnetip/bacgopes/comp/comp.go
index 77f481faaa..fdebc1ffe6 100644
--- a/plc4go/internal/bacnetip/bacgopes/comp/comp.go
+++ b/plc4go/internal/bacnetip/bacgopes/comp/comp.go
@@ -65,15 +65,15 @@ func GA[T any](args Args, index int) T {
 }
 
 // GetFromArgsOptional gets a value from Args or return default if not present
-func GetFromArgsOptional[T any](args Args, index int, defaultValue T) T {
+func GetFromArgsOptional[T any](args Args, index int, defaultValue T) (T, bool) {
 	if index > len(args)-1 {
-		return defaultValue
+		return defaultValue, false
 	}
-	return args[index].(T)
+	return args[index].(T), true
 }
 
 // GAO is a shortcut for GetFromArgsOptional
-func GAO[T any](args Args, index int, defaultValue T) T {
+func GAO[T any](args Args, index int, defaultValue T) (T, bool) {
 	return GetFromArgsOptional(args, index, defaultValue)
 }
 
@@ -92,7 +92,7 @@ func (a Args) String() string {
 		case []byte:
 			ea = Btox(tea, ".")
 		case fmt.Stringer:
-			if tea != nil {
+			if !IsNil(tea) {
 				teaString := tea.String()
 				ea = teaString
 				if strings.Contains(teaString, "\n") {
@@ -110,7 +110,7 @@ func (a Args) String() string {
 
 type KWArgs map[KnownKey]any
 
-var NoKWArgs = NewKWArgs()
+var NoKWArgs = NewKWArgs
 
 func NewKWArgs(kw ...any) KWArgs {
 	if len(kw)%2 != 0 {
@@ -193,10 +193,9 @@ const (
 	////
 	// comm.PCI related keys
 
+	KWCPCIUserData    = KnownKey("user_data")
 	KWCPCISource      = KnownKey("source")
 	KWCPCIDestination = KnownKey("destination")
-	KWCPCIData        = KnownKey("data")
-	KWCPCIUserData    = KnownKey("user_data")
 
 	////
 	// PCI related keys
@@ -242,9 +241,9 @@ const (
 	KWCompBVLCIRequirements = KnownKey("compBVLCIRequirements")
 )
 
-// Nothing give NoArgs and NoKWArgs
+// Nothing give NoArgs and NoKWArgs()
 func Nothing() (Args, KWArgs) {
-	return NoArgs, NoKWArgs
+	return NoArgs, NoKWArgs()
 }
 
 // An PriorityItem is something we manage in a priority queue.
@@ -473,3 +472,29 @@ func Try1[T any](f func() (T, error)) (v T, err error) {
 	}()
 	return f()
 }
+
+// IsNil when nil checks aren'T enough
+func IsNil(v interface{}) bool {
+	if v == nil {
+		return true
+	}
+	valueOf := reflect.ValueOf(v)
+	switch valueOf.Kind() {
+	case reflect.Ptr, reflect.Interface, reflect.Slice, reflect.Map, reflect.Func, reflect.Chan:
+		return valueOf.IsNil()
+	default:
+		return false
+	}
+}
+
+func ToStringers[I any](in []I) []fmt.Stringer {
+	return ConvertSlice[I, fmt.Stringer](in)
+}
+
+func ConvertSlice[I any, O any](in []I) (out []O) {
+	out = make([]O, len(in))
+	for i, v := range in {
+		out[i] = any(v).(O)
+	}
+	return
+}
diff --git a/plc4go/internal/bacnetip/bacgopes/constructeddata/constructeddata.go b/plc4go/internal/bacnetip/bacgopes/constructeddata/constructeddata.go
index 29daf3f718..277449e6df 100644
--- a/plc4go/internal/bacnetip/bacgopes/constructeddata/constructeddata.go
+++ b/plc4go/internal/bacnetip/bacgopes/constructeddata/constructeddata.go
@@ -231,7 +231,7 @@ func (a *Sequence) Encode(arg Arg) error {
 				tagList.Append(openingTag)
 			}
 
-			helper, err := element.GetKlass()(NA(value), NoKWArgs)
+			helper, err := element.GetKlass()(NA(value), NoKWArgs())
 			if err != nil {
 				return errors.Wrap(err, "error klass element")
 			}
@@ -250,7 +250,7 @@ func (a *Sequence) Encode(arg Arg) error {
 				tagList.Append(closingTag)
 			}
 		} else if isAtomic {
-			helper, err := element.GetKlass()(NA(value), NoKWArgs)
+			helper, err := element.GetKlass()(NA(value), NoKWArgs())
 			if err != nil {
 				return errors.Wrap(err, "error klass element")
 			}
@@ -383,7 +383,7 @@ func (a *Sequence) Decode(arg Arg) error {
 			tagList.Pop()
 
 			// a helper cooperates between the atomic value and the tag
-			helper, err := element.GetKlass()(NA(tag), NoKWArgs)
+			helper, err := element.GetKlass()(NA(tag), NoKWArgs())
 			if err != nil {
 				return errors.Wrap(err, "error creating helper")
 			}
diff --git a/plc4go/internal/bacnetip/bacgopes/debugging/debugging.go b/plc4go/internal/bacnetip/bacgopes/debugging/debugging.go
index 174f375014..231db5e85a 100644
--- a/plc4go/internal/bacnetip/bacgopes/debugging/debugging.go
+++ b/plc4go/internal/bacnetip/bacgopes/debugging/debugging.go
@@ -96,6 +96,12 @@ func (d *DebugContents) AddDebugContents(debuggable Debuggable, contents ...stri
 }
 
 func (d *DebugContents) Format(s fmt.State, v rune) {
+	if d == nil {
+		if _debug != nil {
+			_debug("nil debug attempt") // TODO: this should no happen
+		}
+		return
+	}
 	switch v {
 	case 's', 'v':
 		// TODO: check if that hacky hacky makes sense
@@ -347,7 +353,7 @@ func (d *DefaultRFormatter) Format(s fmt.State, v rune) {
 		for _, printer := range d.extraPrinters {
 			printer.PrintDebugContents(1, s, nil)
 		}
-	case 'v':
+	case 'v', 's':
 		_, _ = s.Write([]byte(d.header))
 	}
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/iocb/iocb_IOQController.go b/plc4go/internal/bacnetip/bacgopes/iocb/iocb_IOQController.go
index 35067e6c62..5f59b7386c 100644
--- a/plc4go/internal/bacnetip/bacgopes/iocb/iocb_IOQController.go
+++ b/plc4go/internal/bacnetip/bacgopes/iocb/iocb_IOQController.go
@@ -188,7 +188,7 @@ func (i *IOQController) CompleteIO(iocb IOCBContract, msg PDU) error {
 		i.state = IOQControllerStates_CTRL_WAITING
 		i.stateLog.Debug().Timestamp().Str("name", i.name).Msg("waiting")
 
-		task := FunctionTask(i._waitTrigger, NoArgs, NoKWArgs)
+		task := FunctionTask(i._waitTrigger, NoArgs, NoKWArgs())
 		task.InstallTask(WithInstallTaskOptionsDelta(i.waitTime))
 	} else {
 		// change our state
@@ -196,7 +196,7 @@ func (i *IOQController) CompleteIO(iocb IOCBContract, msg PDU) error {
 		i.stateLog.Debug().Timestamp().Str("name", i.name).Msg("idle")
 
 		// look for more to do
-		Deferred(i._trigger, NoArgs, NoKWArgs)
+		Deferred(i._trigger, NoArgs, NoKWArgs())
 	}
 
 	return nil
@@ -225,7 +225,7 @@ func (i *IOQController) AbortIO(iocb IOCBContract, err error) error {
 	i.stateLog.Debug().Timestamp().Str("name", i.name).Msg("idle")
 
 	// look for more to do
-	Deferred(i._trigger, NoArgs, NoKWArgs)
+	Deferred(i._trigger, NoArgs, NoKWArgs())
 	return nil
 }
 
@@ -262,7 +262,7 @@ func (i *IOQController) _trigger(_ Args, _ KWArgs) error {
 
 	// if we're idle, call again
 	if i.state == IOQControllerStates_CTRL_IDLE {
-		Deferred(i._trigger, NoArgs, NoKWArgs)
+		Deferred(i._trigger, NoArgs, NoKWArgs())
 	}
 	return nil
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/netservice/netservice_NetworkAdapter.go b/plc4go/internal/bacnetip/bacgopes/netservice/netservice_NetworkAdapter.go
index fe19cada35..7ab3ca7bfc 100644
--- a/plc4go/internal/bacnetip/bacgopes/netservice/netservice_NetworkAdapter.go
+++ b/plc4go/internal/bacnetip/bacgopes/netservice/netservice_NetworkAdapter.go
@@ -105,7 +105,7 @@ func (n *NetworkAdapter) ProcessNPDU(npdu NPDU) error {
 	if err := npdu.Encode(pdu); err != nil {
 		return errors.Wrap(err, "error encoding NPDU")
 	}
-	return n.Request(NA(pdu), NoKWArgs)
+	return n.Request(NA(pdu), NoKWArgs())
 }
 
 func (n *NetworkAdapter) EstablishConnectionToNetwork(net any) error {
diff --git a/plc4go/internal/bacnetip/bacgopes/netservice/netservice_NetworkServiceAccessPoint.go b/plc4go/internal/bacnetip/bacgopes/netservice/netservice_NetworkServiceAccessPoint.go
index 4ad12a6956..f213c1c585 100644
--- a/plc4go/internal/bacnetip/bacgopes/netservice/netservice_NetworkServiceAccessPoint.go
+++ b/plc4go/internal/bacnetip/bacgopes/netservice/netservice_NetworkServiceAccessPoint.go
@@ -357,7 +357,7 @@ func (n *NetworkServiceAccessPoint) Indication(args Args, kwArgs KWArgs) error {
 
 		// send it to all the adapters
 		for _, adapter := range n.adapters {
-			if err := n.SapIndication(NA(adapter, xnpdu), NoKWArgs); err != nil {
+			if err := n.SapIndication(NA(adapter, xnpdu), NoKWArgs()); err != nil {
 				return errors.Wrap(err, "error doing SapIndication")
 			}
 		}
@@ -504,7 +504,7 @@ func (n *NetworkServiceAccessPoint) ProcessNPDU(adapter *NetworkAdapter, npdu NP
 			n.log.Debug().Stringer("pduDestination", apdu.GetPDUDestination()).Msg("apdu.pduDestination")
 
 			// pass upstream to the application layer
-			if err := n.Response(NA(apdu), NoKWArgs); err != nil {
+			if err := n.Response(NA(apdu), NoKWArgs()); err != nil {
 				return errors.Wrap(err, "error passing response")
 			}
 		}
@@ -526,7 +526,7 @@ func (n *NetworkServiceAccessPoint) ProcessNPDU(adapter *NetworkAdapter, npdu NP
 			}
 
 			// pass to the service element
-			if err := n.SapRequest(NA(adapter, xpdu), NoKWArgs); err != nil {
+			if err := n.SapRequest(NA(adapter, xpdu), NoKWArgs()); err != nil {
 				return errors.Wrap(err, "error passing sap _request")
 			}
 		}
@@ -658,7 +658,7 @@ func (n *NetworkServiceAccessPoint) ProcessNPDU(adapter *NetworkAdapter, npdu NP
 			}
 
 			// pass this along as if it came from the NSE
-			if err := n.SapIndication(NA(xadapter, NewPDU(NoArgs, NKW(KWCompRootMessage, xnpdu, KWCPCIDestination, pduDestination))), NoKWArgs); err != nil {
+			if err := n.SapIndication(NA(xadapter, NewPDU(NoArgs, NKW(KWCompRootMessage, xnpdu, KWCPCIDestination, pduDestination))), NoKWArgs()); err != nil {
 				return errors.Wrap(err, "error sending indication")
 			}
 		}
diff --git a/plc4go/internal/bacnetip/bacgopes/netservice/netservice_NetworkServiceElement.go b/plc4go/internal/bacnetip/bacgopes/netservice/netservice_NetworkServiceElement.go
index 39aeaa711f..3000458dba 100644
--- a/plc4go/internal/bacnetip/bacgopes/netservice/netservice_NetworkServiceElement.go
+++ b/plc4go/internal/bacnetip/bacgopes/netservice/netservice_NetworkServiceElement.go
@@ -69,7 +69,7 @@ func NewNetworkServiceElement(localLog zerolog.Logger, opts ...func(*NetworkServ
 
 	// if starting up is enabled defer our startup function
 	if !n.argStartupDisabled {
-		Deferred(n.Startup, NoArgs, NoKWArgs)
+		Deferred(n.Startup, NoArgs, NoKWArgs())
 	}
 	return n, nil
 }
@@ -130,7 +130,7 @@ func (n *NetworkServiceElement) Startup(_ Args, _ KWArgs) error {
 		// sap.router_info_cache.update_router_info(adapter.adapterNet, adapter.adapterAddr, netlist)
 
 		// send an announcement
-		if err := n.iamRouterToNetwork(NA(adapter, nil, netlist), NoKWArgs); err != nil {
+		if err := n.iamRouterToNetwork(NA(adapter, nil, netlist), NoKWArgs()); err != nil {
 			n.log.Debug().Err(err).Msg("I-Am-Router-To-Network failed")
 		}
 	}
@@ -222,9 +222,9 @@ func (n *NetworkServiceElement) Confirmation(args Args, kwArgs KWArgs) error {
 }
 
 func (n *NetworkServiceElement) iamRouterToNetwork(args Args, _ KWArgs) error {
-	adapter := GAO[*NetworkAdapter](args, 0, nil)
-	destination := GAO[*Address](args, 1, nil)
-	network := GAO[[]*uint16](args, 2, nil)
+	adapter, _ := GAO[*NetworkAdapter](args, 0, nil)
+	destination, _ := GAO[*Address](args, 1, nil)
+	network, _ := GAO[[]*uint16](args, 2, nil)
 	n.log.Debug().Stringer("adapter", adapter).Stringer("destination", destination).Interface("network", network).Msg("IamRouterToNetwork")
 
 	// reference the service access point
@@ -328,7 +328,7 @@ func (n *NetworkServiceElement) iamRouterToNetwork(args Args, _ KWArgs) error {
 		n.log.Debug().Stringer("adapter", adapter).Stringer("iamrtn", iamrtn).Msg("adapter, iamrtn")
 
 		// send it back
-		if err := n.Request(NA(adapter, iamrtn), NoKWArgs); err != nil {
+		if err := n.Request(NA(adapter, iamrtn), NoKWArgs()); err != nil {
 			return errors.Wrap(err, "error requesting NPDU")
 		}
 	}
@@ -378,7 +378,7 @@ func (n *NetworkServiceElement) WhoIsRouteToNetwork(adapter *NetworkAdapter, npd
 			iamrtn.SetPDUDestination(npdu.GetPDUSource())
 
 			// send it back
-			if err := n.Response(NA(adapter, iamrtn), NoKWArgs); err != nil {
+			if err := n.Response(NA(adapter, iamrtn), NoKWArgs()); err != nil {
 				return errors.Wrap(err, "error sendinf the response")
 			}
 		}
@@ -407,7 +407,7 @@ func (n *NetworkServiceElement) WhoIsRouteToNetwork(adapter *NetworkAdapter, npd
 			iamrtn.SetPDUDestination(npdu.GetPDUSource())
 
 			// send it back
-			return n.Response(NA(adapter, iamrtn), NoKWArgs)
+			return n.Response(NA(adapter, iamrtn), NoKWArgs())
 		}
 
 		// look for routing information from the network of one of our
@@ -440,7 +440,7 @@ func (n *NetworkServiceElement) WhoIsRouteToNetwork(adapter *NetworkAdapter, npd
 			iamrtn.SetPDUDestination(npdu.GetPDUSource())
 
 			// send it back
-			return n.Response(NA(adapter, iamrtn), NoKWArgs)
+			return n.Response(NA(adapter, iamrtn), NoKWArgs())
 		} else {
 			n.log.Trace().Msg("forwarding to other adapters")
 
@@ -466,7 +466,7 @@ func (n *NetworkServiceElement) WhoIsRouteToNetwork(adapter *NetworkAdapter, npd
 			for _, xadapter := range sap.adapters {
 				if xadapter != adapter {
 					n.log.Debug().Stringer("xadapter", xadapter).Msg("Sending to adapter")
-					if err := n.Request(NA(xadapter, whoisrtn), NoKWArgs); err != nil {
+					if err := n.Request(NA(xadapter, whoisrtn), NoKWArgs()); err != nil {
 						return errors.Wrap(err, "error sending Who is router to network")
 					}
 				}
@@ -505,7 +505,7 @@ func (n *NetworkServiceElement) IAmRouterToNetwork(adapter *NetworkAdapter, npdu
 		for _, xadapter := range sap.adapters {
 			if xadapter != adapter {
 				n.log.Debug().Stringer("xadapter", xadapter).Msg("Sending to adapter")
-				if err := n.Request(NA(xadapter, iamrtn), NoKWArgs); err != nil {
+				if err := n.Request(NA(xadapter, iamrtn), NoKWArgs()); err != nil {
 					return errors.Wrap(err, "error sending I am router to network")
 				}
 			}
diff --git a/plc4go/internal/bacnetip/bacgopes/npdu/npdu_NPCI.go b/plc4go/internal/bacnetip/bacgopes/npdu/npdu_NPCI.go
index b6ea4986ea..2dc01778ce 100644
--- a/plc4go/internal/bacnetip/bacgopes/npdu/npdu_NPCI.go
+++ b/plc4go/internal/bacnetip/bacgopes/npdu/npdu_NPCI.go
@@ -87,7 +87,7 @@ func NewNPCI(nlm readWriteModel.NLM, apdu readWriteModel.APDU) NPCI {
 	npdu, _ := n.buildNPDU(0, nil, nil, false, readWriteModel.NPDUNetworkPriority_NORMAL_MESSAGE, nlm, apdu)
 	nkw := NKW(KWCompRootMessage, npdu)
 	if npdu == nil {
-		nkw = NoKWArgs
+		nkw = NoKWArgs()
 	}
 	n.PCI = NewPCI(NoArgs, nkw) // TODO: convert to args so we can solve all those todos
 	n.AddExtraPrinters(n.PCI.(DebugContentPrinter))
diff --git a/plc4go/internal/bacnetip/bacgopes/npdu/npdu_NPDU.go b/plc4go/internal/bacnetip/bacgopes/npdu/npdu_NPDU.go
index ba6fcd3e22..b9301af40d 100644
--- a/plc4go/internal/bacnetip/bacgopes/npdu/npdu_NPDU.go
+++ b/plc4go/internal/bacnetip/bacgopes/npdu/npdu_NPDU.go
@@ -52,7 +52,8 @@ var _ = (NPDU)(nil)
 func NewNPDU(nlm readWriteModel.NLM, apdu readWriteModel.APDU) (NPDU, error) {
 	n := &_NPDU{}
 	n._NPCI = NewNPCI(nlm, apdu).(*_NPCI)
-	n.PDUData = NewPDUData(NoArgs, NoKWArgs)
+	n.PDUData = NewPDUData(NoArgs, NoKWArgs())
+	n.AddExtraPrinters(n.PDUData.(DebugContentPrinter))
 	if n.GetRootMessage() != nil {
 		data, _ := n.GetRootMessage().Serialize()
 		n.SetPduData(data)
diff --git a/plc4go/internal/bacnetip/bacgopes/pdu/comm_PDUData.go b/plc4go/internal/bacnetip/bacgopes/pdu/comm_PDUData.go
index db63bcdfa8..b0d60070a3 100644
--- a/plc4go/internal/bacnetip/bacgopes/pdu/comm_PDUData.go
+++ b/plc4go/internal/bacnetip/bacgopes/pdu/comm_PDUData.go
@@ -55,15 +55,15 @@ type _PDUData struct {
 var _ PDUData = (*_PDUData)(nil)
 
 func NewPDUData(args Args, kwArgs KWArgs) PDUData {
-	data := GAO[any](args, 0, nil)
+	data, ok := GAO[any](args, 0, nil)
+	if ok {
+		args = args[1:]
+	}
 	if _debug != nil {
 		_debug("__init__ %r %r %r", data, args, kwArgs)
 	}
 	p := &_PDUData{}
-	if len(args) == 0 {
-		return p
-	}
-	switch data := args[0].(type) {
+	switch data := data.(type) {
 	case []byte:
 		p.data = make([]byte, len(data))
 		copy(p.data, data)
@@ -173,5 +173,8 @@ func (d *_PDUData) PrintDebugContents(indent int, file io.Writer, _ids []uintptr
 }
 
 func (d *_PDUData) String() string {
+	if d == nil {
+		return ""
+	}
 	return Btox(d.data, ".")
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/pdu/pdu_PDU.go b/plc4go/internal/bacnetip/bacgopes/pdu/pdu_PDU.go
index 8229f06ee4..e72e6c8628 100644
--- a/plc4go/internal/bacnetip/bacgopes/pdu/pdu_PDU.go
+++ b/plc4go/internal/bacnetip/bacgopes/pdu/pdu_PDU.go
@@ -63,6 +63,15 @@ func (p *_PDU) DeepCopy() any {
 	return p.deepCopy()
 }
 
+func (p *_PDU) Format(s fmt.State, v rune) {
+	switch v {
+	case 's':
+		_, _ = fmt.Fprint(s, p.String())
+	default:
+		p.DefaultRFormatter.Format(s, v)
+	}
+}
+
 func (p *_PDU) String() string {
 	return fmt.Sprintf("<%T %s -> %s : %s>", p, p.GetPDUSource(), p.GetPDUDestination(), p._PDUData)
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/service/service_device_WhoIsIAmServices.go b/plc4go/internal/bacnetip/bacgopes/service/service_device_WhoIsIAmServices.go
index 0933a26fb7..05577400ee 100644
--- a/plc4go/internal/bacnetip/bacgopes/service/service_device_WhoIsIAmServices.go
+++ b/plc4go/internal/bacnetip/bacgopes/service/service_device_WhoIsIAmServices.go
@@ -108,7 +108,7 @@ func (w *WhoIsIAmServices) WhoIs(lowLimit, highLimit *uint, address *Address) er
 
 	w.log.Debug().Stringer("whoIs", whoIs).Msg("WhoIs")
 
-	return w._requirements.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, whoIs, KWCPCIDestination, address))), NoKWArgs)
+	return w._requirements.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, whoIs, KWCPCIDestination, address))), NoKWArgs())
 }
 
 // DoWhoIsRequest respond to a Who-Is request.
@@ -196,7 +196,7 @@ func (w *WhoIsIAmServices) IAm(address *Address) error {
 	iAm.SetPDUDestination(address)
 	w.log.Debug().Stringer("iAm", iAm).Msg("IAm")
 
-	return w._requirements.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, iAm, KWCPCIDestination, address))), NoKWArgs)
+	return w._requirements.Request(NA(NewPDU(NoArgs, NKW(KWCompRootMessage, iAm, KWCPCIDestination, address))), NoKWArgs())
 }
 
 // DoIAmRequest responds to an I-Am request.
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/quick/bvll.go b/plc4go/internal/bacnetip/bacgopes/tests/quick/bvll.go
index 00d79f194e..2c80fe6085 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/quick/bvll.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/quick/bvll.go
@@ -27,7 +27,7 @@ import (
 )
 
 func Result(i uint16) *bvll.Result {
-	result, err := bvll.NewResult(ToPtr(readWriteModel.BVLCResultCode(i)), NoArgs, NoKWArgs)
+	result, err := bvll.NewResult(ToPtr(readWriteModel.BVLCResultCode(i)), NoArgs, NoKWArgs())
 	if err != nil {
 		panic(err)
 	}
@@ -35,7 +35,7 @@ func Result(i uint16) *bvll.Result {
 }
 
 func WriteBroadcastDistributionTable(bdt ...*pdu.Address) *bvll.WriteBroadcastDistributionTable {
-	writeBroadcastDistributionTable, err := bvll.NewWriteBroadcastDistributionTable(bdt, NoArgs, NoKWArgs)
+	writeBroadcastDistributionTable, err := bvll.NewWriteBroadcastDistributionTable(bdt, NoArgs, NoKWArgs())
 	if err != nil {
 		panic(err)
 	}
@@ -51,7 +51,7 @@ func ReadBroadcastDistributionTable() *bvll.ReadBroadcastDistributionTable {
 }
 
 func ReadBroadcastDistributionTableAck(bdt ...*pdu.Address) *bvll.ReadBroadcastDistributionTableAck {
-	readBroadcastDistributionTable, err := bvll.NewReadBroadcastDistributionTableAck(bdt, NoArgs, NoKWArgs)
+	readBroadcastDistributionTable, err := bvll.NewReadBroadcastDistributionTableAck(bdt, NoArgs, NoKWArgs())
 	if err != nil {
 		panic(err)
 	}
@@ -59,7 +59,7 @@ func ReadBroadcastDistributionTableAck(bdt ...*pdu.Address) *bvll.ReadBroadcastD
 }
 
 func ForwardedNPDU(addr *pdu.Address, pduBytes []byte) *bvll.ForwardedNPDU {
-	npdu, err := bvll.NewForwardedNPDU(addr, NA(pduBytes), NoKWArgs)
+	npdu, err := bvll.NewForwardedNPDU(addr, NA(pduBytes), NoKWArgs())
 	if err != nil {
 		panic(err)
 	}
@@ -67,15 +67,15 @@ func ForwardedNPDU(addr *pdu.Address, pduBytes []byte) *bvll.ForwardedNPDU {
 }
 
 func RegisterForeignDevice(ttl uint16) *bvll.RegisterForeignDevice {
-	registerForeignDevice, err := bvll.NewRegisterForeignDevice(&ttl, NoArgs, NoKWArgs)
+	registerForeignDevice, err := bvll.NewRegisterForeignDevice(&ttl, NoArgs, NoKWArgs())
 	if err != nil {
 		panic(err)
 	}
 	return registerForeignDevice
 }
 
-func ReadForeignDeviceTable() *bvll.ReadForeignDeviceTable {
-	readForeignDeviceTable, err := bvll.NewReadForeignDeviceTable(Nothing())
+func ReadForeignDeviceTable(addr *pdu.Address) *bvll.ReadForeignDeviceTable {
+	readForeignDeviceTable, err := bvll.NewReadForeignDeviceTable(NoArgs, NKW(KWCPCIDestination, addr))
 	if err != nil {
 		panic(err)
 	}
@@ -87,7 +87,7 @@ func FDTEntry() (entry *bvll.FDTEntry) {
 }
 
 func ReadForeignDeviceTableAck(fdts ...*bvll.FDTEntry) *bvll.ReadForeignDeviceTableAck {
-	readForeignDeviceTableAck, err := bvll.NewReadForeignDeviceTableAck(fdts, NoArgs, NoKWArgs)
+	readForeignDeviceTableAck, err := bvll.NewReadForeignDeviceTableAck(fdts, NoArgs, NoKWArgs())
 	if err != nil {
 		panic(err)
 	}
@@ -95,7 +95,7 @@ func ReadForeignDeviceTableAck(fdts ...*bvll.FDTEntry) *bvll.ReadForeignDeviceTa
 }
 
 func DeleteForeignDeviceTableEntry(address *pdu.Address) *bvll.DeleteForeignDeviceTableEntry {
-	deleteForeignDeviceTableEntry, err := bvll.NewDeleteForeignDeviceTableEntry(address, NoArgs, NoKWArgs)
+	deleteForeignDeviceTableEntry, err := bvll.NewDeleteForeignDeviceTableEntry(address, NoArgs, NoKWArgs())
 	if err != nil {
 		panic(err)
 	}
@@ -103,7 +103,7 @@ func DeleteForeignDeviceTableEntry(address *pdu.Address) *bvll.DeleteForeignDevi
 }
 
 func DistributeBroadcastToNetwork(pduBytes []byte) *bvll.DistributeBroadcastToNetwork {
-	distributeBroadcastToNetwork, err := bvll.NewDistributeBroadcastToNetwork(NA(pduBytes), NoKWArgs)
+	distributeBroadcastToNetwork, err := bvll.NewDistributeBroadcastToNetwork(NA(pduBytes), NoKWArgs())
 	if err != nil {
 		panic(err)
 	}
@@ -111,7 +111,7 @@ func DistributeBroadcastToNetwork(pduBytes []byte) *bvll.DistributeBroadcastToNe
 }
 
 func OriginalUnicastNPDU(pduBytes []byte) *bvll.OriginalUnicastNPDU {
-	npdu, err := bvll.NewOriginalUnicastNPDU(NA(pduBytes), NoKWArgs)
+	npdu, err := bvll.NewOriginalUnicastNPDU(NA(pduBytes), NoKWArgs())
 	if err != nil {
 		panic(err)
 	}
@@ -119,7 +119,7 @@ func OriginalUnicastNPDU(pduBytes []byte) *bvll.OriginalUnicastNPDU {
 }
 
 func OriginalBroadcastNPDU(pduBytes []byte) *bvll.OriginalBroadcastNPDU {
-	npdu, err := bvll.NewOriginalBroadcastNPDU(NA(pduBytes), NoKWArgs)
+	npdu, err := bvll.NewOriginalBroadcastNPDU(NA(pduBytes), NoKWArgs())
 	if err != nil {
 		panic(err)
 	}
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/quick/pdu.go b/plc4go/internal/bacnetip/bacgopes/tests/quick/pdu.go
index 10c3f362ab..dc3f936684 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/quick/pdu.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/quick/pdu.go
@@ -38,8 +38,8 @@ func AddressTuple[L any, R any](l L, r R) *pdu.AddressTuple[L, R] {
 
 func PDUData(args ...any) pdu.PDUData {
 	if args == nil {
-		return pdu.NewPDUData(NoArgs, NoKWArgs)
+		return pdu.NewPDUData(NoArgs, NoKWArgs())
 	} else {
-		return pdu.NewPDUData(NA(args[0].([]byte)), NoKWArgs)
+		return pdu.NewPDUData(NA(args[0].([]byte)), NoKWArgs())
 	}
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/settings.go b/plc4go/internal/bacnetip/bacgopes/tests/settings.go
deleted file mode 100644
index 2b5ac5cf22..0000000000
--- a/plc4go/internal/bacnetip/bacgopes/tests/settings.go
+++ /dev/null
@@ -1,31 +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 tests
-
-import "os"
-
-var (
-	// LogTimeMachine enables logging for the time machine
-	LogTimeMachine bool
-)
-
-func init() {
-	LogTimeMachine = os.Getenv("LogTimeMachine") == "true"
-}
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machine.go b/plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machine.go
index ebd4a10739..7592cbcb52 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machine.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machine.go
@@ -32,6 +32,7 @@ import (
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/debugging"
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/npdu"
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/pdu"
+	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/tests"
 	"github.com/apache/plc4x/plc4go/spi/utils"
 )
 
@@ -192,7 +193,7 @@ func MatchPdu(localLog zerolog.Logger, pdu any, pduType any, pduAttrs map[KnownK
 				attrLog.Trace().Msg("doesn't match")
 				return false
 			}
-		case KWCPCIData:
+		case KWTestPDUData:
 			got := pdu.(PDU).GetPduData()
 			var want []byte
 			switch attrValue := attrValue.(type) {
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machine_StateMachine.go b/plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machine_StateMachine.go
index 58cec64a23..bde4a2af9b 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machine_StateMachine.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machine_StateMachine.go
@@ -60,7 +60,7 @@ type StateMachineContract interface {
 	EventSet(id string)
 	Run() error
 	Reset()
-	GetTransactionLog() []string
+	GetTransactionLog() []TransactionLogEntry
 	GetCurrentState() State
 	GetUnexpectedReceiveState() State
 	GetStartState() State
@@ -82,7 +82,7 @@ type StateMachineRequirements interface {
 	Send(args Args, kwArgs KWArgs) error
 }
 
-//go:generate plc4xGenerator -type=stateMachine -prefix=state_machine
+//go:generate plc4xGenerator -type=stateMachine -prefix=state_machine_
 type stateMachine struct {
 	requirements StateMachineRequirements `ignore:"true"`
 
@@ -107,11 +107,20 @@ type stateMachine struct {
 	isFailState            *bool
 	stateTransitioning     int
 	currentState           State
-	transactionLog         []string
+	transactionLog         []TransactionLogEntry
 
 	log zerolog.Logger
 }
 
+type TransactionLogEntry struct {
+	Direction string
+	Pdu       PDU
+}
+
+func (t TransactionLogEntry) String() string {
+	return t.Pdu.String() + t.Pdu.String()
+}
+
 var _ StateMachineContract = (*stateMachine)(nil)
 
 // NewStateMachine creates a new state machine. Make sure to call the init function (Init must be called after a new (can't be done in constructor as initialization is then not yet finished))
@@ -162,11 +171,11 @@ func NewStateMachine(localLog zerolog.Logger, requirements StateMachineRequireme
 
 		s.transitionQueue = make(chan PDU, 100)
 
-		s.stateTimeoutTask = NewTimeoutTask(s.StateTimeout, NoArgs, NoKWArgs, nil)
+		s.stateTimeoutTask = NewTimeoutTask(s.StateTimeout, NoArgs, NoKWArgs(), nil)
 
 		if s.timeout != 0 {
 			s.timeoutState = s.NewState("state machine timeout").Fail("")
-			s.timeoutTask = NewTimeoutTask(s.StateMachineTimeout, NoArgs, NoKWArgs, s.stateMachineTimeout)
+			s.timeoutTask = NewTimeoutTask(s.StateMachineTimeout, NoArgs, NoKWArgs(), s.stateMachineTimeout)
 		}
 	}
 }
@@ -233,7 +242,7 @@ func (s *stateMachine) setMachineGroup(machineGroup *StateMachineGroup) {
 	s.machineGroup = machineGroup
 }
 
-func (s *stateMachine) GetTransactionLog() []string {
+func (s *stateMachine) GetTransactionLog() []TransactionLogEntry {
 	return s.transactionLog
 }
 
@@ -275,7 +284,7 @@ func (s *stateMachine) Reset() {
 
 	// no current state, empty transaction log
 	s.currentState = nil
-	s.transactionLog = make([]string, 0)
+	s.transactionLog = make([]TransactionLogEntry, 0)
 
 	// we are not starting up
 	s.startupFlag = false
@@ -599,14 +608,14 @@ func (s *stateMachine) gotoState(state State) error {
 }
 
 func (s *stateMachine) BeforeSend(pdu PDU) {
-	s.transactionLog = append(s.transactionLog, fmt.Sprintf(">>> %v", pdu))
+	s.transactionLog = append(s.transactionLog, TransactionLogEntry{">>>", pdu})
 }
 
 func (s *stateMachine) AfterSend(pdu PDU) {
 }
 
 func (s *stateMachine) BeforeReceive(pdu PDU) {
-	s.transactionLog = append(s.transactionLog, fmt.Sprintf("<<< %v", pdu))
+	s.transactionLog = append(s.transactionLog, TransactionLogEntry{"<<< %s", pdu})
 }
 
 func (s *stateMachine) Receive(args Args, kwArgs KWArgs) error {
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machinestateMachine_plc4xgen.go b/plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machine_stateMachine_plc4xgen.go
similarity index 97%
rename from plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machinestateMachine_plc4xgen.go
rename to plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machine_stateMachine_plc4xgen.go
index 8592174079..abf92d3be1 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machinestateMachine_plc4xgen.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/state_machine/state_machine_stateMachine_plc4xgen.go
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-// Code generated by "plc4xGenerator -type=stateMachine -prefix=state_machine"; DO NOT EDIT.
+// Code generated by "plc4xGenerator -type=stateMachine -prefix=state_machine_"; DO NOT EDIT.
 
 package state_machine
 
@@ -177,7 +177,9 @@ func (d *stateMachine) SerializeWithWriteBuffer(ctx context.Context, writeBuffer
 		return err
 	}
 	for _, elem := range d.transactionLog {
-		if err := writeBuffer.WriteString("", uint32(len(elem)*8), elem); err != nil {
+		_value := fmt.Sprintf("%v", elem)
+
+		if err := writeBuffer.WriteString("transactionLog", uint32(len(_value)*8), _value); err != nil {
 			return err
 		}
 	}
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/helpers_BIPSimpleApplicationLayerStateMachine.go b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/helpers_BIPSimpleApplicationLayerStateMachine.go
index 94d5dea6f3..9a9903a725 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/helpers_BIPSimpleApplicationLayerStateMachine.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/helpers_BIPSimpleApplicationLayerStateMachine.go
@@ -150,10 +150,10 @@ func NewBIPSimpleApplicationLayerStateMachine(localLog zerolog.Logger, address s
 
 func (b *BIPSimpleApplicationLayerStateMachine) Indication(args Args, kwArgs KWArgs) error {
 	b.log.Debug().Stringer("Args", args).Stringer("KWArgs", kwArgs).Msg("Indication")
-	return b.Receive(args, NoKWArgs)
+	return b.Receive(args, NoKWArgs())
 }
 
 func (b *BIPSimpleApplicationLayerStateMachine) Confirmation(args Args, kwArgs KWArgs) error {
 	b.log.Debug().Stringer("Args", args).Stringer("KWArgs", kwArgs).Msg("Confirmation")
-	return b.Receive(args, NoKWArgs)
+	return b.Receive(args, NoKWArgs())
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/helpers_BIPStateMachine.go b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/helpers_BIPStateMachine.go
index a95f3f9c08..dba5c21a75 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/helpers_BIPStateMachine.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/helpers_BIPStateMachine.go
@@ -46,6 +46,9 @@ type BIPStateMachine struct {
 
 func NewBIPStateMachine(localLog zerolog.Logger, address string, vlan *IPNetwork) (*BIPStateMachine, error) {
 	b := &BIPStateMachine{}
+	if _debug != nil {
+		_debug("__init__ %r %r", address, vlan)
+	}
 	var err error
 	b.ClientStateMachine, err = NewClientStateMachine(localLog, WithClientStateMachineName(address), WithClientStateMachineExtension(b))
 	if err != nil {
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/helpers_FauxMultiplexer.go b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/helpers_FauxMultiplexer.go
index de13900290..17c805d75e 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/helpers_FauxMultiplexer.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/helpers_FauxMultiplexer.go
@@ -117,7 +117,7 @@ func (s *FauxMultiplexer) Indication(args Args, kwArgs KWArgs) error {
 	if err != nil {
 		return errors.Wrap(err, "error creating address")
 	}
-	return s.Request(NA(NewPDU(NewArgs(pdu), NKW(KWCPCISource, unicast, KWCPCIDestination, dest))), NoKWArgs)
+	return s.Request(NA(NewPDU(NewArgs(pdu), NKW(KWCPCISource, unicast, KWCPCIDestination, dest))), NoKWArgs())
 }
 
 func (s *FauxMultiplexer) Confirmation(args Args, kwArgs KWArgs) error {
@@ -144,5 +144,5 @@ func (s *FauxMultiplexer) Confirmation(args Args, kwArgs KWArgs) error {
 		dest = pdu.GetPDUDestination()
 	}
 
-	return s.Response(NA(NewPDU(NA(pdu), NKW(KWCompRootMessage, pdu, KWCPCISource, src, KWCPCIDestination, dest))), NoKWArgs)
+	return s.Response(NA(NewPDU(NA(pdu), NKW(KWCompRootMessage, pdu, KWCPCISource, src, KWCPCIDestination, dest))), NoKWArgs())
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_bbmd_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_bbmd_test.go
index 4360033c05..fd184441cc 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_bbmd_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_bbmd_test.go
@@ -104,7 +104,7 @@ func (t *TBNetwork) Run(timeLimit time.Duration) {
 	for _, machine := range t.StateMachineGroup.GetStateMachines() {
 		t.log.Debug().Stringer("machine", machine).Msg("Machine:")
 		for _, s := range machine.GetTransactionLog() {
-			t.log.Debug().Str("logEntry", s).Msg("logEntry")
+			t.log.Debug().Stringer("logEntry", s).Msg("logEntry")
 		}
 	}
 
@@ -184,7 +184,7 @@ func (suite *NonBBMDSuite) TestRegisterFail() {
 
 func (suite *NonBBMDSuite) TestReadFail() {
 	// read the broadcast distribution table, get a nack
-	readForeignDeviceTable := quick.ReadForeignDeviceTable()
+	readForeignDeviceTable := quick.ReadForeignDeviceTable(nil)
 	readForeignDeviceTable.SetPDUDestination(suite.iut.address) // TODO: upstream does this inline
 	suite.td.GetStartState().Doc("1-4-0").
 		Send(readForeignDeviceTable, nil).Doc("1-4-1").
@@ -265,14 +265,14 @@ func TestBBMD(t *testing.T) {
 		// broadcast a forwarded NPDU
 		td.GetStartState().Doc("2-1-0").
 			Send(quick.WhoIsRequest(NKW(KWCPCIDestination, NewLocalBroadcast(nil))), nil).Doc("2-1-1").
-			Receive(NA((*IAmRequest)(nil)), NoKWArgs).Doc("2-1-2").
+			Receive(NA((*IAmRequest)(nil)), NoKWArgs()).Doc("2-1-2").
 			Success("")
 
 		// listen for the directed broadcast, then the original unicast,
 		// then fail if there's anything else
 		listener.GetStartState().Doc("2-2-0").
-			Receive(NA((*ForwardedNPDU)(nil)), NoKWArgs).Doc("2-2-1").
-			Receive(NA((*OriginalUnicastNPDU)(nil)), NoKWArgs).Doc("2-2-2").
+			Receive(NA((*ForwardedNPDU)(nil)), NoKWArgs()).Doc("2-2-1").
+			Receive(NA((*OriginalUnicastNPDU)(nil)), NoKWArgs()).Doc("2-2-2").
 			Timeout(3*time.Second, nil).Doc("2-2-3").
 			Success("")
 
@@ -315,27 +315,27 @@ func TestBBMD(t *testing.T) {
 		// broadcast a forwarded NPDU
 		td.GetStartState().Doc("2-3-0").
 			Send(quick.WhoIsRequest(NKW(KWCPCIDestination, NewLocalBroadcast(nil))), nil).Doc("2-3-1").
-			Receive(NA((*IAmRequest)(nil)), NoKWArgs).Doc("2-3-2").
+			Receive(NA((*IAmRequest)(nil)), NoKWArgs()).Doc("2-3-2").
 			Success("")
 
 		// listen for the forwarded NPDU.  The packet will be sent upstream which
 		// will generate the original unicast going back, then it will be
 		// re-broadcast on the local LAN.  Fail if there's anything after that.
 		s241 := listener.GetStartState().Doc("2-4-0").
-			Receive(NA((*ForwardedNPDU)(nil)), NoKWArgs).Doc("2-4-1")
+			Receive(NA((*ForwardedNPDU)(nil)), NoKWArgs()).Doc("2-4-1")
 
 		// look for the original unicast going back, followed by the rebroadcast
 		// of the forwarded NPDU on the local LAN
 		both := s241.
-			Receive(NA((*OriginalUnicastNPDU)(nil)), NoKWArgs).Doc("2-4-1-a").
-			Receive(NA((*ForwardedNPDU)(nil)), NoKWArgs).Doc("2-4-1-b")
+			Receive(NA((*OriginalUnicastNPDU)(nil)), NoKWArgs()).Doc("2-4-1-a").
+			Receive(NA((*ForwardedNPDU)(nil)), NoKWArgs()).Doc("2-4-1-b")
 
 		// fail if anything is received after both packets
 		both.Timeout(3*time.Second, nil).Doc("2-4-4").
 			Success("")
 
 		// allow the two packets in either order
-		s241.Receive(NA((*ForwardedNPDU)(nil)), NoKWArgs).Doc("2-4-2-a").
+		s241.Receive(NA((*ForwardedNPDU)(nil)), NoKWArgs()).Doc("2-4-2-a").
 			Receive(NA((*OriginalUnicastNPDU)(nil)), NKW("nextState", both)).Doc("2-4-2-b")
 
 		// run the group
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_codec_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_codec_test.go
index 3938b995e3..6b35f9da90 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_codec_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_codec_test.go
@@ -31,6 +31,7 @@ import (
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/comp"
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/debugging"
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/pdu"
+	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/tests"
 	"github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/tests/quick"
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/tests/state_machine"
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes"
@@ -111,12 +112,12 @@ func (suite *TestAnnexJCodecSuite) TestResult() {
 		}
 	}
 
-	err = suite.Request(NA(quick.Result(0)), NoKWArgs)
+	err = suite.Request(NA(quick.Result(0)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA((*Result)(nil)), NKW(KWBvlciResultCode, readWriteModel.BVLCResultCode(0)))
 
@@ -131,12 +132,12 @@ func (suite *TestAnnexJCodecSuite) TestResult() {
 		}
 	}
 
-	err = suite.Request(NA(quick.Result(0x0010)), NoKWArgs)
+	err = suite.Request(NA(quick.Result(0x0010)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA((*Result)(nil)), NKW(KWBvlciResultCode, readWriteModel.BVLCResultCode(0x0010)))
 }
@@ -153,12 +154,12 @@ func (suite *TestAnnexJCodecSuite) TestWriteBroadcastDistributionTable() {
 		}
 	}
 
-	err = suite.Request(NA(quick.WriteBroadcastDistributionTable()), NoKWArgs)
+	err = suite.Request(NA(quick.WriteBroadcastDistributionTable()), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA((*WriteBroadcastDistributionTable)(nil)), NKW(KWBvlciBDT, []*Address{}))
 
@@ -175,12 +176,12 @@ func (suite *TestAnnexJCodecSuite) TestWriteBroadcastDistributionTable() {
 		}
 	}
 
-	err = suite.Request(NA(quick.WriteBroadcastDistributionTable(addr)), NoKWArgs)
+	err = suite.Request(NA(quick.WriteBroadcastDistributionTable(addr)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA((*WriteBroadcastDistributionTable)(nil)), NKW(KWBvlciBDT, []*Address{addr}))
 }
@@ -197,14 +198,14 @@ func (suite *TestAnnexJCodecSuite) TestReadBroadcastDistributionTable() {
 		}
 	}
 
-	err = suite.Request(NA(quick.ReadBroadcastDistributionTable()), NoKWArgs)
+	err = suite.Request(NA(quick.ReadBroadcastDistributionTable()), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Confirmation(NA((*ReadBroadcastDistributionTable)(nil)), NoKWArgs)
+	err = suite.Confirmation(NA((*ReadBroadcastDistributionTable)(nil)), NoKWArgs())
 }
 
 func (suite *TestAnnexJCodecSuite) TestReadBroadcastDistributionTableAck() {
@@ -219,12 +220,12 @@ func (suite *TestAnnexJCodecSuite) TestReadBroadcastDistributionTableAck() {
 		}
 	}
 
-	err = suite.Request(NA(quick.ReadBroadcastDistributionTableAck()), NoKWArgs)
+	err = suite.Request(NA(quick.ReadBroadcastDistributionTableAck()), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA((*ReadBroadcastDistributionTableAck)(nil)), NKW(KWBvlciBDT, []*Address{}))
 
@@ -241,43 +242,34 @@ func (suite *TestAnnexJCodecSuite) TestReadBroadcastDistributionTableAck() {
 		}
 	}
 
-	err = suite.Request(NA(quick.ReadBroadcastDistributionTableAck(addr)), NoKWArgs)
+	err = suite.Request(NA(quick.ReadBroadcastDistributionTableAck(addr)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA((*ReadBroadcastDistributionTableAck)(nil)), NKW(KWBvlciBDT, []*Address{addr}))
 }
 
 func (suite *TestAnnexJCodecSuite) TestForwardNPDU() {
 	addr, err := NewAddress(NA("192.168.0.1"))
-	xpdu, err := Xtob(
-		"deadbeef", // forwarded PDU
-	)
+	xpdu, err := Xtob("deadbeef")
 	suite.Require().NoError(err)
 	pduBytes, err := Xtob("81.04.000e" + //
 		"c0.a8.00.01.ba.c0" + // original source address
 		"deadbeef", // forwarded PDU
 	)
 	suite.Require().NoError(err)
-	{ // Parse with plc4x parser to validate
-		parse, err := readWriteModel.BVLCParse[readWriteModel.BVLC](testutils.TestContext(suite.T()), pduBytes)
-		suite.Assert().NoError(err)
-		if parse != nil {
-			suite.T().Log("\n" + parse.String())
-		}
-	}
 
-	err = suite.Request(NA(quick.ForwardedNPDU(addr, xpdu)), NoKWArgs)
+	err = suite.Request(NA(quick.ForwardedNPDU(addr, xpdu)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Confirmation(NA((*ForwardedNPDU)(nil)), NKW(KWBvlciAddress, addr, KWCPCIData, xpdu))
+	err = suite.Confirmation(NA((*ForwardedNPDU)(nil)), NKW(KWBvlciAddress, addr, KWTestPDUData, xpdu))
 	suite.Assert().NoError(err)
 }
 
@@ -296,12 +288,12 @@ func (suite *TestAnnexJCodecSuite) TestRegisterForeignDevice() {
 		}
 	}
 
-	err = suite.Request(NA(quick.RegisterForeignDevice(30)), NoKWArgs)
+	err = suite.Request(NA(quick.RegisterForeignDevice(30)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA((*RegisterForeignDevice)(nil)), NKW(KWBvlciTimeToLive, uint16(30)))
 }
@@ -318,14 +310,14 @@ func (suite *TestAnnexJCodecSuite) TestReadForeignDeviceTable() {
 		}
 	}
 
-	err = suite.Request(NA(quick.ReadForeignDeviceTable()), NoKWArgs)
+	err = suite.Request(NA(quick.ReadForeignDeviceTable(nil)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Confirmation(NA((*ReadForeignDeviceTable)(nil)), NoKWArgs)
+	err = suite.Confirmation(NA((*ReadForeignDeviceTable)(nil)), NoKWArgs())
 }
 
 func (suite *TestAnnexJCodecSuite) TestReadForeignDeviceTableAck() {
@@ -340,12 +332,12 @@ func (suite *TestAnnexJCodecSuite) TestReadForeignDeviceTableAck() {
 		}
 	}
 
-	err = suite.Request(NA(quick.ReadForeignDeviceTableAck()), NoKWArgs)
+	err = suite.Request(NA(quick.ReadForeignDeviceTableAck()), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA((*ReadForeignDeviceTableAck)(nil)), NKW(KWBvlciFDT, []*FDTEntry{}))
 
@@ -369,12 +361,12 @@ func (suite *TestAnnexJCodecSuite) TestReadForeignDeviceTableAck() {
 		}
 	}
 
-	err = suite.Request(NA(quick.ReadForeignDeviceTableAck(fdte)), NoKWArgs)
+	err = suite.Request(NA(quick.ReadForeignDeviceTableAck(fdte)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA((*ReadForeignDeviceTableAck)(nil)), NKW(KWBvlciFDT, []*FDTEntry{fdte}))
 }
@@ -392,12 +384,12 @@ func (suite *TestAnnexJCodecSuite) TestDeleteForeignDeviceTableEntry() {
 		}
 	}
 
-	err = suite.Request(NA(quick.DeleteForeignDeviceTableEntry(addr)), NoKWArgs)
+	err = suite.Request(NA(quick.DeleteForeignDeviceTableEntry(addr)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA((*DeleteForeignDeviceTableEntry)(nil)), NKW(KWBvlciAddress, addr))
 }
@@ -416,22 +408,15 @@ func (suite *TestAnnexJCodecSuite) TestDistributeBroadcastToNetwork() {
 		"deadbeef", // forwarded PDU
 	)
 	suite.Require().NoError(err)
-	{ // Parse with plc4x parser to validate
-		parse, err := readWriteModel.BVLCParse[readWriteModel.BVLC](testutils.TestContext(suite.T()), pduBytes)
-		suite.Assert().NoError(err)
-		if parse != nil {
-			suite.T().Log("\n" + parse.String())
-		}
-	}
 
-	err = suite.Request(NA(quick.DistributeBroadcastToNetwork(xpdu)), NoKWArgs)
+	err = suite.Request(NA(quick.DistributeBroadcastToNetwork(xpdu)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Confirmation(NA((*DistributeBroadcastToNetwork)(nil)), NKW(KWCPCIData, xpdu))
+	err = suite.Confirmation(NA((*DistributeBroadcastToNetwork)(nil)), NKW(KWTestPDUData, xpdu))
 }
 
 func (suite *TestAnnexJCodecSuite) TestOriginalUnicastNPDU() {
@@ -443,22 +428,15 @@ func (suite *TestAnnexJCodecSuite) TestOriginalUnicastNPDU() {
 		"deadbeef", // forwarded PDU
 	)
 	suite.Require().NoError(err)
-	{ // Parse with plc4x parser to validate
-		parse, err := readWriteModel.BVLCParse[readWriteModel.BVLC](testutils.TestContext(suite.T()), pduBytes)
-		suite.Assert().NoError(err)
-		if parse != nil {
-			suite.T().Log("\n" + parse.String())
-		}
-	}
 
-	err = suite.Request(NA(quick.OriginalUnicastNPDU(xpdu)), NoKWArgs)
+	err = suite.Request(NA(quick.OriginalUnicastNPDU(xpdu)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Confirmation(NA((*OriginalUnicastNPDU)(nil)), NKW(KWCPCIData, xpdu))
+	err = suite.Confirmation(NA((*OriginalUnicastNPDU)(nil)), NKW(KWTestPDUData, xpdu))
 }
 
 func (suite *TestAnnexJCodecSuite) TestOriginalBroadcastNPDU() {
@@ -470,25 +448,17 @@ func (suite *TestAnnexJCodecSuite) TestOriginalBroadcastNPDU() {
 		"deadbeef", // forwarded PDU
 	)
 	suite.Require().NoError(err)
-	{ // Parse with plc4x parser to validate
-		parse, err := readWriteModel.BVLCParse[readWriteModel.BVLC](testutils.TestContext(suite.T()), pduBytes)
-		suite.Assert().NoError(err)
-		if parse != nil {
-			suite.T().Log("\n" + parse.String())
-		}
-	}
 
-	err = suite.Request(NA(quick.OriginalBroadcastNPDU(xpdu)), NoKWArgs)
+	err = suite.Request(NA(quick.OriginalBroadcastNPDU(xpdu)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Confirmation(NA((*OriginalBroadcastNPDU)(nil)), NKW(KWCPCIData, xpdu))
+	err = suite.Confirmation(NA((*OriginalBroadcastNPDU)(nil)), NKW(KWTestPDUData, xpdu))
 }
 
 func TestAnnexJCodec(t *testing.T) {
-	t.Skip("currently broken") // TODO: fixme
 	suite.Run(t, new(TestAnnexJCodecSuite))
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_foreign_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_foreign_test.go
index d5a2976b18..82b366375e 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_foreign_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_foreign_test.go
@@ -109,7 +109,7 @@ func (t *TFNetwork) Run(timeLimit time.Duration) {
 	for _, machine := range t.StateMachineGroup.GetStateMachines() {
 		t.log.Debug().Stringer("machine", machine).Msg("Machine:")
 		for _, s := range machine.GetTransactionLog() {
-			t.log.Debug().Str("logEntry", s).Msg("logEntry")
+			t.log.Debug().Stringer("logEntry", s).Msg("logEntry")
 		}
 	}
 
@@ -120,7 +120,6 @@ func (t *TFNetwork) Run(timeLimit time.Duration) {
 }
 
 func TestForeign(t *testing.T) {
-	t.Skip("currently broken")              // TODO: fixme
 	t.Run("test_idle", func(t *testing.T) { //Test an idle network, nothing happens is success.
 		ExclusiveGlobalTimeMachine(t)
 
@@ -144,7 +143,7 @@ func TestForeign(t *testing.T) {
 		tnet.fd.GetStartState().
 			Call(func(args Args, _ KWArgs) error {
 				return tnet.fd.bip.Register(args[0].(*Address), args[1].(uint16))
-			}, NA(tnet.bbmd.address, 30), NoKWArgs).
+			}, NA(tnet.bbmd.address, uint16(30)), NoKWArgs()).
 			Success("")
 
 		// remote sniffer node
@@ -154,8 +153,8 @@ func TestForeign(t *testing.T) {
 
 		// sniffer traffic
 		remoteSniffer.GetStartState().Doc("1-1-0").
-			Receive(NA((*RegisterForeignDevice)(nil)), NoKWArgs).Doc("1-1-1").
-			Receive(NA((*Result)(nil)), NoKWArgs).Doc("1-1-2").
+			Receive(NA((*RegisterForeignDevice)(nil)), NoKWArgs()).Doc("1-1-1").
+			Receive(NA((*Result)(nil)), NoKWArgs()).Doc("1-1-2").
 			SetEvent("fd-registered").Doc("1-1-3").
 			Success("")
 
@@ -167,12 +166,10 @@ func TestForeign(t *testing.T) {
 		tnet.Append(homeSnooper)
 
 		// snooper will read foreign device table
-		readForeignDeviceTable := quick.ReadForeignDeviceTable() // TODO: upstream sets this as kwArgs, check if we really want to propagate this here...
-		readForeignDeviceTable.SetPDUDestination(tnet.bbmd.address)
 		homeSnooper.GetStartState().Doc("1-2-0").
 			WaitEvent("fd-registered", nil).Doc("1-2-1").
-			Send(readForeignDeviceTable, nil).Doc("1-2-2").
-			Receive(NA((*ReadForeignDeviceTableAck)(nil)), NoKWArgs).Doc("1-2-3").
+			Send(quick.ReadForeignDeviceTable(tnet.bbmd.address), nil).Doc("1-2-2").
+			Receive(NA((*ReadForeignDeviceTableAck)(nil)), NoKWArgs()).Doc("1-2-3").
 			Success("")
 
 		// home sniffer node
@@ -182,10 +179,10 @@ func TestForeign(t *testing.T) {
 
 		// sniffer traffic
 		homeSniffer.GetStartState().Doc("1-3-0").
-			Receive(NA((*RegisterForeignDevice)(nil)), NoKWArgs).Doc("1-3-1").
-			Receive(NA((*Result)(nil)), NoKWArgs).Doc("1-3-2").
-			Receive(NA((*ReadForeignDeviceTable)(nil)), NoKWArgs).Doc("1-3-3").
-			Receive(NA((*ReadForeignDeviceTableAck)(nil)), NoKWArgs).Doc("1-3-4").
+			Receive(NA((*RegisterForeignDevice)(nil)), NoKWArgs()).Doc("1-3-1").
+			Receive(NA((*Result)(nil)), NoKWArgs()).Doc("1-3-2").
+			Receive(NA((*ReadForeignDeviceTable)(nil)), NoKWArgs()).Doc("1-3-3").
+			Receive(NA((*ReadForeignDeviceTableAck)(nil)), NoKWArgs()).Doc("1-3-4").
 			Success("")
 
 		//  run the group
@@ -202,7 +199,7 @@ func TestForeign(t *testing.T) {
 		tnet.fd.GetStartState().
 			Call(func(args Args, _ KWArgs) error {
 				return tnet.fd.bip.Register(args[0].(*Address), args[1].(uint16))
-			}, NA(tnet.bbmd.address, 10), NoKWArgs).
+			}, NA(tnet.bbmd.address, uint16(10)), NoKWArgs()).
 			Success("")
 
 		// the bbmd is idle
@@ -215,10 +212,10 @@ func TestForeign(t *testing.T) {
 
 		// sniffer traffic
 		remoteSniffer.GetStartState().Doc("2-1-0").
-			Receive(NA((*RegisterForeignDevice)(nil)), NoKWArgs).Doc("2-1-1").
-			Receive(NA((*Result)(nil)), NoKWArgs).Doc("2-1-1").
-			Receive(NA((*RegisterForeignDevice)(nil)), NoKWArgs).Doc("2-1-3").
-			Receive(NA((*Result)(nil)), NoKWArgs).Doc("2-1-4").
+			Receive(NA((*RegisterForeignDevice)(nil)), NoKWArgs()).Doc("2-1-1").
+			Receive(NA((*Result)(nil)), NoKWArgs()).Doc("2-1-1").
+			Receive(NA((*RegisterForeignDevice)(nil)), NoKWArgs()).Doc("2-1-3").
+			Receive(NA((*Result)(nil)), NoKWArgs()).Doc("2-1-4").
 			Success("")
 
 		//  run the group
@@ -240,14 +237,14 @@ func TestForeign(t *testing.T) {
 		tnet.fd.GetStartState().Doc("3-1-0").
 			Call(func(args Args, _ KWArgs) error {
 				return tnet.fd.bip.Register(args[0].(*Address), args[1].(uint16))
-			}, NA(tnet.bbmd.address, 60), NoKWArgs).Doc("3-1-1").
+			}, NA(tnet.bbmd.address, uint16(60)), NoKWArgs()).Doc("3-1-1").
 			WaitEvent("3-registered", nil).Doc("3-1-2").
 			Send(pdu, nil).Doc("3-1-3").
 			Success("")
 
 		// the bbmd is happy when it gets the pdu
 		tnet.bbmd.GetStartState().
-			Receive(NA((PDU)(nil)), NKW(KWCPCISource, tnet.fd.address, KWCPCIData, pduData)).
+			Receive(NA((PDU)(nil)), NKW(KWCPCISource, tnet.fd.address, KWTestPDUData, pduData)).
 			Success("")
 
 		// remote sniffer node
@@ -257,10 +254,10 @@ func TestForeign(t *testing.T) {
 
 		// sniffer traffic
 		remoteSniffer.GetStartState().Doc("3-2-0").
-			Receive(NA((*RegisterForeignDevice)(nil)), NoKWArgs).Doc("3-2-1").
-			Receive(NA((*Result)(nil)), NoKWArgs).Doc("3-2-2").
+			Receive(NA((*RegisterForeignDevice)(nil)), NoKWArgs()).Doc("3-2-1").
+			Receive(NA((*Result)(nil)), NoKWArgs()).Doc("3-2-2").
 			SetEvent("3-registered").Doc("3-2-3").
-			Receive(NA((*OriginalUnicastNPDU)(nil)), NoKWArgs).Doc("3-2-4").
+			Receive(NA((*OriginalUnicastNPDU)(nil)), NoKWArgs()).Doc("3-2-4").
 			Success("")
 
 		// run the group
@@ -283,14 +280,14 @@ func TestForeign(t *testing.T) {
 		tnet.fd.GetStartState().Doc("4-1-0").
 			Call(func(args Args, _ KWArgs) error {
 				return tnet.fd.bip.Register(args[0].(*Address), args[1].(uint16))
-			}, NA(tnet.bbmd.address, 60), NoKWArgs).Doc("4-1-1").
+			}, NA(tnet.bbmd.address, 60), NoKWArgs()).Doc("4-1-1").
 			WaitEvent("4-registered", nil).Doc("4-1-2").
 			Send(pdu, nil).Doc("4-1-3").
 			Success("")
 
 		// the bbmd is happy when it gets the pdu
 		tnet.bbmd.GetStartState().
-			Receive(NA((PDU)(nil)), NKW(KWCPCISource, tnet.fd.address, KWCPCIData, pduData)).Doc("4-2-1").
+			Receive(NA((PDU)(nil)), NKW(KWCPCISource, tnet.fd.address, KWTestPDUData, pduData)).Doc("4-2-1").
 			Success("")
 
 		// home simple node
@@ -299,7 +296,7 @@ func TestForeign(t *testing.T) {
 
 		// home node happy when getting the pdu, broadcast by the bbmd
 		homeNode.GetStartState().Doc("4-3-0").
-			Receive(NA((PDU)(nil)), NKW(KWCPCISource, tnet.fd.address, KWCPCIData, pduData)).Doc("4-3-1").
+			Receive(NA((PDU)(nil)), NKW(KWCPCISource, tnet.fd.address, KWTestPDUData, pduData)).Doc("4-3-1").
 			Success("")
 
 		// remote sniffer node
@@ -309,10 +306,10 @@ func TestForeign(t *testing.T) {
 
 		// sniffer traffic
 		remoteSniffer.GetStartState().Doc("4-4-0").
-			Receive(NA((*RegisterForeignDevice)(nil)), NoKWArgs).Doc("4-4-1").
-			Receive(NA((*Result)(nil)), NoKWArgs).Doc("4-4-2").
+			Receive(NA((*RegisterForeignDevice)(nil)), NoKWArgs()).Doc("4-4-1").
+			Receive(NA((*Result)(nil)), NoKWArgs()).Doc("4-4-2").
 			SetEvent("4-registered").
-			Receive(NA((*DistributeBroadcastToNetwork)(nil)), NoKWArgs).Doc("4-4-3").
+			Receive(NA((*DistributeBroadcastToNetwork)(nil)), NoKWArgs()).Doc("4-4-3").
 			Success("")
 
 		// run the group
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_simple_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_simple_test.go
index 98c0a95cac..04f17ba7ed 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_simple_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_bvll/test_simple_test.go
@@ -99,7 +99,7 @@ func (t *TNetwork) Run(timeLimit time.Duration) {
 	for _, machine := range t.StateMachineGroup.GetStateMachines() {
 		t.log.Debug().Stringer("machine", machine).Msg("Machine:")
 		for _, s := range machine.GetTransactionLog() {
-			t.log.Debug().Str("logEntry", s).Msg("logEntry")
+			t.log.Debug().Stringer("logEntry", s).Msg("logEntry")
 		}
 	}
 
@@ -110,7 +110,6 @@ func (t *TNetwork) Run(timeLimit time.Duration) {
 }
 
 func TestSimple(t *testing.T) {
-	t.Skip("currently broken")              // TODO: fixme
 	t.Run("test_idle", func(t *testing.T) { //Test an idle network, nothing happens is success.
 		ExclusiveGlobalTimeMachine(t)
 		tnet := NewTNetwork(t)
@@ -143,7 +142,7 @@ func TestSimple(t *testing.T) {
 		tnet.sniffer.GetStartState().Receive(NA((PDU)(nil)), NKW(
 			KWCPCISource, tnet.td.address.AddrTuple,
 			KWCPCIDestination, tnet.iut.address.AddrTuple,
-			KWCPCIData, pduData,
+			KWTestPDUData, pduData,
 		)).Timeout(1.0*time.Millisecond, nil).Success("")
 
 		// run the group
@@ -156,11 +155,11 @@ func TestSimple(t *testing.T) {
 		//make a PDU from node 1 to node 2
 		pduData, err := Xtob("dead.beef")
 		require.NoError(t, err)
-		pdu := NewPDU(NA(pduData), NKW(KWCPCISource, tnet.td.address, KWCPCIDestination, tnet.iut.address))
+		pdu := NewPDU(NA(pduData), NKW(KWCPCISource, tnet.td.address, KWCPCIDestination, NewLocalBroadcast(nil)))
 		t.Logf("pdu: %v", pdu)
 
 		// test device sends it, iut gets it
-		tnet.td.GetStartState().Send(NewPDU(NoArgs, NKW(KWCompRootMessage, pdu, KWCPCISource, tnet.td.address, KWCPCIDestination, NewLocalBroadcast(nil))), nil).Success("")
+		tnet.td.GetStartState().Send(pdu, nil).Success("")
 		tnet.iut.GetStartState().Receive(NA((PDU)(nil)), NKW(
 			KWCPCISource, tnet.td.address,
 		)).Success("")
@@ -169,7 +168,7 @@ func TestSimple(t *testing.T) {
 		tnet.sniffer.GetStartState().Receive(NA((*OriginalBroadcastNPDU)(nil)), NKW(
 			KWCPCISource, tnet.td.address.AddrTuple,
 			//bacgopes.KWCPCIDestination, tnet.iut.address.AddrTuple,
-			KWCPCIData, pduData,
+			KWTestPDUData, pduData,
 		)).Timeout(1.0*time.Second, nil).Success("")
 
 		// run the group
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_comm/test_capability_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_comm/test_capability_test.go
index 937f5b43bc..1e42771a52 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_comm/test_capability_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_comm/test_capability_test.go
@@ -47,7 +47,7 @@ func NewBaseCollector(localLog zerolog.Logger, subs ...CollectorOrCapability) (*
 
 func (b *BaseCollector) Transform(value any) any {
 	for fn := range b.CapabilityFunctions("transform") {
-		value = fn(NA(b, value), NoKWArgs)
+		value = fn(NA(b, value), NoKWArgs())
 	}
 	return value
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_constructed_data/test_sequence_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_constructed_data/test_sequence_test.go
index ef30dd9349..61b3173b3e 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_constructed_data/test_sequence_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_constructed_data/test_sequence_test.go
@@ -30,7 +30,7 @@ import (
 
 func TestEmptySequence(t *testing.T) {
 	t.Run("test_empty_sequence", func(t *testing.T) {
-		seq, err := NewEmptySequence(NoKWArgs)
+		seq, err := NewEmptySequence(NoKWArgs())
 		require.NoError(t, err)
 		t.Logf("%#v", seq)
 
@@ -41,7 +41,7 @@ func TestEmptySequence(t *testing.T) {
 		t.Logf("%v", tagList)
 
 		// create another sequence and decode the tag list
-		seq, err = NewEmptySequence(NoKWArgs)
+		seq, err = NewEmptySequence(NoKWArgs())
 		require.NoError(t, err)
 		err = seq.Decode(tagList)
 		require.NoError(t, err)
@@ -57,7 +57,7 @@ func TestEmptySequence(t *testing.T) {
 func TestSimpleSequence(t *testing.T) {
 	t.Run("test_missing_element", func(t *testing.T) {
 		// create a sequence with a missing required element
-		seq, err := NewSimpleSequence(NoKWArgs)
+		seq, err := NewSimpleSequence(NoKWArgs())
 		require.NoError(t, err)
 
 		// encode it in a tag list
@@ -85,7 +85,7 @@ func TestSimpleSequence(t *testing.T) {
 		err = seq.Encode(tagList)
 
 		// create another sequence and decode the taglist
-		seq, err = NewSimpleSequence(NoKWArgs)
+		seq, err = NewSimpleSequence(NoKWArgs())
 		require.NoError(t, err)
 		err = seq.Decode(tagList)
 		require.NoError(t, err)
@@ -95,7 +95,7 @@ func TestSimpleSequence(t *testing.T) {
 func TestCompoundSequence1(t *testing.T) {
 	t.Run("test_missing_element", func(t *testing.T) {
 		// create a sequence with a missing required element
-		seq, err := NewCompoundSequence1(NoKWArgs)
+		seq, err := NewCompoundSequence1(NoKWArgs())
 		require.NoError(t, err)
 
 		// encode it in a tag list
@@ -132,7 +132,7 @@ func TestCompoundSequence1(t *testing.T) {
 		err = seq.Encode(tagList)
 
 		// create another sequence and decode the taglist
-		seq, err = NewCompoundSequence1(NoKWArgs)
+		seq, err = NewCompoundSequence1(NoKWArgs())
 		require.NoError(t, err)
 		err = seq.Decode(tagList)
 		require.NoError(t, err)
@@ -142,7 +142,7 @@ func TestCompoundSequence1(t *testing.T) {
 func TestCompoundSequence2(t *testing.T) {
 	t.Run("test_missing_element", func(t *testing.T) {
 		// create a sequence with a missing required element
-		seq, err := NewCompoundSequence2(NoKWArgs)
+		seq, err := NewCompoundSequence2(NoKWArgs())
 		require.NoError(t, err)
 
 		// encode it in a tag list
@@ -169,7 +169,7 @@ func TestCompoundSequence2(t *testing.T) {
 		err = seq.Encode(tagList)
 
 		// create another sequence and decode the taglist
-		seq, err = NewCompoundSequence2(NoKWArgs)
+		seq, err = NewCompoundSequence2(NoKWArgs())
 		require.NoError(t, err)
 		err = seq.Decode(tagList)
 		require.NoError(t, err)
@@ -184,7 +184,7 @@ func TestCompoundSequence2(t *testing.T) {
 		err = seq.Encode(tagList)
 
 		// create another sequence and decode the taglist
-		seq, err = NewCompoundSequence2(NoKWArgs)
+		seq, err = NewCompoundSequence2(NoKWArgs())
 		require.NoError(t, err)
 		err = seq.Decode(tagList)
 		require.NoError(t, err)
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_network/helpers.go b/plc4go/internal/bacnetip/bacgopes/tests/test_network/helpers.go
index f2a1ad51ae..c80b75f977 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_network/helpers.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_network/helpers.go
@@ -106,7 +106,7 @@ func (n *NPDUCodec) Indication(args Args, kwArgs KWArgs) error {
 	n.log.Debug().Stringer("ypdu", ypdu).Msg("encoded")
 
 	// send it downstream
-	return n.Request(NA(ypdu), NoKWArgs)
+	return n.Request(NA(ypdu), NoKWArgs())
 }
 
 func (n *NPDUCodec) Confirmation(args Args, kwArgs KWArgs) error {
@@ -135,7 +135,7 @@ func (n *NPDUCodec) Confirmation(args Args, kwArgs KWArgs) error {
 		return errors.Wrap(err, "error decoding ypdu")
 	}
 
-	return n.Response(NA(ypdu), NoKWArgs)
+	return n.Response(NA(ypdu), NoKWArgs())
 }
 
 type SnifferStateMachine struct {
@@ -436,12 +436,12 @@ func NewApplicationLayerStateMachine(localLog zerolog.Logger, address string, vl
 
 func (a *ApplicationLayerStateMachine) Indication(args Args, kwArgs KWArgs) error {
 	a.log.Debug().Stringer("Args", args).Stringer("KWArgs", kwArgs).Msg("Indication")
-	return a.Receive(args, NoKWArgs)
+	return a.Receive(args, NoKWArgs())
 }
 
 func (a *ApplicationLayerStateMachine) Confirmation(args Args, kwArgs KWArgs) error {
 	a.log.Debug().Stringer("Args", args).Stringer("KWArgs", kwArgs).Msg("Confirmation")
-	return a.Receive(args, NoKWArgs)
+	return a.Receive(args, NoKWArgs())
 }
 
 //go:generate plc4xGenerator -type=ApplicationNode
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_1_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_1_test.go
index f21183727e..689f43a8ab 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_1_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_1_test.go
@@ -129,7 +129,7 @@ func (t *TNetwork1) Run(timeLimit time.Duration) {
 	RunTimeMachine(t.log, timeLimit, time.Time{})
 	t.log.Trace().Msg("time machine finished")
 	for _, machine := range t.StateMachineGroup.GetStateMachines() {
-		t.log.Debug().Stringer("machine", machine).Strs("transactionLog", machine.GetTransactionLog()).Msg("Machine:")
+		t.log.Debug().Stringer("machine", machine).Stringers("transactionLog", ToStringers(machine.GetTransactionLog())).Msg("Machine:")
 	}
 
 	// check for success
@@ -175,14 +175,14 @@ func TestNet1(t *testing.T) {
 			// sniffer on network 1 sees the request and the response
 			tnet.sniffer1.GetStartState().Doc("1-2-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.80"+ //version, network layer
 							"00", //message type, no network
 					),
 					),
 				).Doc("1-2-1").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.80"+ //version, network layer
 							"01 0002 0003", //message type and network list
 					),
@@ -248,7 +248,7 @@ func TestNet1(t *testing.T) {
 			// sniffer on network 1 sees the request and the response
 			tnet.sniffer1.GetStartState().Doc("3-2-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.80"+ //version, network layer
 							"00 0004", //message type, and network
 					)),
@@ -258,7 +258,7 @@ func TestNet1(t *testing.T) {
 			// sniffer on network 2 sees request forwarded by router
 			tnet.sniffer2.GetStartState().Doc("3-3-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.88"+ //version, network layer
 							"0001 01 01"+ // snet/slen/sadr
 							"00 0004", //message type, and network
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_2_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_2_test.go
index b3d2625d61..f857b25cc3 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_2_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_2_test.go
@@ -138,7 +138,7 @@ func (t *TNetwork2) Run(timeLimit time.Duration) {
 	RunTimeMachine(t.log, timeLimit, time.Time{})
 	t.log.Trace().Msg("time machine finished")
 	for _, machine := range t.StateMachineGroup.GetStateMachines() {
-		t.log.Debug().Stringer("machine", machine).Strs("transactionLog", machine.GetTransactionLog()).Msg("Machine:")
+		t.log.Debug().Stringer("machine", machine).Stringers("transactionLog", ToStringers(machine.GetTransactionLog())).Msg("Machine:")
 	}
 
 	// check for success
@@ -184,13 +184,13 @@ func TestNet2(t *testing.T) {
 			// sniffer on network 1 sees the request and the response
 			tnet.sniffer1.GetStartState().Doc("1-2-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.80"+ //version, network layer
 							"00", //message type, no network
 					)),
 				).Doc("1-2-1").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.80"+ //version, network layer
 							"01 0002", //message type and network list
 					)),
@@ -258,7 +258,7 @@ func TestNet2(t *testing.T) {
 			// sniffer on network 1 sees the request and the response
 			tnet.sniffer1.GetStartState().Doc("3-2-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.80"+ //version, network layer
 							"00 0004", //message type, and network
 					)),
@@ -268,7 +268,7 @@ func TestNet2(t *testing.T) {
 			// sniffer on network 2 sees request forwarded by router
 			tnet.sniffer2.GetStartState().Doc("3-3-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.88"+ //version, network layer
 							"0001 01 01"+ // snet/slen/sadr
 							"00 0004", //message type, and network
@@ -278,7 +278,7 @@ func TestNet2(t *testing.T) {
 
 			tnet.sniffer3.GetStartState().Doc("3-4-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.88"+ //version, network layer
 							"0001 01 01"+ // snet/slen/sadr
 							"00 0004", //message type, and network
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_3_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_3_test.go
index d430180602..f48eb3c705 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_3_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_network/test_net_3_test.go
@@ -20,7 +20,6 @@
 package test_network
 
 import (
-	"strings"
 	"testing"
 	"time"
 
@@ -121,8 +120,7 @@ func (t *TNetwork3) Run(timeLimit time.Duration) {
 	RunTimeMachine(t.log, timeLimit, time.Time{})
 	t.log.Trace().Msg("time machine finished")
 	for _, machine := range t.StateMachineGroup.GetStateMachines() {
-		transactionLog := "transactions:\n" + strings.Join(machine.GetTransactionLog(), "\n")
-		t.log.Debug().Stringer("machine", machine).Str("transactionLog", transactionLog).Msg("Machine:")
+		t.log.Debug().Stringer("machine", machine).Stringers("transactionLog", ToStringers(machine.GetTransactionLog())).Msg("Machine:")
 	}
 
 	// check for success
@@ -167,7 +165,7 @@ func TestNet3(t *testing.T) {
 			// sniffer on network 1 sees the request and the response
 			tnet.sniffer1.GetStartState().Doc("1-2-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.00"+ //version, network layer
 							"10 08", // unconfirmed Who-Is
 					),
@@ -201,23 +199,23 @@ func TestNet3(t *testing.T) {
 			// sniffer on network 1 sees the request and the response
 			tnet.sniffer1.GetStartState().Doc("2-2-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.80.00.00.02", // who is router to network
 					)),
 				).Doc("2-2-1").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.80.01.00.02", // I am router to network
 					)),
 				).Doc("2-2-1").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.20.00.02.00.ff"+ // remote broadcast goes out
 							"10.08",
 					)),
 				).Doc("2-2-1").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.08.00.02.01.04"+ // unicast response
 							"10.00.c4.02.00.00.04.22.04.00.91.00.22.03.e7",
 					)),
@@ -228,13 +226,13 @@ func TestNet3(t *testing.T) {
 			// network 2 sees local broadcast request and unicast response
 			tnet.sniffer2.GetStartState().Doc("2-3-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.08.00.01.01.01"+ // local broadcast
 							"10.08",
 					)),
 				).Doc("2-3-1").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.20.00.01.01.01.ff"+ // unicast response
 							"10.00.c4.02.00.00.04.22.04.00.91.00.22.03.e7",
 					)),
@@ -264,7 +262,7 @@ func TestNet3(t *testing.T) {
 			// sniffer on network 1 sees the request and the response
 			tnet.sniffer1.GetStartState().Doc("3-2-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.80.00.00.03", // who is router to network
 					)),
 				).Doc("3-2-1").
@@ -274,7 +272,7 @@ func TestNet3(t *testing.T) {
 			// network 2 sees local broadcast looking for network 3
 			tnet.sniffer2.GetStartState().
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.88.00.01.01.01.00.00.03",
 					)),
 				).Doc("3-3-1").
@@ -298,19 +296,19 @@ func TestNet3(t *testing.T) {
 			whois.SetPDUDestination(NewGlobalBroadcast(nil)) // TODO: upstream does this inline
 			tnet.td.GetStartState().Doc("4-1-0").
 				Send(whois, nil).Doc("4-1-1").
-				Receive(NA((*IAmRequest)(nil)), NoKWArgs).Doc("4-1-2").
+				Receive(NA((*IAmRequest)(nil)), NoKWArgs()).Doc("4-1-2").
 				Success("")
 
 			// sniffer on network 1 sees the request and the response
 			tnet.sniffer1.GetStartState().Doc("3-2-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.20.ff.ff.00.ff"+
 							"10.08",
 					)),
 				).Doc("4-2-1").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.08.00.02.01.04"+
 							"10.00.c4.02.00.00.04.22.04.00.91.00.22.03.e7",
 					)),
@@ -321,13 +319,13 @@ func TestNet3(t *testing.T) {
 			// network 2 sees local broadcast v
 			tnet.sniffer2.GetStartState().Doc("4-3-0").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.28.ff.ff.00.00.01.01.01.fe"+
 							"10.08",
 					)),
 				).Doc("4-3-1").
 				Receive(NA(PDUMatcher),
-					NKW(KWCPCIData, xtob(
+					NKW(KWTestPDUData, xtob(
 						"01.20.00.01.01.01.ff"+
 							"10.00.c4.02.00.00.04.22.04.00.91.00.22.03.e7",
 					)),
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_npdu/helpers.go b/plc4go/internal/bacnetip/bacgopes/tests/test_npdu/helpers.go
index 6f080a7952..6f00aeffc8 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_npdu/helpers.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_npdu/helpers.go
@@ -75,7 +75,7 @@ func (n *NPDUCodec) Indication(args Args, kwArgs KWArgs) error {
 	n.log.Debug().Stringer("ypdu", ypdu).Msg("encoded")
 
 	// send it downstream
-	return n.Request(NA(ypdu), NoKWArgs)
+	return n.Request(NA(ypdu), NoKWArgs())
 }
 
 func (n *NPDUCodec) Confirmation(args Args, kwArgs KWArgs) error {
@@ -104,5 +104,5 @@ func (n *NPDUCodec) Confirmation(args Args, kwArgs KWArgs) error {
 		return errors.Wrap(err, "error decoding ypdu")
 	}
 
-	return n.Response(NA(ypdu), NoKWArgs)
+	return n.Response(NA(ypdu), NoKWArgs())
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_npdu/test_codec_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_npdu/test_codec_test.go
index cde8654bbc..2d5073ac9c 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_npdu/test_codec_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_npdu/test_codec_test.go
@@ -30,6 +30,7 @@ import (
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/debugging"
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/npdu"
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/pdu"
+	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/tests"
 	"github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/tests/quick"
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/tests/state_machine"
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes"
@@ -112,12 +113,12 @@ func (suite *TestNPDUCodecSuite) TestWhoIsRouterToNetwork() { // Test the Result
 		}
 	}
 
-	err = suite.Request(NA(quick.WhoIsRouterToNetwork(1)), NoKWArgs)
+	err = suite.Request(NA(quick.WhoIsRouterToNetwork(1)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&WhoIsRouterToNetwork{}), NKW(KWWirtnNetwork, uint16(1)))
 }
@@ -138,12 +139,12 @@ func (suite *TestNPDUCodecSuite) TestIAMRouterToNetworkEmpty() { // Test the Res
 		}
 	}
 
-	err = suite.Request(NA(quick.IAmRouterToNetwork(networkList...)), NoKWArgs)
+	err = suite.Request(NA(quick.IAmRouterToNetwork(networkList...)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&IAmRouterToNetwork{}), NKW(KWIartnNetworkList, networkList))
 }
@@ -164,12 +165,12 @@ func (suite *TestNPDUCodecSuite) TestIAMRouterToNetworks() { // Test the Result
 		}
 	}
 
-	err = suite.Request(NA(quick.IAmRouterToNetwork(networkList...)), NoKWArgs)
+	err = suite.Request(NA(quick.IAmRouterToNetwork(networkList...)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&IAmRouterToNetwork{}), NKW(KWIartnNetworkList, networkList))
 }
@@ -189,12 +190,12 @@ func (suite *TestNPDUCodecSuite) TestICouldBeRouterToNetworks() { // Test the Re
 		}
 	}
 
-	err = suite.Request(NA(quick.ICouldBeRouterToNetwork(1, 2)), NoKWArgs)
+	err = suite.Request(NA(quick.ICouldBeRouterToNetwork(1, 2)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&ICouldBeRouterToNetwork{}), NKW(KWIcbrtnNetwork, uint16(1), KWIcbrtnPerformanceIndex, uint8(2)))
 }
@@ -214,12 +215,12 @@ func (suite *TestNPDUCodecSuite) TestRejectMessageToNetwork() { // Test the Resu
 		}
 	}
 
-	err = suite.Request(NA(quick.RejectMessageToNetwork(1, 2)), NoKWArgs)
+	err = suite.Request(NA(quick.RejectMessageToNetwork(1, 2)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&RejectMessageToNetwork{}), NKW(KWRmtnRejectionReason, readWriteModel.NLMRejectMessageToNetworkRejectReason(1), KWRmtnDNET, uint16(2)))
 }
@@ -240,12 +241,12 @@ func (suite *TestNPDUCodecSuite) TestRouterBusyToNetworkEmpty() { // Test the Re
 		}
 	}
 
-	err = suite.Request(NA(quick.RouterBusyToNetwork(networkList...)), NoKWArgs)
+	err = suite.Request(NA(quick.RouterBusyToNetwork(networkList...)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&RouterBusyToNetwork{}), NKW(KWRbtnNetworkList, networkList))
 }
@@ -266,12 +267,12 @@ func (suite *TestNPDUCodecSuite) TestRouterBusyToNetworkNetworks() { // Test the
 		}
 	}
 
-	err = suite.Request(NA(quick.RouterBusyToNetwork(networkList...)), NoKWArgs)
+	err = suite.Request(NA(quick.RouterBusyToNetwork(networkList...)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&RouterBusyToNetwork{}), NKW(KWRbtnNetworkList, networkList))
 }
@@ -292,12 +293,12 @@ func (suite *TestNPDUCodecSuite) TestRouterAvailableToNetworkEmpty() { // Test t
 		}
 	}
 
-	err = suite.Request(NA(quick.RouterAvailableToNetwork(networkList...)), NoKWArgs)
+	err = suite.Request(NA(quick.RouterAvailableToNetwork(networkList...)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&RouterAvailableToNetwork{}), NKW(KWRatnNetworkList, networkList))
 }
@@ -318,12 +319,12 @@ func (suite *TestNPDUCodecSuite) TestRouterAvailableToNetworkNetworks() { // Tes
 		}
 	}
 
-	err = suite.Request(NA(quick.RouterAvailableToNetwork(networkList...)), NoKWArgs)
+	err = suite.Request(NA(quick.RouterAvailableToNetwork(networkList...)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&RouterAvailableToNetwork{}), NKW(KWRatnNetworkList, networkList))
 }
@@ -343,12 +344,12 @@ func (suite *TestNPDUCodecSuite) TestInitializeRoutingTableEmpty() { // Test the
 		}
 	}
 
-	err = suite.Request(NA(quick.InitializeRoutingTable()), NoKWArgs)
+	err = suite.Request(NA(quick.InitializeRoutingTable()), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&InitializeRoutingTable{}), NKW(KWIrtTable, []*RoutingTableEntry{}))
 }
@@ -375,12 +376,12 @@ func (suite *TestNPDUCodecSuite) TestInitializeRoutingTable01() { // Test the Re
 		}
 	}
 
-	err = suite.Request(NA(quick.InitializeRoutingTable(rtEntries...)), NoKWArgs)
+	err = suite.Request(NA(quick.InitializeRoutingTable(rtEntries...)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&InitializeRoutingTable{}), NKW(KWIrtTable, rtEntries))
 }
@@ -407,12 +408,12 @@ func (suite *TestNPDUCodecSuite) TestInitializeRoutingTable02() { // Test the Re
 		}
 	}
 
-	err = suite.Request(NA(quick.InitializeRoutingTable(rtEntries...)), NoKWArgs)
+	err = suite.Request(NA(quick.InitializeRoutingTable(rtEntries...)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&InitializeRoutingTable{}), NKW(KWIrtTable, rtEntries))
 }
@@ -439,12 +440,12 @@ func (suite *TestNPDUCodecSuite) TestInitializeRoutingTableAck01() { // Test the
 		}
 	}
 
-	err = suite.Request(NA(quick.InitializeRoutingTableAck(rtEntries...)), NoKWArgs)
+	err = suite.Request(NA(quick.InitializeRoutingTableAck(rtEntries...)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&InitializeRoutingTableAck{}), NKW(KWIrtaTable, rtEntries))
 }
@@ -471,12 +472,12 @@ func (suite *TestNPDUCodecSuite) TestInitializeRoutingTableAck02() { // Test the
 		}
 	}
 
-	err = suite.Request(NA(quick.InitializeRoutingTableAck(rtEntries...)), NoKWArgs)
+	err = suite.Request(NA(quick.InitializeRoutingTableAck(rtEntries...)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&InitializeRoutingTableAck{}), NKW(KWIrtaTable, rtEntries))
 }
@@ -496,12 +497,12 @@ func (suite *TestNPDUCodecSuite) TestEstablishConnectionToNetworks() { // Test t
 		}
 	}
 
-	err = suite.Request(NA(quick.EstablishConnectionToNetwork(5, 6)), NoKWArgs)
+	err = suite.Request(NA(quick.EstablishConnectionToNetwork(5, 6)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&EstablishConnectionToNetwork{}), NKW(KWEctnDNET, uint16(5), KWEctnTerminationTime, uint8(6)))
 }
@@ -521,12 +522,12 @@ func (suite *TestNPDUCodecSuite) TestDisconnectConnectionToNetwork() { // Test t
 		}
 	}
 
-	err = suite.Request(NA(quick.DisconnectConnectionToNetwork(7)), NoKWArgs)
+	err = suite.Request(NA(quick.DisconnectConnectionToNetwork(7)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&DisconnectConnectionToNetwork{}), NKW(KWDctnDNET, uint16(7)))
 }
@@ -546,14 +547,14 @@ func (suite *TestNPDUCodecSuite) TestWhatIsNetworkNumber() { // Test the Result
 		}
 	}
 
-	err = suite.Request(NA(quick.WhatIsNetworkNumber(0)), NoKWArgs)
+	err = suite.Request(NA(quick.WhatIsNetworkNumber(0)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Confirmation(NA(&WhatIsNetworkNumber{}), NoKWArgs)
+	err = suite.Confirmation(NA(&WhatIsNetworkNumber{}), NoKWArgs())
 }
 
 func (suite *TestNPDUCodecSuite) TestNetworkNumberIs() { // Test the Result encoding and decoding.
@@ -571,12 +572,12 @@ func (suite *TestNPDUCodecSuite) TestNetworkNumberIs() { // Test the Result enco
 		}
 	}
 
-	err = suite.Request(NA(quick.NetworkNumberIs(8, true)), NoKWArgs)
+	err = suite.Request(NA(quick.NetworkNumberIs(8, true)), NoKWArgs())
 	suite.Assert().NoError(err)
-	err = suite.Indication(NoArgs, NKW(KWCPCIData, pduBytes))
+	err = suite.Indication(NoArgs, NKW(KWTestPDUData, pduBytes))
 	suite.Assert().NoError(err)
 
-	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs)), NoKWArgs)
+	err = suite.Response(NA(NewPDU(NA(pduBytes), NoKWArgs())), NoKWArgs())
 	suite.Assert().NoError(err)
 	err = suite.Confirmation(NA(&NetworkNumberIs{}), NKW(KWNniNet, uint16(8), KWNniFlag, true))
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_primitive_data/test_tag_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_primitive_data/test_tag_test.go
index 3ecd1b7cd2..96b47a8506 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_primitive_data/test_tag_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_primitive_data/test_tag_test.go
@@ -435,12 +435,11 @@ func TestGetContext(t *testing.T) {
 }
 
 func TestEndec0(t *testing.T) { // Test bracketed application tagged integer encoding and decoding.
-	t.Skip("currently broken") // TODO: fixme
 	tagList := quick.TagList()
 
 	data := quick.PDUData()
 	tagList.Encode(data)
-	assert.Equal(t, []byte{}, data.GetPduData())
+	assert.Nil(t, data.GetPduData())
 
 	tagList = quick.TagList()
 	err := tagList.Decode(data)
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_segmentation/test_1_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_segmentation/test_1_test.go
index b07e98d985..cdd66c6aef 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_segmentation/test_1_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_segmentation/test_1_test.go
@@ -132,10 +132,7 @@ func (a *ApplicationNetwork) Run(timeLimit time.Duration) error {
 	if a.log.Debug().Enabled() {
 		a.log.Debug().Msg("time machine finished")
 		for _, machine := range a.GetStateMachines() {
-			a.log.Debug().Stringer("machine", machine).Msg("machine")
-			for _, entry := range machine.GetTransactionLog() {
-				a.log.Debug().Str("entry", entry).Msg("transaction log entry")
-			}
+			a.log.Debug().Stringer("machine", machine).Stringers("entries", ToStringers(machine.GetTransactionLog())).Msg("machine")
 		}
 
 		a.trafficLog.Dump(a._debug)
@@ -339,7 +336,7 @@ func (a *ApplicationStateMachine) Indication(args Args, kwArgs KWArgs) error {
 	a.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Indication")
 
 	// let the state machine know the request was received
-	err := a.Receive(args, NoKWArgs)
+	err := a.Receive(args, NoKWArgs())
 	if err != nil {
 		return errors.Wrap(err, "error receiving indication")
 	}
@@ -436,7 +433,7 @@ func SegmentationTest(t *testing.T, prefix string, cLen, sLen int) {
 			KnownKey("serviceParameters"), requestString,
 			KnownKey("destination"), anet.iut.address,
 		)), nil).Doc(prefix+"-1").
-		Receive(NA((*apdu.ConfirmedPrivateTransferRequest)(nil)), NoKWArgs).Doc(prefix + "-2").
+		Receive(NA((*apdu.ConfirmedPrivateTransferRequest)(nil)), NoKWArgs()).Doc(prefix + "-2").
 		Success("")
 
 	// no IUT application layer matching
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_service/helpers.go b/plc4go/internal/bacnetip/bacgopes/tests/test_service/helpers.go
index 394ba25ba4..756cfa0fdb 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_service/helpers.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_service/helpers.go
@@ -144,10 +144,7 @@ func (a *ApplicationNetwork) Run(timeLimit time.Duration) error {
 	if a.log.Debug().Enabled() {
 		a.log.Debug().Msg("time machine finished")
 		for _, machine := range a.GetStateMachines() {
-			a.log.Debug().Stringer("machine", machine).Msg("machine")
-			for _, entry := range machine.GetTransactionLog() {
-				a.log.Debug().Str("entry", entry).Msg("transaction log entry")
-			}
+			a.log.Debug().Stringer("machine", machine).Stringers("entries", ToStringers(machine.GetTransactionLog())).Msg("machine")
 		}
 
 		a.trafficLog.Dump(a._debug)
@@ -337,7 +334,7 @@ func (s *SnifferStateMachine) Confirmation(args Args, kwArgs KWArgs) error {
 	// TODO: print etc
 
 	// pass to the state machine
-	return s.Receive(args, NoKWArgs)
+	return s.Receive(args, NoKWArgs())
 }
 
 //go:generate plc4xGenerator -type=ApplicationStateMachine
@@ -440,14 +437,14 @@ func (a *ApplicationStateMachine) Send(args Args, kwArgs KWArgs) error {
 	if err != nil {
 		return errors.Wrap(err, "error creating iocb")
 	}
-	return a.Request(NA(iocb), NoKWArgs)
+	return a.Request(NA(iocb), NoKWArgs())
 }
 
 func (a *ApplicationStateMachine) Indication(args Args, kwArgs KWArgs) error {
 	a.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Indication")
 
 	// let the state machine know the request was received
-	err := a.Receive(args, NoKWArgs)
+	err := a.Receive(args, NoKWArgs())
 	if err != nil {
 		return errors.Wrap(err, "error receiving indication")
 	}
@@ -460,7 +457,7 @@ func (a *ApplicationStateMachine) Confirmation(args Args, kwArgs KWArgs) error {
 	a.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Confirmation")
 
 	// forward the confirmation to the state machine
-	err := a.Receive(args, NoKWArgs)
+	err := a.Receive(args, NoKWArgs())
 	if err != nil {
 		return errors.Wrap(err, "error receiving indication")
 	}
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_client_state_machine_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_client_state_machine_test.go
index a73bf98aea..61964271dc 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_client_state_machine_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_client_state_machine_test.go
@@ -34,7 +34,6 @@ import (
 )
 
 func TestClientStateMachine(t *testing.T) {
-	t.Skip("currently broken") // TODO: fixme
 	testingLogger := testutils.ProduceTestingLogger(t)
 	// create a client state machine, trapped server, and bind them together
 	client, err := NewClientStateMachine(testingLogger)
@@ -63,5 +62,5 @@ func TestClientStateMachine(t *testing.T) {
 
 	// check the transaction log
 	assert.Len(t, client.GetTransactionLog(), 1)
-	assert.Contains(t, client.GetTransactionLog()[0], pdu.String())
+	assert.Equal(t, client.GetTransactionLog()[0].Pdu, pdu)
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_server_state_machine_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_server_state_machine_test.go
index 7eba1acc2e..3f529c25ad 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_server_state_machine_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_server_state_machine_test.go
@@ -34,7 +34,6 @@ import (
 )
 
 func TestServerStateMachine(t *testing.T) {
-	t.Skip("currently broken") // TODO: fixme
 	testingLogger := testutils.ProduceTestingLogger(t)
 	// create a client state machine, trapped server, and bind them together
 	client, err := NewTrappedClient(testingLogger)
@@ -63,5 +62,5 @@ func TestServerStateMachine(t *testing.T) {
 
 	// check the transaction log
 	assert.Len(t, server.GetTransactionLog(), 1)
-	assert.Contains(t, server.GetTransactionLog()[0], pdu.String())
+	assert.Equal(t, server.GetTransactionLog()[0].Pdu, pdu)
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_service_access_point_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_service_access_point_test.go
index a897fdaeb0..e166352f94 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_service_access_point_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_service_access_point_test.go
@@ -54,7 +54,7 @@ func NewEchoAccessPoint(localLog zerolog.Logger, requirements EchoAccessPointReq
 
 func (e *EchoAccessPoint) SapIndication(args Args, kwArgs KWArgs) error {
 	e.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("SapIndication")
-	return e.requirements.SapResponse(args, NoKWArgs)
+	return e.requirements.SapResponse(args, NoKWArgs())
 }
 
 func (e *EchoAccessPoint) SapConfirmation(args Args, kwArgs KWArgs) error {
@@ -120,7 +120,7 @@ func NewEchoServiceElement(localLog zerolog.Logger, requirements EchoServiceElem
 
 func (e *EchoServiceElement) Indication(args Args, kwArgs KWArgs) error {
 	e.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Indication")
-	return e.requirements.Response(args, NoKWArgs)
+	return e.requirements.Response(args, NoKWArgs())
 }
 
 func (e *EchoServiceElement) Confirmation(args Args, kwArgs KWArgs) error {
@@ -199,7 +199,7 @@ func (suite *TestApplicationSuite) TestSapRequest() {
 	pdu := NewPDU(Nothing())
 
 	// service access point is going to request something
-	err := suite.sap.SapRequest(NA(pdu), NoKWArgs)
+	err := suite.sap.SapRequest(NA(pdu), NoKWArgs())
 	suite.Assert().NoError(err)
 
 	// make sure the request was sent and received
@@ -216,7 +216,7 @@ func (suite *TestApplicationSuite) TestAseRequest() {
 	pdu := NewPDU(Nothing())
 
 	// service access point is going to request something
-	err := suite.ase.Request(NA(pdu), NoKWArgs)
+	err := suite.ase.Request(NA(pdu), NoKWArgs())
 	suite.Assert().NoError(err)
 
 	// make sure the request was sent and received
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_state_machine_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_state_machine_test.go
index 3b60254031..70a86da05f 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_state_machine_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_state_machine_test.go
@@ -241,7 +241,6 @@ func TestMatchPdu(t *testing.T) {
 }
 
 func TestState(t *testing.T) {
-	t.Skip("currently broken") // TODO: fixme
 	t.Run("test_state_doc", func(t *testing.T) {
 		testingLogger := testutils.ProduceTestingLogger(t)
 
@@ -285,7 +284,7 @@ func TestState(t *testing.T) {
 }
 
 func TestStateMachine(t *testing.T) {
-	t.Skip("currently broken") // TODO: fixme
+	t.Skip("Something is competely broken") // TODO: fixme
 	t.Run("test_state_machine_run", func(t *testing.T) {
 		testingLogger := testutils.ProduceTestingLogger(t)
 
@@ -360,7 +359,7 @@ func TestStateMachine(t *testing.T) {
 
 		// check the transaction log
 		require.Equal(t, 1, len(tsm.GetTransactionLog()))
-		assert.Contains(t, tsm.GetTransactionLog()[0], "PDU")
+		assert.Equal(t, tsm.GetTransactionLog()[0].Pdu, pdu)
 	})
 	t.Run("test_state_machine_receive", func(t *testing.T) {
 		testingLogger := testutils.ProduceTestingLogger(t)
@@ -372,7 +371,7 @@ func TestStateMachine(t *testing.T) {
 		pdu := TPDU{}
 
 		// make a send transition from start to success, run the machine
-		tsm.GetStartState().Receive(NA(pdu), NoKWArgs).Success("")
+		tsm.GetStartState().Receive(NA(pdu), NoKWArgs()).Success("")
 		err := tsm.Run()
 		assert.NoError(t, err)
 
@@ -380,7 +379,7 @@ func TestStateMachine(t *testing.T) {
 		assert.True(t, tsm.IsRunning())
 
 		// tell the machine it is receiving the pdu
-		err = tsm.Receive(NA(pdu), NoKWArgs)
+		err = tsm.Receive(NA(pdu), NoKWArgs())
 		require.NoError(t, err)
 
 		// check for success
@@ -393,7 +392,7 @@ func TestStateMachine(t *testing.T) {
 
 		// check the transaction log
 		require.Equal(t, 1, len(tsm.GetTransactionLog()))
-		assert.Contains(t, tsm.GetTransactionLog()[0], pdu.String())
+		assert.Contains(t, tsm.GetTransactionLog()[0].Pdu, pdu)
 	})
 	t.Run("test_state_machine_unexpected", func(t *testing.T) {
 		testingLogger := testutils.ProduceTestingLogger(t)
@@ -415,7 +414,7 @@ func TestStateMachine(t *testing.T) {
 		assert.True(t, tsm.IsRunning())
 
 		// give the machine a bad pdu
-		err = tsm.Receive(NA(badPdu), NoKWArgs)
+		err = tsm.Receive(NA(badPdu), NoKWArgs())
 		require.NoError(t, err)
 
 		// check for fail
@@ -428,7 +427,7 @@ func TestStateMachine(t *testing.T) {
 
 		// check the transaction log
 		require.Equal(t, 1, len(tsm.GetTransactionLog()))
-		assert.Contains(t, tsm.GetTransactionLog()[0], badPdu.String())
+		assert.Equal(t, tsm.GetTransactionLog()[0].Pdu, badPdu)
 	})
 	t.Run("test_state_machine_call", func(t *testing.T) {
 		testingLogger := testutils.ProduceTestingLogger(t)
@@ -444,7 +443,7 @@ func TestStateMachine(t *testing.T) {
 		tsm := NewTrappedStateMachine(testingLogger)
 
 		// make a send transition from start to success, run the machine
-		tsm.GetStartState().Call(_called, NA(true), NoKWArgs).Success("")
+		tsm.GetStartState().Call(_called, NA(true), NoKWArgs()).Success("")
 		err := tsm.Run()
 		assert.NoError(t, err)
 
@@ -469,7 +468,7 @@ func TestStateMachine(t *testing.T) {
 		tsm := NewTrappedStateMachine(testingLogger)
 
 		// make a send transition from start to success, run the machine
-		tsm.GetStartState().Call(_called, NA(true), NoKWArgs)
+		tsm.GetStartState().Call(_called, NA(true), NoKWArgs())
 		err := tsm.Run()
 		assert.NoError(t, err)
 
@@ -507,7 +506,7 @@ func TestStateMachine(t *testing.T) {
 		assert.Same(t, s1, tsm.GetCurrentState())
 
 		// give the machine the second pdu
-		err = tsm.Receive(NA(secondPdu), NoKWArgs)
+		err = tsm.Receive(NA(secondPdu), NoKWArgs())
 		require.NoError(t, err)
 
 		// check for success
@@ -523,8 +522,8 @@ func TestStateMachine(t *testing.T) {
 		t.Log("callbacks passed")
 
 		// check the transaction log
-		assert.Contains(t, tsm.GetTransactionLog()[0], firstPdu.String())
-		assert.Contains(t, tsm.GetTransactionLog()[1], secondPdu.String())
+		assert.Equal(t, tsm.GetTransactionLog()[0].Pdu, firstPdu)
+		assert.Equal(t, tsm.GetTransactionLog()[1].Pdu, secondPdu)
 	})
 	t.Run("test_state_machine_loop_02", func(t *testing.T) {
 		testingLogger := testutils.ProduceTestingLogger(t)
@@ -552,7 +551,7 @@ func TestStateMachine(t *testing.T) {
 		assert.True(t, tsm.IsRunning())
 
 		// give the machine the first pdu
-		err = tsm.Receive(NA(firstPdu), NoKWArgs)
+		err = tsm.Receive(NA(firstPdu), NoKWArgs())
 		require.NoError(t, err)
 
 		// check for success
@@ -568,8 +567,8 @@ func TestStateMachine(t *testing.T) {
 		t.Log("callbacks passed")
 
 		// check the transaction log
-		assert.Contains(t, tsm.GetTransactionLog()[0], firstPdu.String())
-		assert.Contains(t, tsm.GetTransactionLog()[1], secondPdu.String())
+		assert.Contains(t, tsm.GetTransactionLog()[0].Pdu, firstPdu)
+		assert.Contains(t, tsm.GetTransactionLog()[1].Pdu, secondPdu)
 	})
 }
 
@@ -635,8 +634,8 @@ func TestStateMachineTimeout2(t *testing.T) {
 
 	// check the transaction log
 	assert.Len(t, tsm.GetTransactionLog(), 2)
-	assert.Contains(t, tsm.GetTransactionLog()[0], firstPdu.String())
-	assert.Contains(t, tsm.GetTransactionLog()[1], secondPdu.String())
+	assert.Equal(t, tsm.GetTransactionLog()[0].Pdu, firstPdu)
+	assert.Equal(t, tsm.GetTransactionLog()[1].Pdu, secondPdu)
 }
 
 func TestStateMachineGroup(t *testing.T) {
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_time_machine_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_time_machine_test.go
index 3779789864..51efd8f1ce 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_time_machine_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_utilities/test_time_machine_test.go
@@ -171,7 +171,7 @@ func (suite *TimeMachineSuite) TestOneShotImmediate2() {
 
 func (suite *TimeMachineSuite) TestFunctionTaskImmediate() {
 	// create a function task
-	ft := FunctionTask(suite.SampleTaskFunction(), NoArgs, NoKWArgs)
+	ft := FunctionTask(suite.SampleTaskFunction(), NoArgs, NoKWArgs())
 	suite.sampleTaskFunctionCalled = nil
 
 	// reset the time machine to midnight, install the task, let it run
@@ -189,7 +189,7 @@ func (suite *TimeMachineSuite) TestFunctionTaskDelay() {
 	sampleDelay := 10 * time.Second
 
 	// create a function task
-	ft := FunctionTask(suite.SampleTaskFunction(), NoArgs, NoKWArgs)
+	ft := FunctionTask(suite.SampleTaskFunction(), NoArgs, NoKWArgs())
 	suite.sampleTaskFunctionCalled = nil
 
 	// reset the time machine to midnight, install the task, let it run
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/test_vlan/test_network_test.go b/plc4go/internal/bacnetip/bacgopes/tests/test_vlan/test_network_test.go
index d1e7926c14..897850aba8 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/test_vlan/test_network_test.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/test_vlan/test_network_test.go
@@ -329,10 +329,10 @@ func TestVLANEvents(t *testing.T) {
 		// node 2 receives dead_pdu, sets event, waits for beef_pdu
 		tnode2.GetStartState().
 			Receive(NA(NewPDU(Nothing())), NKW(
-				KWCPCIData, []byte{0xde, 0xad},
+				KWTestPDUData, []byte{0xde, 0xad},
 			)).SetEvent("e").
 			Receive(NA(NewPDU(Nothing())), NKW(
-				KWCPCIData, []byte{0xbe, 0xef},
+				KWTestPDUData, []byte{0xbe, 0xef},
 			)).Success("")
 
 		// run the group
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/tests.go b/plc4go/internal/bacnetip/bacgopes/tests/tests.go
index 8f0fa4c92b..8f16364a53 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/tests.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/tests.go
@@ -19,6 +19,6 @@
 
 package tests
 
-import . "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/debugging"
+import . "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/comp"
 
-var _debug = CreateDebugPrinter()
+const KWTestPDUData = KnownKey("pduData")
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/time_machine/time_machine_TimeMachine.go b/plc4go/internal/bacnetip/bacgopes/tests/time_machine/time_machine_TimeMachine.go
index cbef584ac0..2c6f40d62f 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/time_machine/time_machine_TimeMachine.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/time_machine/time_machine_TimeMachine.go
@@ -29,7 +29,6 @@ import (
 
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/core"
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/task"
-	"github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/tests"
 	"github.com/apache/plc4x/plc4go/spi/testutils"
 )
 
@@ -44,9 +43,6 @@ func IsGlobalTimeMachineSet() bool {
 // Usually it is sufficient to use ExclusiveGlobalTimeMachine
 func NewGlobalTimeMachine(t *testing.T) {
 	testingLogger := testutils.ProduceTestingLogger(t)
-	if !tests.LogTimeMachine {
-		testingLogger = zerolog.Nop()
-	}
 	if globalTimeMachine != nil {
 		testingLogger.Warn().Msg("global time machine set, overwriting")
 	}
@@ -305,9 +301,6 @@ func RunTimeMachine(localLog zerolog.Logger, duration time.Duration, stopTime ti
 	if globalTimeMachine == nil {
 		panic("no time machine")
 	}
-	if !tests.LogTimeMachine {
-		localLog = zerolog.Nop()
-	}
 	if _debug != nil {
 		_debug("run_time_machine %r %r", duration, stopTime)
 	}
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes.go b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes.go
index 2ee8b601d9..e301796f95 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes.go
@@ -18,3 +18,7 @@
  */
 
 package trapped_classes
+
+import . "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/debugging"
+
+var _debug = CreateDebugPrinter()
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedApplicationServiceElement.go b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedApplicationServiceElement.go
index 1d81a9e7f5..21018178f2 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedApplicationServiceElement.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedApplicationServiceElement.go
@@ -43,13 +43,13 @@ type TrappedApplicationServiceElementRequirements interface {
 //	To provide these functions, write a ServiceAccessPoint derived class and
 //	stuff it in the inheritance sequence:
 //
-//	    class Snort(ApplicationServiceElement):
-//	        def indication(self, pdu):
+//	    struct Snort(ApplicationServiceElement)
+//	        func indication(pdu):
 //	            ...do something...
-//	        def confirmation(self, pdu):
+//	        func confirmation(pdu)
 //	            ...do something...
 //
-//	    class TrappedSnort(TrappedApplicationServiceElement, Snort): pass
+//	    struct TrappedSnort(TrappedApplicationServiceElement, Snort)
 //
 //	The Snort functions will be called after the PDU is trapped.
 type TrappedApplicationServiceElement struct {
@@ -61,6 +61,11 @@ type TrappedApplicationServiceElement struct {
 	responseSent         PDU
 	confirmationReceived PDU
 
+	elementID int // TODO: temporary where from?????????
+
+	// args
+	argAseId *int //TODO: hook up
+
 	log zerolog.Logger
 }
 
@@ -71,6 +76,9 @@ func NewTrappedApplicationServiceElement(localLog zerolog.Logger, requirements T
 		requirements: requirements,
 		log:          localLog,
 	}
+	if _debug != nil {
+		_debug("__init__(%s)", t.argAseId)
+	}
 	var err error
 	t.ApplicationServiceElementContract, err = NewApplicationServiceElement(localLog)
 	if err != nil {
@@ -101,24 +109,40 @@ func (s *TrappedApplicationServiceElement) String() string {
 
 func (s *TrappedApplicationServiceElement) Request(args Args, kwArgs KWArgs) error {
 	s.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Request")
-	s.requestSent = GA[PDU](args, 0)
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("request(%s) %r", s.elementID, pdu)
+	}
+	s.requestSent = pdu
 	return s.ApplicationServiceElementContract.Request(args, kwArgs)
 }
 
 func (s *TrappedApplicationServiceElement) Indication(args Args, kwArgs KWArgs) error {
 	s.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Indication")
-	s.indicationReceived = GA[PDU](args, 0)
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("indication(%s) %r", s.elementID, pdu)
+	}
+	s.indicationReceived = pdu
 	return s.requirements.Indication(args, kwArgs)
 }
 
 func (s *TrappedApplicationServiceElement) Response(args Args, kwArgs KWArgs) error {
 	s.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Response")
-	s.responseSent = GA[PDU](args, 0)
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("response(%s) %r", s.elementID, pdu)
+	}
+	s.responseSent = pdu
 	return s.ApplicationServiceElementContract.Response(args, kwArgs)
 }
 
 func (s *TrappedApplicationServiceElement) Confirmation(args Args, kwArgs KWArgs) error {
 	s.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Confirmation")
-	s.confirmationReceived = GA[PDU](args, 0)
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("confirmation(%s) %r", s.elementID, pdu)
+	}
+	s.confirmationReceived = pdu
 	return s.requirements.Confirmation(args, kwArgs)
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedClient.go b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedClient.go
index 14055d42f8..ecbd5e77c5 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedClient.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedClient.go
@@ -57,6 +57,9 @@ func NewTrappedClient(localLog zerolog.Logger, opts ...func(*TrappedClient)) (*T
 	for _, opt := range opts {
 		opt(t)
 	}
+	if _debug != nil {
+		_debug("__init__")
+	}
 	var err error
 	t.ClientContract, err = NewClient(localLog) // TODO: do we need to pass client id?
 	if err != nil {
@@ -82,7 +85,11 @@ func (t *TrappedClient) GetConfirmationReceived() PDU {
 func (t *TrappedClient) Request(args Args, kwArgs KWArgs) error {
 	t.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Request")
 	// a reference for checking
-	t.requestSent = GA[PDU](args, 0)
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("request %r", pdu)
+	}
+	t.requestSent = pdu
 
 	// continue with regular processing
 	return t.ClientContract.Request(args, kwArgs)
@@ -91,6 +98,10 @@ func (t *TrappedClient) Request(args Args, kwArgs KWArgs) error {
 func (t *TrappedClient) Confirmation(args Args, kwArgs KWArgs) error {
 	t.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Confirmation")
 	// a reference for checking
-	t.confirmationReceived = GA[PDU](args, 0)
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("confirmation %r", pdu)
+	}
+	t.confirmationReceived = pdu
 	return nil
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServerStateMachine.go b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedClientStateMachine.go
similarity index 70%
copy from plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServerStateMachine.go
copy to plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedClientStateMachine.go
index a13654b177..cfc6e0607c 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServerStateMachine.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedClientStateMachine.go
@@ -24,17 +24,21 @@ import (
 	"github.com/rs/zerolog"
 
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/comp"
+	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/pdu"
 )
 
-type TrappedServerStateMachine struct {
+type TrappedClientStateMachine struct {
 	*TrappedServer
 	*TrappedStateMachine
 
 	log zerolog.Logger
 }
 
-func NewTrappedServerStateMachine(localLog zerolog.Logger) (*TrappedServerStateMachine, error) {
-	t := &TrappedServerStateMachine{log: localLog}
+func NewTrappedClientStateMachine(localLog zerolog.Logger) (*TrappedClientStateMachine, error) {
+	t := &TrappedClientStateMachine{log: localLog}
+	if _debug != nil {
+		_debug("__init__")
+	}
 	var err error
 	t.TrappedServer, err = NewTrappedServer(localLog, WithTrappedServerContract(t))
 	if err != nil {
@@ -44,12 +48,24 @@ func NewTrappedServerStateMachine(localLog zerolog.Logger) (*TrappedServerStateM
 	return t, nil
 }
 
-func (t *TrappedServerStateMachine) Send(args Args, kwArgs KWArgs) error {
+func (t *TrappedClientStateMachine) Send(args Args, kwArgs KWArgs) error {
 	t.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Send")
+
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("send %r", pdu)
+	}
+
 	return t.Response(args, kwArgs)
 }
 
-func (t *TrappedServerStateMachine) Indication(args Args, kwArgs KWArgs) error {
-	t.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Indication")
+func (t *TrappedClientStateMachine) Confirmation(args Args, kwArgs KWArgs) error {
+	t.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Confirmation")
+
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("confirmation %r", pdu)
+	}
+
 	return t.Receive(args, kwArgs)
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServer.go b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServer.go
index 3f9ca74b59..f961a576e9 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServer.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServer.go
@@ -57,6 +57,9 @@ func NewTrappedServer(localLog zerolog.Logger, opts ...func(*TrappedServer)) (*T
 	for _, opt := range opts {
 		opt(t)
 	}
+	if _debug != nil {
+		_debug("__init__")
+	}
 	var err error
 	t.ServerContract, err = NewServer(localLog) // TODO: do we need to pass server id
 	if err != nil {
@@ -81,16 +84,25 @@ func (t *TrappedServer) GetResponseSent() PDU {
 
 func (t *TrappedServer) Indication(args Args, kwArgs KWArgs) error {
 	t.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Indication")
-	// a reference for checking
-	t.indicationReceived = GA[PDU](args, 0)
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("indication %r", pdu)
+	}
 
+	// a reference for checking
+	t.indicationReceived = pdu
 	return nil
 }
 
 func (t *TrappedServer) Response(args Args, kwArgs KWArgs) error {
 	t.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Response")
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("response %r", pdu)
+	}
+
 	// a reference for checking
-	t.responseSent = GA[PDU](args, 0)
+	t.responseSent = pdu
 
 	// continue with regular processing
 	return t.ServerContract.Response(args, kwArgs)
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServerStateMachine.go b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServerStateMachine.go
index a13654b177..6860b32cae 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServerStateMachine.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServerStateMachine.go
@@ -24,6 +24,7 @@ import (
 	"github.com/rs/zerolog"
 
 	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/comp"
+	. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/pdu"
 )
 
 type TrappedServerStateMachine struct {
@@ -35,6 +36,9 @@ type TrappedServerStateMachine struct {
 
 func NewTrappedServerStateMachine(localLog zerolog.Logger) (*TrappedServerStateMachine, error) {
 	t := &TrappedServerStateMachine{log: localLog}
+	if _debug != nil {
+		_debug("__init__")
+	}
 	var err error
 	t.TrappedServer, err = NewTrappedServer(localLog, WithTrappedServerContract(t))
 	if err != nil {
@@ -46,10 +50,20 @@ func NewTrappedServerStateMachine(localLog zerolog.Logger) (*TrappedServerStateM
 
 func (t *TrappedServerStateMachine) Send(args Args, kwArgs KWArgs) error {
 	t.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Send")
+
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("send %r", pdu)
+	}
 	return t.Response(args, kwArgs)
 }
 
 func (t *TrappedServerStateMachine) Indication(args Args, kwArgs KWArgs) error {
 	t.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Indication")
+
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("indication %r", pdu)
+	}
 	return t.Receive(args, kwArgs)
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServiceAccessPoint.go b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServiceAccessPoint.go
index d1812e0c6d..9db02daaa1 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServiceAccessPoint.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedServiceAccessPoint.go
@@ -61,6 +61,11 @@ type TrappedServiceAccessPoint struct {
 	sapResponseSent         PDU
 	sapConfirmationReceived PDU
 
+	serviceID int // TODO: temporary where from?????????
+
+	// args
+	argSapId *int //TODO: hook up
+
 	log zerolog.Logger
 }
 
@@ -69,6 +74,9 @@ func NewTrappedServiceAccessPoint(localLog zerolog.Logger, requirements TrappedS
 		requirements: requirements,
 		log:          localLog,
 	}
+	if _debug != nil {
+		_debug("__init__(%s)", t.argSapId)
+	}
 	var err error
 	t.ServiceAccessPointContract, err = NewServiceAccessPoint(localLog)
 	if err != nil {
@@ -95,24 +103,40 @@ func (s *TrappedServiceAccessPoint) GetSapConfirmationReceived() PDU {
 
 func (s *TrappedServiceAccessPoint) SapRequest(args Args, kwArgs KWArgs) error {
 	s.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("SapRequest")
-	s.sapRequestSent = GA[PDU](args, 0)
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("sap_request(%s) %r", s.serviceID, pdu)
+	}
+	s.sapRequestSent = pdu
 	return s.ServiceAccessPointContract.SapRequest(args, kwArgs)
 }
 
 func (s *TrappedServiceAccessPoint) SapIndication(args Args, kwArgs KWArgs) error {
 	s.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("SapIndication")
-	s.sapIndicationReceived = GA[PDU](args, 0)
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("sap_indication(%s) %r", s.serviceID, pdu)
+	}
+	s.sapIndicationReceived = pdu
 	return s.requirements.SapIndication(args, kwArgs)
 }
 
 func (s *TrappedServiceAccessPoint) SapResponse(args Args, kwArgs KWArgs) error {
 	s.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("SapResponse")
-	s.sapResponseSent = GA[PDU](args, 0)
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("sap_response(%s) %r", s.serviceID, pdu)
+	}
+	s.sapResponseSent = pdu
 	return s.ServiceAccessPointContract.SapResponse(args, kwArgs)
 }
 
 func (s *TrappedServiceAccessPoint) SapConfirmation(args Args, kwArgs KWArgs) error {
 	s.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("SapConfirmation")
-	s.sapConfirmationReceived = GA[PDU](args, 0)
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("sap_confirmation(%s) %r", s.serviceID, pdu)
+	}
+	s.sapConfirmationReceived = pdu
 	return s.requirements.SapConfirmation(args, kwArgs)
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedStateMachine.go b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedStateMachine.go
index ddaf0b04c3..674056a999 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedStateMachine.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_TrappedStateMachine.go
@@ -46,6 +46,9 @@ func NewTrappedStateMachine(localLog zerolog.Logger) *TrappedStateMachine {
 	t := &TrappedStateMachine{
 		log: localLog,
 	}
+	if _debug != nil {
+		_debug("__init__ %r", nil) //TODO: kwargs
+	}
 	var init func()
 	t.StateMachineContract, init = state_machine.NewStateMachine(localLog, t, state_machine.WithStateMachineStateInterceptor(t), state_machine.WithStateMachineStateDecorator(t.DecorateState))
 	t.Trapper = NewTrapper(localLog, t.StateMachineContract)
@@ -63,8 +66,13 @@ func (t *TrappedStateMachine) BeforeSend(pdu PDU) {
 
 func (t *TrappedStateMachine) Send(args Args, kwArgs KWArgs) error {
 	t.log.Debug().Stringer("args", args).Stringer("kwArgs", kwArgs).Msg("Send")
+	pdu := GA[PDU](args, 0)
+	if _debug != nil {
+		_debug("send %r", pdu)
+	}
+
 	// keep a copy
-	t.sent = GA[PDU](args, 0)
+	t.sent = pdu
 	return nil
 }
 
diff --git a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_Trapper.go b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_Trapper.go
index 45e91b86e4..2cfc8643f9 100644
--- a/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_Trapper.go
+++ b/plc4go/internal/bacnetip/bacgopes/tests/trapped_classes/trapped_classes_Trapper.go
@@ -52,12 +52,18 @@ func NewTrapper(localLog zerolog.Logger, requirements TrapperRequirements) *Trap
 		TrapperRequirements: requirements,
 		log:                 localLog,
 	}
+	if _debug != nil {
+		_debug("__init__ %r %r", nil, nil) //TODO: args and kwargs
+	}
 	// reset to initialize
 	trapper.reset()
 	return trapper
 }
 
 func (t *Trapper) reset() {
+	if _debug != nil {
+		_debug("reset")
+	}
 	t.log.Trace().Msg("Reset")
 	// flush the copies
 	t.beforeSendPdu = nil
@@ -69,6 +75,9 @@ func (t *Trapper) reset() {
 
 // BeforeSend is Called before each PDU about to be sent.
 func (t *Trapper) BeforeSend(pdu PDU) {
+	if _debug != nil {
+		_debug("before_send %r", pdu)
+	}
 	t.log.Debug().Stringer("pdu", pdu).Msg("BeforeSend")
 	//keep a copy
 	t.beforeSendPdu = pdu
@@ -83,6 +92,9 @@ func (t *Trapper) GetBeforeSendPdu() PDU {
 
 // AfterSend is Called after each PDU sent.
 func (t *Trapper) AfterSend(pdu PDU) {
+	if _debug != nil {
+		_debug("after_send %r", pdu)
+	}
 	t.log.Debug().Stringer("pdu", pdu).Msg("AfterSend")
 	//keep a copy
 	t.afterSendPdu = pdu
@@ -97,6 +109,9 @@ func (t *Trapper) GetAfterSendPdu() PDU {
 
 // BeforeReceive is Called with each PDU received before matching.
 func (t *Trapper) BeforeReceive(pdu PDU) {
+	if _debug != nil {
+		_debug("before_receive %r", pdu)
+	}
 	t.log.Debug().Stringer("pdu", pdu).Msg("BeforeReceive")
 	//keep a copy
 	t.beforeReceivePdu = pdu
@@ -111,6 +126,9 @@ func (t *Trapper) GetBeforeReceivePdu() PDU {
 
 // AfterReceive is Called with PDU received after match.
 func (t *Trapper) AfterReceive(pdu PDU) {
+	if _debug != nil {
+		_debug("after_receive %r", pdu)
+	}
 	t.log.Debug().Stringer("pdu", pdu).Msg("AfterReceive")
 	//keep a copy
 	t.afterReceivePdu = pdu
@@ -125,6 +143,9 @@ func (t *Trapper) GetAfterReceivePdu() PDU {
 
 // UnexpectedReceive is Called with PDU that did not match.  Unless this is trapped by the state, the default behaviour is to fail.
 func (t *Trapper) UnexpectedReceive(pdu PDU) {
+	if _debug != nil {
+		_debug("unexpected_receive %r", pdu)
+	}
 	t.log.Debug().Stringer("pdu", pdu).Msg("UnexpectedReceive")
 	//keep a copy
 	t.unexpectedReceivePdu = pdu
diff --git a/plc4go/internal/bacnetip/bacgopes/udp/udp_UDPActor.go b/plc4go/internal/bacnetip/bacgopes/udp/udp_UDPActor.go
index 1a135a58bd..d293d41bcc 100644
--- a/plc4go/internal/bacnetip/bacgopes/udp/udp_UDPActor.go
+++ b/plc4go/internal/bacnetip/bacgopes/udp/udp_UDPActor.go
@@ -53,7 +53,7 @@ func NewUDPActor(localLog zerolog.Logger, director *UDPDirector, peer string) *U
 	// Add a timer
 	a.timeout = director.timeout
 	if a.timeout > 0 {
-		a.timer = FunctionTask(a.idleTimeout, NoArgs, NoKWArgs)
+		a.timer = FunctionTask(a.idleTimeout, NoArgs, NoKWArgs())
 		a.timer.InstallTask(WithInstallTaskOptionsWhen(GetTaskManagerTime().Add(time.Duration(a.timeout) * time.Millisecond)))
 	}
 
diff --git a/plc4go/internal/bacnetip/bacgopes/udp/udp_UDPDirector.go b/plc4go/internal/bacnetip/bacgopes/udp/udp_UDPDirector.go
index 58a1ec1af6..693efed8cc 100644
--- a/plc4go/internal/bacnetip/bacgopes/udp/udp_UDPDirector.go
+++ b/plc4go/internal/bacnetip/bacgopes/udp/udp_UDPDirector.go
@@ -232,7 +232,7 @@ func (d *UDPDirector) handleRead() {
 		d.handleError(errors.Wrap(err, "error parsing destination address"))
 		return
 	}
-	pdu := NewCPDU(NoArgs, NKW(KWCompRootMessage, bvlc, KWCPCISource, saddr, KWCPCIDestination, daddr)) // TODO: why do we set the destination here??? This might be completely wrong
+	pdu := NewCPDU(readBytes, NKW(KWCompRootMessage, bvlc, KWCPCISource, saddr, KWCPCIDestination, daddr)) // TODO: why do we set the destination here??? This might be completely wrong
 	// send the _PDU up to the client
 	d.wg.Add(1)
 	go func() {
@@ -302,5 +302,5 @@ func (d *UDPDirector) _response(pdu PDU) error {
 	}
 
 	// send the message
-	return peer.Response(NA(pdu), NoKWArgs)
+	return peer.Response(NA(pdu), NoKWArgs())
 }
diff --git a/plc4go/internal/bacnetip/bacgopes/vlan/vlan_IPRouterNode.go b/plc4go/internal/bacnetip/bacgopes/vlan/vlan_IPRouterNode.go
index 76efba8a93..09d5ace5cd 100644
--- a/plc4go/internal/bacnetip/bacgopes/vlan/vlan_IPRouterNode.go
+++ b/plc4go/internal/bacnetip/bacgopes/vlan/vlan_IPRouterNode.go
@@ -102,7 +102,7 @@ func (n *IPRouterNode) ProcessPDU(pdu PDU) error {
 		_debug("process_pdu %r", pdu)
 	}
 	n.log.Debug().Stringer("pdu", pdu).Msg("ProcessPDU")
-	return n.Request(NA(pdu), NoKWArgs)
+	return n.Request(NA(pdu), NoKWArgs())
 }
 
 func (n *IPRouterNode) Format(s fmt.State, v rune) {
diff --git a/plc4go/internal/bacnetip/bacgopes/vlan/vlan_Network.go b/plc4go/internal/bacnetip/bacgopes/vlan/vlan_Network.go
index f69e7174ef..3122ade388 100644
--- a/plc4go/internal/bacnetip/bacgopes/vlan/vlan_Network.go
+++ b/plc4go/internal/bacnetip/bacgopes/vlan/vlan_Network.go
@@ -156,7 +156,7 @@ func (n *Network) ProcessPDU(pdu PDU) error {
 					_debug("    - match: %r", node)
 				}
 				n.log.Debug().Stringer("node", node).Msg("match")
-				if err := node.Response(NA(DeepCopy[PDU](pdu)), NoKWArgs); err != nil {
+				if err := node.Response(NA(DeepCopy[PDU](pdu)), NoKWArgs()); err != nil {
 					n.log.Debug().Err(err).Msg("error processing PDU")
 				}
 			}
@@ -172,7 +172,7 @@ func (n *Network) ProcessPDU(pdu PDU) error {
 					_debug("    - match: %r", node)
 				}
 				n.log.Debug().Stringer("node", node).Msg("match")
-				if err := node.Response(NA(DeepCopy[PDU](pdu)), NoKWArgs); err != nil {
+				if err := node.Response(NA(DeepCopy[PDU](pdu)), NoKWArgs()); err != nil {
 					n.log.Debug().Err(err).Msg("error processing PDU")
 				}
 			}
diff --git a/plc4go/internal/bacnetip/bacgopes/vlan/vlan_Node.go b/plc4go/internal/bacnetip/bacgopes/vlan/vlan_Node.go
index 04897eea2e..e637dae0be 100644
--- a/plc4go/internal/bacnetip/bacgopes/vlan/vlan_Node.go
+++ b/plc4go/internal/bacnetip/bacgopes/vlan/vlan_Node.go
@@ -172,7 +172,7 @@ func (n *Node) Indication(args Args, kwArgs KWArgs) error {
 	// actual network delivery is a zero-delay task
 	OneShotFunction(func(args Args, kwArgs KWArgs) error {
 		return n.lan.ProcessPDU(pdu)
-	}, args, NoKWArgs)
+	}, args, NoKWArgs())
 	return nil
 }