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 2018/03/08 10:51:35 UTC

[incubator-plc4x] 06/08: separated tcp from ads protocol

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

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

commit 493190ae4a0f0fac0ee9ac945288e1117520c719
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Mar 8 11:31:20 2018 +0100

    separated tcp from ads protocol
---
 .../java/ads/api/commands/ADSAbstractRequest.java  |   9 +-
 .../java/ads/api/commands/ADSAbstractResponse.java |   9 +-
 .../commands/ADSAddDeviceNotificationRequest.java  |  16 ---
 .../commands/ADSAddDeviceNotificationResponse.java |  11 +-
 .../ADSDeleteDeviceNotificationRequest.java        |  10 --
 .../ADSDeleteDeviceNotificationResponse.java       |   9 +-
 .../api/commands/ADSDeviceNotificationRequest.java |  15 +-
 .../commands/ADSDeviceNotificationResponse.java    |   2 +-
 .../ads/api/commands/ADSReadDeviceInfoRequest.java |   9 --
 .../api/commands/ADSReadDeviceInfoResponse.java    |  12 +-
 .../java/ads/api/commands/ADSReadRequest.java      |  14 +-
 .../java/ads/api/commands/ADSReadResponse.java     |  11 +-
 .../java/ads/api/commands/ADSReadStateRequest.java |   9 --
 .../ads/api/commands/ADSReadStateResponse.java     |   9 +-
 .../java/ads/api/commands/ADSReadWriteRequest.java |  17 +--
 .../ads/api/commands/ADSReadWriteResponse.java     |   9 +-
 .../ads/api/commands/ADSWriteControlRequest.java   |  16 +--
 .../ads/api/commands/ADSWriteControlResponse.java  |   9 +-
 .../java/ads/api/commands/ADSWriteRequest.java     |  16 +--
 .../java/ads/api/commands/ADSWriteResponse.java    |   9 +-
 .../java/ads/api/commands/UnknownCommand.java      |  13 +-
 .../plc4x/java/ads/api/generic/AMSPacket.java      |  72 ++++++++--
 .../plc4x/java/ads/api/generic/AMSTCPPacket.java   | 114 ---------------
 .../plc4x/java/ads/api/serial/AMSSerialFrame.java  |   8 +-
 .../ads/api/{generic => tcp}/AMSTCPHeader.java     |   4 +-
 .../plc4x/java/ads/api/tcp/AMSTCPPacket.java       | 100 +++++++++++++
 .../ads/api/{generic => tcp}/types/TcpLength.java  |   2 +-
 .../java/ads/connection/ADSPlcConnection.java      |   8 +-
 .../{ADSProtocol.java => ADS2TcpProtocol.java}     | 160 ++++++++++-----------
 ...lc4XADSProtocol.java => Plc4X2ADSProtocol.java} |  34 ++---
 .../ads/api/generic/GenericFactoryMethodTest.java  |   2 +
 .../types/GenericTypesFactoryMethodTest.java       |   1 +
 .../java/ads/api/generic/types/TcpLengthTest.java  |   1 +
 ...SProtocolTest.java => ADS2TcpProtocolTest.java} |  58 ++++----
 ...colTest.java => Plc4X2ADS2TcpProtocolTest.java} |  32 ++---
 .../plc4x/java/ads/netty/ADSProtocolBenchmark.java |   4 +-
 36 files changed, 374 insertions(+), 460 deletions(-)

diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractRequest.java
index a9572c4..27506fb 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractRequest.java
@@ -19,18 +19,13 @@
 package org.apache.plc4x.java.ads.api.commands;
 
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPPacket;
+import org.apache.plc4x.java.ads.api.generic.AMSPacket;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Invoke;
 import org.apache.plc4x.java.ads.api.generic.types.State;
 
-public abstract class ADSAbstractRequest extends AMSTCPPacket {
-    protected ADSAbstractRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        super(amstcpHeader, amsHeader);
-    }
-
+public abstract class ADSAbstractRequest extends AMSPacket {
     protected ADSAbstractRequest(AMSHeader amsHeader) {
         super(amsHeader);
     }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractResponse.java
index dd24b39..1c4f24a 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractResponse.java
@@ -19,18 +19,13 @@
 package org.apache.plc4x.java.ads.api.commands;
 
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPPacket;
+import org.apache.plc4x.java.ads.api.generic.AMSPacket;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Invoke;
 import org.apache.plc4x.java.ads.api.generic.types.State;
 
-public abstract class ADSAbstractResponse extends AMSTCPPacket {
-     protected ADSAbstractResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        super(amstcpHeader, amsHeader);
-    }
-
+public abstract class ADSAbstractResponse extends AMSPacket {
     protected ADSAbstractResponse(AMSHeader amsHeader) {
         super(amsHeader);
     }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationRequest.java
index 7e96a3c..38db4e2 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationRequest.java
@@ -21,7 +21,6 @@ package org.apache.plc4x.java.ads.api.commands;
 import org.apache.plc4x.java.ads.api.commands.types.*;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.*;
 import org.apache.plc4x.java.ads.api.util.ByteValue;
 
@@ -65,17 +64,6 @@ public class ADSAddDeviceNotificationRequest extends ADSAbstractRequest {
      */
     private final Reserved reserved;
 
-    private ADSAddDeviceNotificationRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
-        super(amstcpHeader, amsHeader);
-        this.indexGroup = requireNonNull(indexGroup);
-        this.indexOffset = requireNonNull(indexOffset);
-        this.length = requireNonNull(length);
-        this.transmissionMode = requireNonNull(transmissionMode);
-        this.maxDelay = requireNonNull(maxDelay);
-        this.cycleTime = requireNonNull(cycleTime);
-        this.reserved = Reserved.INSTANCE;
-    }
-
     private ADSAddDeviceNotificationRequest(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
         super(amsHeader);
         this.indexGroup = requireNonNull(indexGroup);
@@ -103,10 +91,6 @@ public class ADSAddDeviceNotificationRequest extends ADSAbstractRequest {
         return buildADSData(indexGroup, indexOffset, length, transmissionMode, maxDelay, cycleTime, reserved);
     }
 
-    public static ADSAddDeviceNotificationRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
-        return new ADSAddDeviceNotificationRequest(amstcpHeader, amsHeader, indexGroup, indexOffset, length, transmissionMode, maxDelay, cycleTime);
-    }
-
     public static ADSAddDeviceNotificationRequest of(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
         return new ADSAddDeviceNotificationRequest(amsHeader, indexGroup, indexOffset, length, transmissionMode, maxDelay, cycleTime);
     }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationResponse.java
index db59dd6..6e32975 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationResponse.java
@@ -22,7 +22,6 @@ import org.apache.plc4x.java.ads.api.commands.types.NotificationHandle;
 import org.apache.plc4x.java.ads.api.commands.types.Result;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -46,8 +45,8 @@ public class ADSAddDeviceNotificationResponse extends ADSAbstractResponse {
      */
     private final NotificationHandle notificationHandle;
 
-    private ADSAddDeviceNotificationResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, NotificationHandle notificationHandle) {
-        super(amstcpHeader, amsHeader);
+    private ADSAddDeviceNotificationResponse(AMSHeader amsHeader, Result result, NotificationHandle notificationHandle) {
+        super(amsHeader);
         this.result = requireNonNull(result);
         this.notificationHandle = requireNonNull(notificationHandle);
     }
@@ -58,8 +57,8 @@ public class ADSAddDeviceNotificationResponse extends ADSAbstractResponse {
         this.notificationHandle = requireNonNull(notificationHandle);
     }
 
-    public static ADSAddDeviceNotificationResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, NotificationHandle notificationHandle) {
-        return new ADSAddDeviceNotificationResponse(amstcpHeader, amsHeader, result, notificationHandle);
+    public static ADSAddDeviceNotificationResponse of(AMSHeader amsHeader, Result result, NotificationHandle notificationHandle) {
+        return new ADSAddDeviceNotificationResponse(amsHeader, result, notificationHandle);
     }
 
     public static ADSAddDeviceNotificationResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, NotificationHandle notificationHandle) {
@@ -92,7 +91,7 @@ public class ADSAddDeviceNotificationResponse extends ADSAbstractResponse {
 
         if (!result.equals(that.result))
             return false;
-        
+
         return notificationHandle.equals(that.notificationHandle);
     }
 
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationRequest.java
index 44f0258..9ddbd3b 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationRequest.java
@@ -21,7 +21,6 @@ package org.apache.plc4x.java.ads.api.commands;
 import org.apache.plc4x.java.ads.api.commands.types.NotificationHandle;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -40,11 +39,6 @@ public class ADSDeleteDeviceNotificationRequest extends ADSAbstractRequest {
      */
     private final NotificationHandle notificationHandle;
 
-    private ADSDeleteDeviceNotificationRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, NotificationHandle notificationHandle) {
-        super(amstcpHeader, amsHeader);
-        this.notificationHandle = requireNonNull(notificationHandle);
-    }
-
     private ADSDeleteDeviceNotificationRequest(AMSHeader amsHeader, NotificationHandle notificationHandle) {
         super(amsHeader);
         this.notificationHandle = requireNonNull(notificationHandle);
@@ -55,10 +49,6 @@ public class ADSDeleteDeviceNotificationRequest extends ADSAbstractRequest {
         this.notificationHandle = requireNonNull(notificationHandle);
     }
 
-    public static ADSDeleteDeviceNotificationRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, NotificationHandle notificationHandle) {
-        return new ADSDeleteDeviceNotificationRequest(amstcpHeader, amsHeader, notificationHandle);
-    }
-
     public static ADSDeleteDeviceNotificationRequest of(AMSHeader amsHeader, NotificationHandle notificationHandle) {
         return new ADSDeleteDeviceNotificationRequest(amsHeader, notificationHandle);
     }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationResponse.java
index 14de8ff..980e916 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationResponse.java
@@ -21,7 +21,6 @@ package org.apache.plc4x.java.ads.api.commands;
 import org.apache.plc4x.java.ads.api.commands.types.Result;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -40,8 +39,8 @@ public class ADSDeleteDeviceNotificationResponse extends ADSAbstractResponse {
      */
     private final Result result;
 
-    private ADSDeleteDeviceNotificationResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
-        super(amstcpHeader, amsHeader);
+    private ADSDeleteDeviceNotificationResponse(AMSHeader amsHeader, Result result) {
+        super(amsHeader);
         this.result = requireNonNull(result);
     }
 
@@ -50,8 +49,8 @@ public class ADSDeleteDeviceNotificationResponse extends ADSAbstractResponse {
         this.result = requireNonNull(result);
     }
 
-    public static ADSDeleteDeviceNotificationResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
-        return new ADSDeleteDeviceNotificationResponse(amstcpHeader, amsHeader, result);
+    public static ADSDeleteDeviceNotificationResponse of(AMSHeader amsHeader, Result result) {
+        return new ADSDeleteDeviceNotificationResponse(amsHeader, result);
     }
 
     public static ADSDeleteDeviceNotificationResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationRequest.java
index 24fa24b..dbf0ad5 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationRequest.java
@@ -23,7 +23,6 @@ import org.apache.plc4x.java.ads.api.commands.types.Length;
 import org.apache.plc4x.java.ads.api.commands.types.Stamps;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -58,14 +57,6 @@ public class ADSDeviceNotificationRequest extends ADSAbstractRequest {
 
     private final LengthSupplier lengthSupplier;
 
-    private ADSDeviceNotificationRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
-        super(amstcpHeader, amsHeader);
-        this.length = requireNonNull(length);
-        this.stamps = requireNonNull(stamps);
-        this.adsStampHeaders = requireNonNull(adsStampHeaders);
-        lengthSupplier = null;
-    }
-
     private ADSDeviceNotificationRequest(AMSHeader amsHeader, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
         super(amsHeader);
         this.length = requireNonNull(length);
@@ -88,10 +79,6 @@ public class ADSDeviceNotificationRequest extends ADSAbstractRequest {
         };
     }
 
-    public static ADSDeviceNotificationRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
-        return new ADSDeviceNotificationRequest(amstcpHeader, amsHeader, length, stamps, adsStampHeaders);
-    }
-
     public static ADSDeviceNotificationRequest of(AMSHeader amsHeader, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
         return new ADSDeviceNotificationRequest(amsHeader, length, stamps, adsStampHeaders);
     }
@@ -136,7 +123,7 @@ public class ADSDeviceNotificationRequest extends ADSAbstractRequest {
             return false;
         if (!stamps.equals(that.stamps))
             return false;
-        
+
         return adsStampHeaders.equals(that.adsStampHeaders);
     }
 
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationResponse.java
index f688c7c..e8cb2e9 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationResponse.java
@@ -28,7 +28,7 @@ import org.apache.plc4x.java.ads.api.generic.types.Command;
 public class ADSDeviceNotificationResponse extends ADSAbstractResponse {
 
     protected ADSDeviceNotificationResponse() {
-        super(null, null);
+        super(null);
         // There is no {@link ADSDeviceNotificationResponse} specified
     }
 
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoRequest.java
index 354ab58..5a315ae 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoRequest.java
@@ -20,7 +20,6 @@ package org.apache.plc4x.java.ads.api.commands;
 
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -34,10 +33,6 @@ import org.apache.plc4x.java.ads.api.generic.types.Invoke;
 @ADSCommandType(Command.ADS_READ_DEVICE_INFO)
 public class ADSReadDeviceInfoRequest extends ADSAbstractRequest {
 
-    private ADSReadDeviceInfoRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        super(amstcpHeader, amsHeader);
-    }
-
     private ADSReadDeviceInfoRequest(AMSHeader amsHeader) {
         super(amsHeader);
     }
@@ -46,10 +41,6 @@ public class ADSReadDeviceInfoRequest extends ADSAbstractRequest {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
     }
 
-    public static ADSReadDeviceInfoRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        return new ADSReadDeviceInfoRequest(amstcpHeader, amsHeader);
-    }
-
     public static ADSReadDeviceInfoRequest of(AMSHeader amsHeader) {
         return new ADSReadDeviceInfoRequest(amsHeader);
     }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoResponse.java
index 3f11b28..394954c 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoResponse.java
@@ -21,7 +21,6 @@ package org.apache.plc4x.java.ads.api.commands;
 import org.apache.plc4x.java.ads.api.commands.types.*;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -55,9 +54,8 @@ public class ADSReadDeviceInfoResponse extends ADSAbstractResponse {
      */
     private final Device device;
 
-
-    private ADSReadDeviceInfoResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, MajorVersion majorVersion, MinorVersion minorVersion, Version version, Device device) {
-        super(amstcpHeader, amsHeader);
+    private ADSReadDeviceInfoResponse(AMSHeader amsHeader, Result result, MajorVersion majorVersion, MinorVersion minorVersion, Version version, Device device) {
+        super(amsHeader);
         this.result = requireNonNull(result);
         this.majorVersion = requireNonNull(majorVersion);
         this.minorVersion = requireNonNull(minorVersion);
@@ -74,8 +72,8 @@ public class ADSReadDeviceInfoResponse extends ADSAbstractResponse {
         this.device = requireNonNull(device);
     }
 
-    public static ADSReadDeviceInfoResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, MajorVersion majorVersion, MinorVersion minorVersion, Version version, Device device) {
-        return new ADSReadDeviceInfoResponse(amstcpHeader, amsHeader, result, majorVersion, minorVersion, version, device);
+    public static ADSReadDeviceInfoResponse of(AMSHeader amsHeader, Result result, MajorVersion majorVersion, MinorVersion minorVersion, Version version, Device device) {
+        return new ADSReadDeviceInfoResponse(amsHeader, result, majorVersion, minorVersion, version, device);
     }
 
     public static ADSReadDeviceInfoResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, MajorVersion majorVersion, MinorVersion minorVersion, Version version, Device device) {
@@ -126,7 +124,7 @@ public class ADSReadDeviceInfoResponse extends ADSAbstractResponse {
             return false;
         if (!version.equals(that.version))
             return false;
-        
+
         return device.equals(that.device);
     }
 
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadRequest.java
index 880f3f3..c20f435 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadRequest.java
@@ -23,7 +23,6 @@ import org.apache.plc4x.java.ads.api.commands.types.IndexOffset;
 import org.apache.plc4x.java.ads.api.commands.types.Length;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -52,13 +51,6 @@ public class ADSReadRequest extends ADSAbstractRequest {
      */
     private final Length length;
 
-    private ADSReadRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
-        super(amstcpHeader, amsHeader);
-        this.indexGroup = requireNonNull(indexGroup);
-        this.indexOffset = requireNonNull(indexOffset);
-        this.length = requireNonNull(length);
-    }
-
     private ADSReadRequest(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
         super(amsHeader);
         this.indexGroup = requireNonNull(indexGroup);
@@ -73,10 +65,6 @@ public class ADSReadRequest extends ADSAbstractRequest {
         this.length = requireNonNull(length);
     }
 
-    public static ADSReadRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
-        return new ADSReadRequest(amstcpHeader, amsHeader, indexGroup, indexOffset, length);
-    }
-
     public static ADSReadRequest of(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
         return new ADSReadRequest(amsHeader, indexGroup, indexOffset, length);
     }
@@ -117,7 +105,7 @@ public class ADSReadRequest extends ADSAbstractRequest {
             return false;
         if (!indexOffset.equals(that.indexOffset))
             return false;
-        
+
         return length.equals(that.length);
     }
 
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadResponse.java
index 8a38d58..6e51c58 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadResponse.java
@@ -23,7 +23,6 @@ import org.apache.plc4x.java.ads.api.commands.types.Length;
 import org.apache.plc4x.java.ads.api.commands.types.Result;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -53,8 +52,8 @@ public class ADSReadResponse extends ADSAbstractResponse {
 
     private final LengthSupplier lengthSupplier;
 
-    private ADSReadResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, Length length, Data data) {
-        super(amstcpHeader, amsHeader);
+    private ADSReadResponse(AMSHeader amsHeader, Result result, Length length, Data data) {
+        super(amsHeader);
         this.result = requireNonNull(result);
         this.length = requireNonNull(length);
         this.data = requireNonNull(data);
@@ -69,8 +68,8 @@ public class ADSReadResponse extends ADSAbstractResponse {
         this.lengthSupplier = data;
     }
 
-    public static ADSReadResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, Length length, Data data) {
-        return new ADSReadResponse(amstcpHeader, amsHeader, result, length, data);
+    public static ADSReadResponse of(AMSHeader amsHeader, Result result, Length length, Data data) {
+        return new ADSReadResponse(amsHeader, result, length, data);
     }
 
     public static ADSReadResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, Data data) {
@@ -109,7 +108,7 @@ public class ADSReadResponse extends ADSAbstractResponse {
             return false;
         if (!getLength().equals(that.getLength()))
             return false;
-        
+
         return data.equals(that.data);
     }
 
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateRequest.java
index 6c226c4..38749ff 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateRequest.java
@@ -20,7 +20,6 @@ package org.apache.plc4x.java.ads.api.commands;
 
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -34,10 +33,6 @@ import org.apache.plc4x.java.ads.api.generic.types.Invoke;
 @ADSCommandType(Command.ADS_READ_STATE)
 public class ADSReadStateRequest extends ADSAbstractRequest {
 
-    private ADSReadStateRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        super(amstcpHeader, amsHeader);
-    }
-
     private ADSReadStateRequest(AMSHeader amsHeader) {
         super(amsHeader);
     }
@@ -46,10 +41,6 @@ public class ADSReadStateRequest extends ADSAbstractRequest {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
     }
 
-    public static ADSReadStateRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        return new ADSReadStateRequest(amstcpHeader, amsHeader);
-    }
-
     public static ADSReadStateRequest of(AMSHeader amsHeader) {
         return new ADSReadStateRequest(amsHeader);
     }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateResponse.java
index 53e8985..7514664 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateResponse.java
@@ -21,7 +21,6 @@ package org.apache.plc4x.java.ads.api.commands;
 import org.apache.plc4x.java.ads.api.commands.types.Result;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -40,8 +39,8 @@ public class ADSReadStateResponse extends ADSAbstractResponse {
      */
     private final Result result;
 
-    private ADSReadStateResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
-        super(amstcpHeader, amsHeader);
+    private ADSReadStateResponse(AMSHeader amsHeader, Result result) {
+        super(amsHeader);
         this.result = requireNonNull(result);
     }
 
@@ -50,8 +49,8 @@ public class ADSReadStateResponse extends ADSAbstractResponse {
         this.result = requireNonNull(result);
     }
 
-    public static ADSReadStateResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
-        return new ADSReadStateResponse(amstcpHeader, amsHeader, result);
+    public static ADSReadStateResponse of(AMSHeader amsHeader, Result result) {
+        return new ADSReadStateResponse(amsHeader, result);
     }
 
     public static ADSReadStateResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteRequest.java
index ef82e33..c44d037 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteRequest.java
@@ -21,7 +21,6 @@ package org.apache.plc4x.java.ads.api.commands;
 import org.apache.plc4x.java.ads.api.commands.types.*;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -61,16 +60,6 @@ public class ADSReadWriteRequest extends ADSAbstractRequest {
 
     private final LengthSupplier writeLengthSupplier;
 
-    private ADSReadWriteRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
-        super(amstcpHeader, amsHeader);
-        this.indexGroup = requireNonNull(indexGroup);
-        this.indexOffset = requireNonNull(indexOffset);
-        this.readLength = requireNonNull(readLength);
-        this.writeLength = requireNonNull(writeLength);
-        this.data = requireNonNull(data);
-        this.writeLengthSupplier = null;
-    }
-
     private ADSReadWriteRequest(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
         super(amsHeader);
         this.indexGroup = requireNonNull(indexGroup);
@@ -91,10 +80,6 @@ public class ADSReadWriteRequest extends ADSAbstractRequest {
         this.writeLengthSupplier = data;
     }
 
-    public static ADSReadWriteRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
-        return new ADSReadWriteRequest(amstcpHeader, amsHeader, indexGroup, indexOffset, readLength, writeLength, data);
-    }
-
     public static ADSReadWriteRequest of(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
         return new ADSReadWriteRequest(amsHeader, indexGroup, indexOffset, readLength, writeLength, data);
     }
@@ -147,7 +132,7 @@ public class ADSReadWriteRequest extends ADSAbstractRequest {
             return false;
         if (!getWriteLength().equals(that.getWriteLength()))
             return false;
-        
+
         return data.equals(that.data);
     }
 
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteResponse.java
index 8328882..d91faa2 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteResponse.java
@@ -23,7 +23,6 @@ import org.apache.plc4x.java.ads.api.commands.types.Length;
 import org.apache.plc4x.java.ads.api.commands.types.Result;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -55,8 +54,8 @@ public class ADSReadWriteResponse extends ADSAbstractResponse {
 
     private final LengthSupplier lengthSupplier;
 
-    private ADSReadWriteResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, Length length, Data data) {
-        super(amstcpHeader, amsHeader);
+    private ADSReadWriteResponse(AMSHeader amsHeader, Result result, Length length, Data data) {
+        super(amsHeader);
         this.result = requireNonNull(result);
         this.length = requireNonNull(length);
         this.data = requireNonNull(data);
@@ -71,8 +70,8 @@ public class ADSReadWriteResponse extends ADSAbstractResponse {
         this.lengthSupplier = data;
     }
 
-    public static ADSReadWriteResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, Length length, Data data) {
-        return new ADSReadWriteResponse(amstcpHeader, amsHeader, result, length, data);
+    public static ADSReadWriteResponse of(AMSHeader amsHeader, Result result, Length length, Data data) {
+        return new ADSReadWriteResponse(amsHeader, result, length, data);
     }
 
     public static ADSReadWriteResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, Data data) {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlRequest.java
index d2f7121..a7c76b7 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlRequest.java
@@ -24,7 +24,6 @@ import org.apache.plc4x.java.ads.api.commands.types.DeviceState;
 import org.apache.plc4x.java.ads.api.commands.types.Length;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -60,15 +59,6 @@ public class ADSWriteControlRequest extends ADSAbstractRequest {
 
     private final LengthSupplier lengthSupplier;
 
-    private ADSWriteControlRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, ADSState adsState, DeviceState deviceState, Length length, Data data) {
-        super(amstcpHeader, amsHeader);
-        this.adsState = requireNonNull(adsState);
-        this.deviceState = requireNonNull(deviceState);
-        this.length = requireNonNull(length);
-        this.data = requireNonNull(data);
-        this.lengthSupplier = null;
-    }
-
     private ADSWriteControlRequest(AMSHeader amsHeader, ADSState adsState, DeviceState deviceState, Length length, Data data) {
         super(amsHeader);
         this.adsState = requireNonNull(adsState);
@@ -87,10 +77,6 @@ public class ADSWriteControlRequest extends ADSAbstractRequest {
         this.lengthSupplier = data;
     }
 
-    public static ADSWriteControlRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, ADSState adsState, DeviceState deviceState, Length length, Data data) {
-        return new ADSWriteControlRequest(amstcpHeader, amsHeader, adsState, deviceState, length, data);
-    }
-
     public static ADSWriteControlRequest of(AMSHeader amsHeader, ADSState adsState, DeviceState deviceState, Length length, Data data) {
         return new ADSWriteControlRequest(amsHeader, adsState, deviceState, length, data);
     }
@@ -137,7 +123,7 @@ public class ADSWriteControlRequest extends ADSAbstractRequest {
             return false;
         if (!getLength().equals(that.getLength()))
             return false;
-        
+
         return data.equals(that.data);
     }
 
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlResponse.java
index 86e2b0a..d9446a3 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlResponse.java
@@ -21,7 +21,6 @@ package org.apache.plc4x.java.ads.api.commands;
 import org.apache.plc4x.java.ads.api.commands.types.Result;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -39,8 +38,8 @@ public class ADSWriteControlResponse extends ADSAbstractResponse {
      */
     private final Result result;
 
-    private ADSWriteControlResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
-        super(amstcpHeader, amsHeader);
+    private ADSWriteControlResponse(AMSHeader amsHeader, Result result) {
+        super(amsHeader);
         this.result = requireNonNull(result);
     }
 
@@ -49,8 +48,8 @@ public class ADSWriteControlResponse extends ADSAbstractResponse {
         this.result = requireNonNull(result);
     }
 
-    public static ADSWriteControlResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
-        return new ADSWriteControlResponse(amstcpHeader, amsHeader, result);
+    public static ADSWriteControlResponse of(AMSHeader amsHeader, Result result) {
+        return new ADSWriteControlResponse(amsHeader, result);
     }
 
     public static ADSWriteControlResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteRequest.java
index 6ce66a6..15fcb4e 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteRequest.java
@@ -24,7 +24,6 @@ import org.apache.plc4x.java.ads.api.commands.types.IndexOffset;
 import org.apache.plc4x.java.ads.api.commands.types.Length;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -58,15 +57,6 @@ public class ADSWriteRequest extends ADSAbstractRequest {
 
     private final LengthSupplier lengthSupplier;
 
-    private ADSWriteRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
-        super(amstcpHeader, amsHeader);
-        this.indexGroup = requireNonNull(indexGroup);
-        this.indexOffset = requireNonNull(indexOffset);
-        this.length = requireNonNull(length);
-        this.data = requireNonNull(data);
-        this.lengthSupplier = null;
-    }
-
     private ADSWriteRequest(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
         super(amsHeader);
         this.indexGroup = requireNonNull(indexGroup);
@@ -85,10 +75,6 @@ public class ADSWriteRequest extends ADSAbstractRequest {
         this.lengthSupplier = data;
     }
 
-    public static ADSWriteRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
-        return new ADSWriteRequest(amstcpHeader, amsHeader, indexGroup, indexOffset, length, data);
-    }
-
     public static ADSWriteRequest of(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
         return new ADSWriteRequest(amsHeader, indexGroup, indexOffset, length, data);
     }
@@ -135,7 +121,7 @@ public class ADSWriteRequest extends ADSAbstractRequest {
             return false;
         if (!getLength().equals(that.getLength()))
             return false;
-        
+
         return data.equals(that.data);
     }
 
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteResponse.java
index fc3de95..65a859b 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteResponse.java
@@ -21,7 +21,6 @@ package org.apache.plc4x.java.ads.api.commands;
 import org.apache.plc4x.java.ads.api.commands.types.Result;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Command;
@@ -40,8 +39,8 @@ public class ADSWriteResponse extends ADSAbstractResponse {
      */
     private final Result result;
 
-    private ADSWriteResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
-        super(amstcpHeader, amsHeader);
+    private ADSWriteResponse(AMSHeader amsHeader, Result result) {
+        super(amsHeader);
         this.result = requireNonNull(result);
     }
 
@@ -50,8 +49,8 @@ public class ADSWriteResponse extends ADSAbstractResponse {
         this.result = requireNonNull(result);
     }
 
-    public static ADSWriteResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
-        return new ADSWriteResponse(amstcpHeader, amsHeader, result);
+    public static ADSWriteResponse of(AMSHeader amsHeader, Result result) {
+        return new ADSWriteResponse(amsHeader, result);
     }
 
     public static ADSWriteResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java
index 4eba85d..5bbbe30 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java
@@ -21,8 +21,7 @@ package org.apache.plc4x.java.ads.api.commands;
 import io.netty.buffer.ByteBuf;
 import org.apache.plc4x.java.ads.api.generic.ADSData;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPPacket;
+import org.apache.plc4x.java.ads.api.generic.AMSPacket;
 import org.apache.plc4x.java.ads.api.generic.types.*;
 
 import static java.util.Objects.requireNonNull;
@@ -31,12 +30,12 @@ import static java.util.Objects.requireNonNull;
  * Unknown ADS Package
  */
 @ADSCommandType(Command.UNKNOWN)
-public class UnknownCommand extends AMSTCPPacket {
+public class UnknownCommand extends AMSPacket {
 
     private final ByteBuf remainingBytes;
 
-    private UnknownCommand(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, ByteBuf remainingBytes) {
-        super(amstcpHeader, amsHeader);
+    private UnknownCommand(AMSHeader amsHeader, ByteBuf remainingBytes) {
+        super(amsHeader);
         this.remainingBytes = requireNonNull(remainingBytes);
     }
 
@@ -50,8 +49,8 @@ public class UnknownCommand extends AMSTCPPacket {
         return () -> remainingBytes;
     }
 
-    public static AMSTCPPacket of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, ByteBuf remainingBytes) {
-        return new UnknownCommand(amstcpHeader, amsHeader, remainingBytes);
+    public static UnknownCommand of(AMSHeader amsHeader, ByteBuf remainingBytes) {
+        return new UnknownCommand(amsHeader, remainingBytes);
     }
 
     public static UnknownCommand of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, State stateId, Invoke invokeId, ByteBuf remainingBytes) {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSPacket.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSPacket.java
index cf84f3f..37c48e0 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSPacket.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSPacket.java
@@ -19,25 +19,81 @@
 package org.apache.plc4x.java.ads.api.generic;
 
 import io.netty.buffer.ByteBuf;
+import org.apache.plc4x.java.ads.api.commands.ADSCommandType;
+import org.apache.plc4x.java.ads.api.generic.types.*;
+import org.apache.plc4x.java.ads.api.serial.AMSSerialFrame;
+import org.apache.plc4x.java.ads.api.serial.types.FragmentNumber;
+import org.apache.plc4x.java.ads.api.tcp.AMSTCPPacket;
 import org.apache.plc4x.java.ads.api.util.ByteReadable;
 
-public class AMSPacket implements ByteReadable {
+import static java.util.Objects.requireNonNull;
 
-    private final AMSHeader amsHeader;
+public abstract class AMSPacket implements ByteReadable {
 
-    private final ADSData adsData;
+    protected final AMSHeader amsHeader;
 
-    private AMSPacket(AMSHeader amsHeader, ADSData adsData) {
+    protected AMSPacket(AMSHeader amsHeader) {
         this.amsHeader = amsHeader;
-        this.adsData = adsData;
     }
 
-    public static AMSPacket of(AMSHeader amsHeader, ADSData adsData) {
-        return new AMSPacket(amsHeader, adsData);
+    protected AMSPacket(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, State stateId, Invoke invokeId) {
+        if (!getClass().isAnnotationPresent(ADSCommandType.class)) {
+            throw new IllegalArgumentException(ADSCommandType.class + " need to be present.");
+        }
+        this.amsHeader = AMSHeader.of(
+            requireNonNull(targetAmsNetId),
+            requireNonNull(targetAmsPort),
+            requireNonNull(sourceAmsNetId),
+            requireNonNull(sourceAmsPort),
+            requireNonNull(getClass().getAnnotation(ADSCommandType.class).value()),
+            requireNonNull(stateId),
+            () -> getAdsData().getCalculatedLength(),
+            requireNonNull(AMSError.NONE),
+            requireNonNull(invokeId));
+    }
+
+    public AMSHeader getAmsHeader() {
+        return amsHeader;
+    }
+
+    public abstract ADSData getAdsData();
+
+    protected ADSData buildADSData(ByteReadable... byteReadables) {
+        return () -> buildByteBuff(byteReadables);
+    }
+
+    public AMSTCPPacket toAmstcpPacket() {
+        return AMSTCPPacket.of(this);
+    }
+
+    public AMSSerialFrame toAmsSerialFrame(byte fragmentNumber) {
+        return AMSSerialFrame.of(FragmentNumber.of(fragmentNumber), this);
     }
 
     @Override
     public ByteBuf getByteBuf() {
-        return buildByteBuff(amsHeader, adsData);
+        return buildByteBuff(amsHeader, getAdsData());
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof AMSPacket)) return false;
+
+        AMSPacket amsPacket = (AMSPacket) o;
+
+        return amsHeader.equals(amsPacket.amsHeader);
+    }
+
+    @Override
+    public int hashCode() {
+        return amsHeader.hashCode();
+    }
+
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + "{" +
+            "amsHeader=" + amsHeader +
+            '}';
     }
 }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPPacket.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPPacket.java
deleted file mode 100644
index fea4708..0000000
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPPacket.java
+++ /dev/null
@@ -1,114 +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
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
- */
-package org.apache.plc4x.java.ads.api.generic;
-
-import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.ads.api.commands.ADSCommandType;
-import org.apache.plc4x.java.ads.api.generic.types.*;
-import org.apache.plc4x.java.ads.api.util.ByteReadable;
-
-import static java.util.Objects.requireNonNull;
-
-// TODO: maybe don't let all commands extend from tcp as in serial these look different...
-public abstract class AMSTCPPacket implements ByteReadable {
-    private final AMSTCPHeader amsTcpHeader;
-
-    private final AMSHeader amsHeader;
-
-    protected AMSTCPPacket(AMSTCPHeader amsTcpHeader, AMSHeader amsHeader) {
-        this.amsTcpHeader = requireNonNull(amsTcpHeader);
-        this.amsHeader = requireNonNull(amsHeader);
-    }
-
-    protected AMSTCPPacket(AMSHeader amsHeader) {
-        // It is important that we wrap the ads data call as this will initialized in the constructor
-        // so this value will be null if we call adsData now.
-        this.amsTcpHeader = AMSTCPHeader.of(requireNonNull(amsHeader), () -> getAdsData().getCalculatedLength());
-        this.amsHeader = requireNonNull(amsHeader);
-    }
-
-    protected AMSTCPPacket(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, State stateId, Invoke invokeId) {
-        if (!getClass().isAnnotationPresent(ADSCommandType.class)) {
-            throw new IllegalArgumentException(ADSCommandType.class + " need to be present.");
-        }
-        this.amsHeader = AMSHeader.of(
-            requireNonNull(targetAmsNetId),
-            requireNonNull(targetAmsPort),
-            requireNonNull(sourceAmsNetId),
-            requireNonNull(sourceAmsPort),
-            requireNonNull(getClass().getAnnotation(ADSCommandType.class).value()),
-            requireNonNull(stateId),
-            () -> getAdsData().getCalculatedLength(),
-            requireNonNull(AMSError.NONE),
-            requireNonNull(invokeId));
-        this.amsTcpHeader = AMSTCPHeader.of(amsHeader, () -> getAdsData().getCalculatedLength());
-    }
-
-    public AMSTCPHeader getAmsTcpHeader() {
-        return amsTcpHeader;
-    }
-
-    public AMSHeader getAmsHeader() {
-        return amsHeader;
-    }
-
-    protected abstract ADSData getAdsData();
-
-    @Override
-    public ByteBuf getByteBuf() {
-        return buildByteBuff(amsTcpHeader, amsHeader, getAdsData());
-    }
-
-    protected ADSData buildADSData(ByteReadable... byteReadables) {
-        return () -> buildByteBuff(byteReadables);
-    }
-
-    public AMSPacket getAMSPacket() {
-        return AMSPacket.of(amsHeader, getAdsData());
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o)
-            return true;
-        if (!(o instanceof AMSTCPPacket))
-            return false;
-
-        AMSTCPPacket that = (AMSTCPPacket) o;
-
-        if (!amsTcpHeader.equals(that.amsTcpHeader))
-            return false;
-        return amsHeader.equals(that.amsHeader);
-    }
-
-    @Override
-    public int hashCode() {
-        int result = amsTcpHeader.hashCode();
-        result = 31 * result + amsHeader.hashCode();
-        return result;
-    }
-
-    @Override
-    public String toString() {
-        return getClass().getSimpleName() + "{" +
-            "amsTcpHeader=" + amsTcpHeader +
-            ", amsHeader=" + amsHeader +
-            '}';
-    }
-}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AMSSerialFrame.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AMSSerialFrame.java
index 3952773..3c4b97c 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AMSSerialFrame.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/serial/AMSSerialFrame.java
@@ -20,7 +20,6 @@ package org.apache.plc4x.java.ads.api.serial;
 
 import io.netty.buffer.ByteBuf;
 import org.apache.plc4x.java.ads.api.generic.AMSPacket;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPPacket;
 import org.apache.plc4x.java.ads.api.serial.types.*;
 import org.apache.plc4x.java.ads.api.util.ByteReadable;
 import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
@@ -89,12 +88,11 @@ public class AMSSerialFrame implements ByteReadable {
         this.crc = crc;
     }
 
-    private AMSSerialFrame(FragmentNumber fragmentNumber, AMSTCPPacket amstcpPacket) {
+    private AMSSerialFrame(FragmentNumber fragmentNumber, AMSPacket amsPacket) {
         this.magicCookie = MagicCookie.of(ID);
         this.transmitterAddress = TransmitterAddress.RS232_COMM_ADDRESS;
         this.receiverAddress = ReceiverAddress.RS232_COMM_ADDRESS;
         this.fragmentNumber = fragmentNumber;
-        AMSPacket amsPacket = amstcpPacket.getAMSPacket();
         long calculatedLength = amsPacket.getCalculatedLength();
         if (calculatedLength > 255) {
             throw new IllegalArgumentException("Paket length must not exceed 255");
@@ -125,8 +123,8 @@ public class AMSSerialFrame implements ByteReadable {
         return new AMSSerialFrame(magicCookie, transmitterAddress, receiverAddress, fragmentNumber, userDataLength, userData, crc);
     }
 
-    public static AMSSerialFrame of(FragmentNumber fragmentNumber, AMSTCPPacket amstcpPacket) {
-        return new AMSSerialFrame(fragmentNumber, amstcpPacket);
+    public static AMSSerialFrame of(FragmentNumber fragmentNumber, AMSPacket amsPacket) {
+        return new AMSSerialFrame(fragmentNumber, amsPacket);
     }
 
     @Override
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPHeader.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/AMSTCPHeader.java
similarity index 97%
rename from plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPHeader.java
rename to plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/AMSTCPHeader.java
index 01882c3..33e01f9 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPHeader.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/AMSTCPHeader.java
@@ -16,10 +16,10 @@
  specific language governing permissions and limitations
  under the License.
  */
-package org.apache.plc4x.java.ads.api.generic;
+package org.apache.plc4x.java.ads.api.tcp;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.ads.api.generic.types.TcpLength;
+import org.apache.plc4x.java.ads.api.tcp.types.TcpLength;
 import org.apache.plc4x.java.ads.api.util.ByteReadable;
 import org.apache.plc4x.java.ads.api.util.ByteValue;
 import org.apache.plc4x.java.ads.api.util.LengthSupplier;
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/AMSTCPPacket.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/AMSTCPPacket.java
new file mode 100644
index 0000000..d56acf5
--- /dev/null
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/AMSTCPPacket.java
@@ -0,0 +1,100 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+package org.apache.plc4x.java.ads.api.tcp;
+
+import io.netty.buffer.ByteBuf;
+import org.apache.plc4x.java.ads.api.generic.ADSData;
+import org.apache.plc4x.java.ads.api.generic.AMSHeader;
+import org.apache.plc4x.java.ads.api.generic.AMSPacket;
+import org.apache.plc4x.java.ads.api.util.ByteReadable;
+
+import static java.util.Objects.requireNonNull;
+
+public class AMSTCPPacket implements ByteReadable {
+    private final AMSTCPHeader amsTcpHeader;
+
+    private final AMSPacket amsPacket;
+
+    private AMSTCPPacket(AMSTCPHeader amsTcpHeader, AMSPacket amsPacket) {
+        this.amsTcpHeader = requireNonNull(amsTcpHeader);
+        this.amsPacket = amsPacket;
+    }
+
+    private AMSTCPPacket(AMSPacket amsPacket) {
+        this.amsPacket = amsPacket;
+        // It is important that we wrap the ads data call as this will initialized in the constructor
+        // so this value will be null if we call adsData now.
+        this.amsTcpHeader = AMSTCPHeader.of(requireNonNull(amsPacket.getAmsHeader()), () -> getAdsData().getCalculatedLength());
+    }
+
+    public AMSTCPHeader getAmsTcpHeader() {
+        return amsTcpHeader;
+    }
+
+    public AMSPacket getAmsPacket() {
+        return amsPacket;
+    }
+
+    public AMSHeader getAmsHeader() {
+        return amsPacket.getAmsHeader();
+    }
+
+    public ADSData getAdsData() {
+        return amsPacket.getAdsData();
+    }
+
+    @Override
+    public ByteBuf getByteBuf() {
+        return buildByteBuff(amsTcpHeader, amsPacket);
+    }
+
+    public static AMSTCPPacket of(AMSTCPHeader amsTcpHeader, AMSPacket amsPacket) {
+        return new AMSTCPPacket(amsTcpHeader, amsPacket);
+    }
+
+    public static AMSTCPPacket of(AMSPacket amsPacket) {
+        return new AMSTCPPacket(amsPacket);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof AMSTCPPacket)) return false;
+
+        AMSTCPPacket that = (AMSTCPPacket) o;
+
+        if (!amsTcpHeader.equals(that.amsTcpHeader)) return false;
+        return amsPacket.equals(that.amsPacket);
+    }
+
+    @Override
+    public int hashCode() {
+        int result = amsTcpHeader.hashCode();
+        result = 31 * result + amsPacket.hashCode();
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "AMSTCPPacket{" +
+            "amsTcpHeader=" + amsTcpHeader +
+            ", amsPacket=" + amsPacket +
+            '}';
+    }
+}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/types/TcpLength.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/types/TcpLength.java
similarity index 97%
rename from plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/types/TcpLength.java
rename to plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/types/TcpLength.java
index 8eaf938..7c04175 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/types/TcpLength.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/tcp/types/TcpLength.java
@@ -16,7 +16,7 @@
  specific language governing permissions and limitations
  under the License.
  */
-package org.apache.plc4x.java.ads.api.generic.types;
+package org.apache.plc4x.java.ads.api.tcp.types;
 
 import io.netty.buffer.ByteBuf;
 import org.apache.plc4x.java.ads.api.util.UnsignedIntLEByteValue;
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/ADSPlcConnection.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/ADSPlcConnection.java
index 7f770b3..2186b2b 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/ADSPlcConnection.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/ADSPlcConnection.java
@@ -25,8 +25,8 @@ import io.netty.channel.ChannelPipeline;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.model.ADSAddress;
-import org.apache.plc4x.java.ads.protocol.ADSProtocol;
-import org.apache.plc4x.java.ads.protocol.Plc4XADSProtocol;
+import org.apache.plc4x.java.ads.protocol.ADS2TcpProtocol;
+import org.apache.plc4x.java.ads.protocol.Plc4X2ADSProtocol;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.exceptions.PlcException;
@@ -94,8 +94,8 @@ public class ADSPlcConnection extends AbstractPlcConnection implements PlcReader
             protected void initChannel(Channel channel) {
                 // Build the protocol stack for communicating with the ads protocol.
                 ChannelPipeline pipeline = channel.pipeline();
-                pipeline.addLast(new Plc4XADSProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort));
-                pipeline.addLast(new ADSProtocol());
+                pipeline.addLast(new Plc4X2ADSProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort));
+                pipeline.addLast(new ADS2TcpProtocol());
             }
         };
     }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/ADSProtocol.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/ADS2TcpProtocol.java
similarity index 64%
rename from plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/ADSProtocol.java
rename to plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/ADS2TcpProtocol.java
index bf19722..a4077f5 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/ADSProtocol.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/ADS2TcpProtocol.java
@@ -24,9 +24,10 @@ import io.netty.handler.codec.MessageToMessageCodec;
 import org.apache.plc4x.java.ads.api.commands.*;
 import org.apache.plc4x.java.ads.api.commands.types.*;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPPacket;
+import org.apache.plc4x.java.ads.api.generic.AMSPacket;
 import org.apache.plc4x.java.ads.api.generic.types.*;
+import org.apache.plc4x.java.ads.api.tcp.AMSTCPHeader;
+import org.apache.plc4x.java.ads.api.tcp.types.TcpLength;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -36,13 +37,13 @@ import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
-public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
+public class ADS2TcpProtocol extends MessageToMessageCodec<ByteBuf, AMSPacket> {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(ADSProtocol.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(ADS2TcpProtocol.class);
 
-    private final ConcurrentMap<Invoke, AMSTCPPacket> requests;
+    private final ConcurrentMap<Invoke, AMSPacket> requests;
 
-    public ADSProtocol() {
+    public ADS2TcpProtocol() {
         this.requests = new ConcurrentHashMap<>();
     }
 
@@ -54,12 +55,12 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
     }
 
     @Override
-    protected void encode(ChannelHandlerContext channelHandlerContext, AMSTCPPacket amstcpPacket, List<Object> out) throws Exception {
-        Invoke invokeId = amstcpPacket.getAmsHeader().getInvokeId();
+    protected void encode(ChannelHandlerContext channelHandlerContext, AMSPacket amsPacket, List<Object> out) throws Exception {
+        Invoke invokeId = amsPacket.getAmsHeader().getInvokeId();
         if (invokeId != Invoke.NONE) {
-            requests.put(invokeId, amstcpPacket);
+            requests.put(invokeId, amsPacket);
         }
-        out.add(amstcpPacket.getByteBuf());
+        out.add(amsPacket.toAmstcpPacket().getByteBuf());
     }
 
     @SuppressWarnings("unchecked")
@@ -77,9 +78,9 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
         DataLength dataLength = DataLength.of(byteBuf);
         AMSError errorCode = AMSError.of(byteBuf);
         Invoke invoke = Invoke.of(byteBuf);
-        AMSTCPPacket correlatedAmstcpPacket = requests.remove(invoke);
-        if (correlatedAmstcpPacket != null) {
-            LOGGER.debug("Correlated packet received {}", correlatedAmstcpPacket);
+        AMSPacket correlatedAMSPacket = requests.remove(invoke);
+        if (correlatedAMSPacket != null) {
+            LOGGER.debug("Correlated packet received {}", correlatedAMSPacket);
         }
         if (dataLength.getAsLong() > Integer.MAX_VALUE) {
             byteBuf.release();
@@ -87,45 +88,46 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
         }
         ByteBuf commandBuffer = byteBuf.readBytes((int) dataLength.getAsLong());
         AMSTCPHeader amstcpHeader = AMSTCPHeader.of(packetLength);
+        LOGGER.debug("AMS TCP Header {}", amstcpHeader);
         AMSHeader amsHeader = AMSHeader.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, commandId, stateId, dataLength, errorCode, invoke);
-        final AMSTCPPacket amstcpPacket;
+        final AMSPacket amsPacket;
         switch (commandId) {
             case INVALID:
-                amstcpPacket = handleInvalidCommand(commandBuffer, amstcpHeader, amsHeader);
+                amsPacket = handleInvalidCommand(commandBuffer, amsHeader);
                 break;
             case ADS_READ_DEVICE_INFO:
-                amstcpPacket = handleADSReadDeviceInfoCommand(stateId, commandBuffer, amstcpHeader, amsHeader);
+                amsPacket = handleADSReadDeviceInfoCommand(stateId, commandBuffer, amsHeader);
                 break;
             case ADS_READ:
-                amstcpPacket = handleADSReadCommand(stateId, commandBuffer, amstcpHeader, amsHeader);
+                amsPacket = handleADSReadCommand(stateId, commandBuffer, amsHeader);
                 break;
             case ADS_WRITE:
-                amstcpPacket = handleADSWriteCommand(stateId, commandBuffer, amstcpHeader, amsHeader);
+                amsPacket = handleADSWriteCommand(stateId, commandBuffer, amsHeader);
                 break;
             case ADS_READ_STATE:
-                amstcpPacket = handleADSReadStateCommand(stateId, commandBuffer, amstcpHeader, amsHeader);
+                amsPacket = handleADSReadStateCommand(stateId, commandBuffer, amsHeader);
                 break;
             case ADS_WRITE_CONTROL:
-                amstcpPacket = handleADSWriteControlCommand(stateId, commandBuffer, amstcpHeader, amsHeader);
+                amsPacket = handleADSWriteControlCommand(stateId, commandBuffer, amsHeader);
                 break;
             case ADS_ADD_DEVICE_NOTIFICATION:
-                amstcpPacket = handleADSAddDeviceNotificationCommand(stateId, commandBuffer, amstcpHeader, amsHeader);
+                amsPacket = handleADSAddDeviceNotificationCommand(stateId, commandBuffer, amsHeader);
                 break;
             case ADS_DELETE_DEVICE_NOTIFICATION:
-                amstcpPacket = handADSDeleteDeviceNotificationCommand(stateId, commandBuffer, amstcpHeader, amsHeader);
+                amsPacket = handADSDeleteDeviceNotificationCommand(stateId, commandBuffer, amsHeader);
                 break;
             case ADS_DEVICE_NOTIFICATION:
-                amstcpPacket = handleADSDeviceNotificationCommand(stateId, commandBuffer, amstcpHeader, amsHeader);
+                amsPacket = handleADSDeviceNotificationCommand(stateId, commandBuffer, amsHeader);
                 break;
             case ADS_READ_WRITE:
-                amstcpPacket = handleADSReadWriteCommand(stateId, commandBuffer, amstcpHeader, amsHeader);
+                amsPacket = handleADSReadWriteCommand(stateId, commandBuffer, amsHeader);
                 break;
             case UNKNOWN:
             default:
-                amstcpPacket = handleUnknownCommand(commandBuffer, amstcpHeader, amsHeader);
+                amsPacket = handleUnknownCommand(commandBuffer, amsHeader);
         }
-        out.add(amstcpPacket);
-        LOGGER.trace("Set amstcpPacket {} to out", amstcpPacket);
+        out.add(amsPacket);
+        LOGGER.trace("Set AMSPacket {} to out", amsPacket);
         if (commandBuffer.readableBytes() > 0) {
             commandBuffer.release();
             byteBuf.release();
@@ -135,34 +137,32 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
         byteBuf.release();
     }
 
-    private AMSTCPPacket handleInvalidCommand(ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        AMSTCPPacket amstcpPacket;
-        amstcpPacket = UnknownCommand.of(amstcpHeader, amsHeader, commandBuffer);
-        return amstcpPacket;
+    private AMSPacket handleInvalidCommand(ByteBuf commandBuffer, AMSHeader amsHeader) {
+        return UnknownCommand.of(amsHeader, commandBuffer);
     }
 
-    private AMSTCPPacket handleADSReadDeviceInfoCommand(State stateId, ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        AMSTCPPacket amstcpPacket;
+    private AMSPacket handleADSReadDeviceInfoCommand(State stateId, ByteBuf commandBuffer, AMSHeader amsHeader) {
+        AMSPacket AMSPacket;
         if (stateId.isRequest()) {
-            amstcpPacket = ADSReadDeviceInfoRequest.of(amstcpHeader, amsHeader);
+            AMSPacket = ADSReadDeviceInfoRequest.of(amsHeader);
         } else {
             Result result = Result.of(commandBuffer);
             MajorVersion majorVersion = MajorVersion.of(commandBuffer);
             MinorVersion minorVersion = MinorVersion.of(commandBuffer);
             Version version = Version.of(commandBuffer);
             Device device = Device.of(commandBuffer);
-            amstcpPacket = ADSReadDeviceInfoResponse.of(amstcpHeader, amsHeader, result, majorVersion, minorVersion, version, device);
+            AMSPacket = ADSReadDeviceInfoResponse.of(amsHeader, result, majorVersion, minorVersion, version, device);
         }
-        return amstcpPacket;
+        return AMSPacket;
     }
 
-    private AMSTCPPacket handleADSReadCommand(State stateId, ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        AMSTCPPacket amstcpPacket;
+    private AMSPacket handleADSReadCommand(State stateId, ByteBuf commandBuffer, AMSHeader amsHeader) {
+        AMSPacket AMSPacket;
         if (stateId.isRequest()) {
             IndexGroup indexGroup = IndexGroup.of(commandBuffer);
             IndexOffset indexOffset = IndexOffset.of(commandBuffer);
             Length length = Length.of(commandBuffer);
-            amstcpPacket = ADSReadRequest.of(amstcpHeader, amsHeader, indexGroup, indexOffset, length);
+            AMSPacket = ADSReadRequest.of(amsHeader, indexGroup, indexOffset, length);
         } else {
             Result result = Result.of(commandBuffer);
             Length length = Length.of(commandBuffer);
@@ -172,13 +172,13 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
             byte[] dataToRead = new byte[(int) length.getAsLong()];
             commandBuffer.readBytes(dataToRead);
             Data data = Data.of(dataToRead);
-            amstcpPacket = ADSReadResponse.of(amstcpHeader, amsHeader, result, length, data);
+            AMSPacket = ADSReadResponse.of(amsHeader, result, length, data);
         }
-        return amstcpPacket;
+        return AMSPacket;
     }
 
-    private AMSTCPPacket handleADSWriteCommand(State stateId, ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        AMSTCPPacket amstcpPacket;
+    private AMSPacket handleADSWriteCommand(State stateId, ByteBuf commandBuffer, AMSHeader amsHeader) {
+        AMSPacket AMSPacket;
         if (stateId.isRequest()) {
             IndexGroup indexGroup = IndexGroup.of(commandBuffer);
             IndexOffset indexOffset = IndexOffset.of(commandBuffer);
@@ -189,28 +189,28 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
             byte[] dataToRead = new byte[(int) length.getAsLong()];
             commandBuffer.readBytes(dataToRead);
             Data data = Data.of(dataToRead);
-            amstcpPacket = ADSWriteRequest.of(amstcpHeader, amsHeader, indexGroup, indexOffset, length, data);
+            AMSPacket = ADSWriteRequest.of(amsHeader, indexGroup, indexOffset, length, data);
         } else {
             Result result = Result.of(commandBuffer);
-            amstcpPacket = ADSWriteResponse.of(amstcpHeader, amsHeader, result);
+            AMSPacket = ADSWriteResponse.of(amsHeader, result);
         }
-        return amstcpPacket;
+        return AMSPacket;
     }
 
 
-    private AMSTCPPacket handleADSReadStateCommand(State stateId, ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        AMSTCPPacket amstcpPacket;
+    private AMSPacket handleADSReadStateCommand(State stateId, ByteBuf commandBuffer, AMSHeader amsHeader) {
+        AMSPacket AMSPacket;
         if (stateId.isRequest()) {
-            amstcpPacket = ADSReadStateRequest.of(amstcpHeader, amsHeader);
+            AMSPacket = ADSReadStateRequest.of(amsHeader);
         } else {
             Result result = Result.of(commandBuffer);
-            amstcpPacket = ADSReadStateResponse.of(amstcpHeader, amsHeader, result);
+            AMSPacket = ADSReadStateResponse.of(amsHeader, result);
         }
-        return amstcpPacket;
+        return AMSPacket;
     }
 
-    private AMSTCPPacket handleADSWriteControlCommand(State stateId, ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        AMSTCPPacket amstcpPacket;
+    private AMSPacket handleADSWriteControlCommand(State stateId, ByteBuf commandBuffer, AMSHeader amsHeader) {
+        AMSPacket AMSPacket;
         if (stateId.isRequest()) {
             ADSState adsState = ADSState.of(commandBuffer);
             DeviceState deviceState = DeviceState.of(commandBuffer);
@@ -221,16 +221,16 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
             byte[] dataToRead = new byte[(int) length.getAsLong()];
             commandBuffer.readBytes(dataToRead);
             Data data = Data.of(dataToRead);
-            amstcpPacket = ADSWriteControlRequest.of(amstcpHeader, amsHeader, adsState, deviceState, length, data);
+            AMSPacket = ADSWriteControlRequest.of(amsHeader, adsState, deviceState, length, data);
         } else {
             Result result = Result.of(commandBuffer);
-            amstcpPacket = ADSWriteControlResponse.of(amstcpHeader, amsHeader, result);
+            AMSPacket = ADSWriteControlResponse.of(amsHeader, result);
         }
-        return amstcpPacket;
+        return AMSPacket;
     }
 
-    private AMSTCPPacket handleADSAddDeviceNotificationCommand(State stateId, ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        AMSTCPPacket amstcpPacket;
+    private AMSPacket handleADSAddDeviceNotificationCommand(State stateId, ByteBuf commandBuffer, AMSHeader amsHeader) {
+        AMSPacket AMSPacket;
         if (stateId.isRequest()) {
             IndexGroup indexGroup = IndexGroup.of(commandBuffer);
             IndexOffset indexOffset = IndexOffset.of(commandBuffer);
@@ -239,29 +239,29 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
             MaxDelay maxDelay = MaxDelay.of(commandBuffer);
             CycleTime cycleTime = CycleTime.of(commandBuffer);
             commandBuffer.skipBytes(ADSAddDeviceNotificationRequest.Reserved.NUM_BYTES);
-            amstcpPacket = ADSAddDeviceNotificationRequest.of(amstcpHeader, amsHeader, indexGroup, indexOffset, length, transmissionMode, maxDelay, cycleTime);
+            AMSPacket = ADSAddDeviceNotificationRequest.of(amsHeader, indexGroup, indexOffset, length, transmissionMode, maxDelay, cycleTime);
         } else {
             Result result = Result.of(commandBuffer);
             NotificationHandle notificationHandle = NotificationHandle.of(commandBuffer);
-            amstcpPacket = ADSAddDeviceNotificationResponse.of(amstcpHeader, amsHeader, result, notificationHandle);
+            AMSPacket = ADSAddDeviceNotificationResponse.of(amsHeader, result, notificationHandle);
         }
-        return amstcpPacket;
+        return AMSPacket;
     }
 
-    private AMSTCPPacket handADSDeleteDeviceNotificationCommand(State stateId, ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        AMSTCPPacket amstcpPacket;
+    private AMSPacket handADSDeleteDeviceNotificationCommand(State stateId, ByteBuf commandBuffer, AMSHeader amsHeader) {
+        AMSPacket AMSPacket;
         if (stateId.isRequest()) {
             NotificationHandle notificationHandle = NotificationHandle.of(commandBuffer);
-            amstcpPacket = ADSDeleteDeviceNotificationRequest.of(amstcpHeader, amsHeader, notificationHandle);
+            AMSPacket = ADSDeleteDeviceNotificationRequest.of(amsHeader, notificationHandle);
         } else {
             Result result = Result.of(commandBuffer);
-            amstcpPacket = ADSDeleteDeviceNotificationResponse.of(amstcpHeader, amsHeader, result);
+            AMSPacket = ADSDeleteDeviceNotificationResponse.of(amsHeader, result);
         }
-        return amstcpPacket;
+        return AMSPacket;
     }
 
-    private AMSTCPPacket handleADSDeviceNotificationCommand(State stateId, ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        AMSTCPPacket amstcpPacket;
+    private AMSPacket handleADSDeviceNotificationCommand(State stateId, ByteBuf commandBuffer, AMSHeader amsHeader) {
+        AMSPacket AMSPacket;
         if (stateId.isRequest()) {
             Length length = Length.of(commandBuffer);
             if (length.getAsLong() > Integer.MAX_VALUE) {
@@ -278,11 +278,11 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
                 adsStampHeaders.add(adsStampHeader);
             }
             adsDeviceNotificationBuffer.release();
-            amstcpPacket = ADSDeviceNotificationRequest.of(amstcpHeader, amsHeader, length, stamps, adsStampHeaders);
+            AMSPacket = ADSDeviceNotificationRequest.of(amsHeader, length, stamps, adsStampHeaders);
         } else {
-            amstcpPacket = UnknownCommand.of(amstcpHeader, amsHeader, commandBuffer);
+            AMSPacket = UnknownCommand.of(amsHeader, commandBuffer);
         }
-        return amstcpPacket;
+        return AMSPacket;
     }
 
     private AdsStampHeader handleStampHeader(ByteBuf adsDeviceNotificationBuffer) {
@@ -311,8 +311,8 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
         return AdsNotificationSample.of(notificationHandle, sampleSize, data);
     }
 
-    private AMSTCPPacket handleADSReadWriteCommand(State stateId, ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        AMSTCPPacket amstcpPacket;
+    private AMSPacket handleADSReadWriteCommand(State stateId, ByteBuf commandBuffer, AMSHeader amsHeader) {
+        AMSPacket AMSPacket;
         if (stateId.isRequest()) {
             IndexGroup indexGroup = IndexGroup.of(commandBuffer);
             IndexOffset indexOffset = IndexOffset.of(commandBuffer);
@@ -330,7 +330,7 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
             byte[] dataToRead = new byte[(int) readLength.getAsLong()];
             commandBuffer.readBytes(dataToRead);
             Data data = Data.of(dataToRead);
-            amstcpPacket = ADSReadWriteRequest.of(amstcpHeader, amsHeader, indexGroup, indexOffset, readLength, writeLength, data);
+            AMSPacket = ADSReadWriteRequest.of(amsHeader, indexGroup, indexOffset, readLength, writeLength, data);
         } else {
             Result result = Result.of(commandBuffer);
             Length length = Length.of(commandBuffer);
@@ -340,14 +340,14 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
             byte[] dataToRead = new byte[(int) length.getAsLong()];
             commandBuffer.readBytes(dataToRead);
             Data data = Data.of(dataToRead);
-            amstcpPacket = ADSReadWriteResponse.of(amstcpHeader, amsHeader, result, length, data);
+            AMSPacket = ADSReadWriteResponse.of(amsHeader, result, length, data);
         }
-        return amstcpPacket;
+        return AMSPacket;
     }
 
-    private AMSTCPPacket handleUnknownCommand(ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
-        AMSTCPPacket amstcpPacket;
-        amstcpPacket = UnknownCommand.of(amstcpHeader, amsHeader, commandBuffer);
-        return amstcpPacket;
+    private AMSPacket handleUnknownCommand(ByteBuf commandBuffer, AMSHeader amsHeader) {
+        AMSPacket AMSPacket;
+        AMSPacket = UnknownCommand.of(amsHeader, commandBuffer);
+        return AMSPacket;
     }
 }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4XADSProtocol.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4X2ADSProtocol.java
similarity index 91%
rename from plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4XADSProtocol.java
rename to plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4X2ADSProtocol.java
index 1870b97..d6bf03f 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4XADSProtocol.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4X2ADSProtocol.java
@@ -25,7 +25,7 @@ import org.apache.plc4x.java.ads.api.commands.ADSReadResponse;
 import org.apache.plc4x.java.ads.api.commands.ADSWriteRequest;
 import org.apache.plc4x.java.ads.api.commands.ADSWriteResponse;
 import org.apache.plc4x.java.ads.api.commands.types.*;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPPacket;
+import org.apache.plc4x.java.ads.api.generic.AMSPacket;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Invoke;
@@ -55,9 +55,9 @@ import java.util.concurrent.atomic.AtomicLong;
 import static org.apache.plc4x.java.ads.protocol.util.LittleEndianDecoder.decodeData;
 import static org.apache.plc4x.java.ads.protocol.util.LittleEndianEncoder.encodeData;
 
-public class Plc4XADSProtocol extends MessageToMessageCodec<AMSTCPPacket, PlcRequestContainer<PlcRequest, PlcResponse>> {
+public class Plc4X2ADSProtocol extends MessageToMessageCodec<AMSPacket, PlcRequestContainer<PlcRequest, PlcResponse>> {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(Plc4XADSProtocol.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(Plc4X2ADSProtocol.class);
 
     private static final AtomicLong correlationBuilder = new AtomicLong(1);
 
@@ -68,7 +68,7 @@ public class Plc4XADSProtocol extends MessageToMessageCodec<AMSTCPPacket, PlcReq
     private final AMSNetId sourceAmsNetId;
     private final AMSPort sourceAmsPort;
 
-    public Plc4XADSProtocol(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort) {
+    public Plc4X2ADSProtocol(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort) {
         this.targetAmsNetId = targetAmsNetId;
         this.targetAmsPort = targetAmsPort;
         this.sourceAmsNetId = sourceAmsNetId;
@@ -103,8 +103,8 @@ public class Plc4XADSProtocol extends MessageToMessageCodec<AMSTCPPacket, PlcReq
         IndexOffset indexOffset = IndexOffset.of(adsAddress.getIndexOffset());
         byte[] bytes = encodeData(writeRequestItem.getDatatype(), writeRequestItem.getValues().toArray());
         Data data = Data.of(bytes);
-        AMSTCPPacket amstcpPacket = ADSWriteRequest.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, data);
-        out.add(amstcpPacket);
+        AMSPacket AMSPacket = ADSWriteRequest.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, data);
+        out.add(AMSPacket);
         requests.put(invokeId.getAsLong(), msg);
     }
 
@@ -124,16 +124,16 @@ public class Plc4XADSProtocol extends MessageToMessageCodec<AMSTCPPacket, PlcReq
         IndexGroup indexGroup = IndexGroup.of(adsAddress.getIndexGroup());
         IndexOffset indexOffset = IndexOffset.of(adsAddress.getIndexOffset());
         Length length = Length.of(readRequestItem.getSize());
-        AMSTCPPacket amstcpPacket = ADSReadRequest.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, length);
-        out.add(amstcpPacket);
+        AMSPacket AMSPacket = ADSReadRequest.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, length);
+        out.add(AMSPacket);
         requests.put(invokeId.getAsLong(), msg);
     }
 
     @Override
-    protected void decode(ChannelHandlerContext channelHandlerContext, AMSTCPPacket amstcpPacket, List<Object> out) throws Exception {
-        PlcRequestContainer<PlcRequest, PlcResponse> plcRequestContainer = requests.remove(amstcpPacket.getAmsHeader().getInvokeId().getAsLong());
+    protected void decode(ChannelHandlerContext channelHandlerContext, AMSPacket AMSPacket, List<Object> out) throws Exception {
+        PlcRequestContainer<PlcRequest, PlcResponse> plcRequestContainer = requests.remove(AMSPacket.getAmsHeader().getInvokeId().getAsLong());
         if (plcRequestContainer == null) {
-            LOGGER.info("Unmapped packet received {}", amstcpPacket);
+            LOGGER.info("Unmapped packet received {}", AMSPacket);
             return;
         }
         PlcRequest request = plcRequestContainer.getRequest();
@@ -141,16 +141,16 @@ public class Plc4XADSProtocol extends MessageToMessageCodec<AMSTCPPacket, PlcReq
 
         // Handle the response to a read request.
         if (request instanceof PlcReadRequest) {
-            if (amstcpPacket instanceof ADSReadResponse) {
-                response = decodeReadResponse((ADSReadResponse) amstcpPacket, plcRequestContainer);
+            if (AMSPacket instanceof ADSReadResponse) {
+                response = decodeReadResponse((ADSReadResponse) AMSPacket, plcRequestContainer);
             } else {
-                throw new PlcProtocolException("Wrong type correlated " + amstcpPacket);
+                throw new PlcProtocolException("Wrong type correlated " + AMSPacket);
             }
         } else if (request instanceof PlcWriteRequest) {
-            if (amstcpPacket instanceof ADSWriteResponse) {
-                response = decodeWriteResponse((ADSWriteResponse) amstcpPacket, plcRequestContainer);
+            if (AMSPacket instanceof ADSWriteResponse) {
+                response = decodeWriteResponse((ADSWriteResponse) AMSPacket, plcRequestContainer);
             } else {
-                throw new PlcProtocolException("Wrong type correlated " + amstcpPacket);
+                throw new PlcProtocolException("Wrong type correlated " + AMSPacket);
             }
         }
 
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java
index ca8f415..e653f2b 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java
@@ -19,6 +19,8 @@
 package org.apache.plc4x.java.ads.api.generic;
 
 import org.apache.plc4x.java.ads.api.generic.types.Command;
+import org.apache.plc4x.java.ads.api.tcp.AMSTCPHeader;
+import org.apache.plc4x.java.ads.api.tcp.AMSTCPPacket;
 import org.apache.plc4x.java.ads.api.util.LengthSupplier;
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/GenericTypesFactoryMethodTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/GenericTypesFactoryMethodTest.java
index b3c3b14..d112d96 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/GenericTypesFactoryMethodTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/GenericTypesFactoryMethodTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.plc4x.java.ads.api.generic.types;
 
+import org.apache.plc4x.java.ads.api.tcp.types.TcpLength;
 import org.apache.plc4x.java.ads.api.util.UnsignedIntLEByteValue;
 import org.apache.plc4x.java.ads.api.util.UnsignedShortLEByteValue;
 import org.junit.Test;
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/TcpLengthTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/TcpLengthTest.java
index 30b2528..864a3bb 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/TcpLengthTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/TcpLengthTest.java
@@ -20,6 +20,7 @@ package org.apache.plc4x.java.ads.api.generic.types;
 
 
 import org.apache.commons.codec.binary.Hex;
+import org.apache.plc4x.java.ads.api.tcp.types.TcpLength;
 import org.junit.Test;
 
 import static org.apache.plc4x.java.ads.util.Junit5Backport.assertThrows;
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/ADSProtocolTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/ADS2TcpProtocolTest.java
similarity index 85%
rename from plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/ADSProtocolTest.java
rename to plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/ADS2TcpProtocolTest.java
index 0a7d3ca..c35ad9c 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/ADSProtocolTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/ADS2TcpProtocolTest.java
@@ -21,10 +21,11 @@ package org.apache.plc4x.java.ads.protocol;
 import io.netty.buffer.ByteBuf;
 import org.apache.plc4x.java.ads.api.commands.*;
 import org.apache.plc4x.java.ads.api.commands.types.*;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPPacket;
+import org.apache.plc4x.java.ads.api.generic.AMSPacket;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Invoke;
+import org.apache.plc4x.java.ads.api.tcp.AMSTCPPacket;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -44,11 +45,11 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 @RunWith(Parameterized.class)
-public class ADSProtocolTest {
+public class ADS2TcpProtocolTest {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(ADSProtocolTest.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(ADS2TcpProtocolTest.class);
 
-    private ADSProtocol SUT;
+    private ADS2TcpProtocol SUT;
 
     @Parameterized.Parameter
     public AMSTCPPacket amstcpPacket;
@@ -67,20 +68,20 @@ public class ADSProtocolTest {
         return Stream.of(
             ADSAddDeviceNotificationRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
-                IndexGroup.of(1), IndexOffset.of(1), Length.of(1), TransmissionMode.of(1), MaxDelay.of(1), CycleTime.of(1)),
+                IndexGroup.of(1), IndexOffset.of(1), Length.of(1), TransmissionMode.of(1), MaxDelay.of(1), CycleTime.of(1)).toAmstcpPacket(),
             ADSAddDeviceNotificationResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0),
                 NotificationHandle.of(0)
-            ),
+            ).toAmstcpPacket(),
             ADSDeleteDeviceNotificationRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 NotificationHandle.of(0)
-            ),
+            ).toAmstcpPacket(),
             ADSDeleteDeviceNotificationResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0)
-            ),
+            ).toAmstcpPacket(),
             ADSDeviceNotificationRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Stamps.of(1),
@@ -91,10 +92,10 @@ public class ADSProtocolTest {
                             AdsNotificationSample.of(NotificationHandle.of(0), data))
                     )
                 )
-            ),
+            ).toAmstcpPacket(),
             ADSReadDeviceInfoRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId
-            ),
+            ).toAmstcpPacket(),
             ADSReadDeviceInfoResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0),
@@ -102,57 +103,58 @@ public class ADSProtocolTest {
                 MinorVersion.of((byte) 2),
                 Version.of(3),
                 Device.of("Random DeviceId")
-            ),
+            ).toAmstcpPacket(),
             ADSReadRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 IndexGroup.of(0),
                 IndexOffset.of(0),
                 Length.of(1)
-            ),
+            ).toAmstcpPacket(),
             ADSReadResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0),
                 data
-            ),
+            ).toAmstcpPacket(),
             ADSReadStateRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId
-            ),
+            ).toAmstcpPacket(),
             ADSReadStateResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0)
-            ),
+            ).toAmstcpPacket(),
             ADSReadWriteRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 IndexGroup.of(0),
                 IndexOffset.of(0),
                 ReadLength.of(data.getCalculatedLength()),
                 data
-            ),
+            ).toAmstcpPacket(),
             ADSReadWriteResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0),
                 data
-            ),
+            ).toAmstcpPacket(),
             ADSWriteControlRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 ADSState.of(0xaffe),
                 DeviceState.of(0xaffe),
                 data
-            ),
+            ).toAmstcpPacket(),
             ADSWriteControlResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0)
-            ),
+            ).toAmstcpPacket(),
             ADSWriteRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 IndexGroup.of(0),
                 IndexOffset.of(0),
                 data
-            ),
+            ).toAmstcpPacket(),
             ADSWriteResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0)
-            )/*,
+            ).toAmstcpPacket()
+            /*,
             UnknownCommand.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, State.DEFAULT, invokeId,
                 Unpooled.wrappedBuffer(new byte[]{42})
@@ -162,15 +164,15 @@ public class ADSProtocolTest {
 
     @Before
     public void setUp() throws Exception {
-        SUT = new ADSProtocol();
+        SUT = new ADS2TcpProtocol();
         byte[] bytes = amstcpPacket.getBytes();
-        LOGGER.info("amstcpPacket:\n{} has \n{}bytes\nHexDump:\n{}", amstcpPacket, bytes.length, amstcpPacket.dump());
+        LOGGER.info("amsPacket:\n{} has \n{}bytes\nHexDump:\n{}", amstcpPacket, bytes.length, amstcpPacket.dump());
     }
 
     @Test
     public void encode() throws Exception {
         ArrayList<Object> out = new ArrayList<>();
-        SUT.encode(null, amstcpPacket, out);
+        SUT.encode(null, amstcpPacket.getAmsPacket(), out);
         assertEquals(1, out.size());
         assertThat(out, hasSize(1));
     }
@@ -185,7 +187,7 @@ public class ADSProtocolTest {
     @Test
     public void roundTrip() throws Exception {
         ArrayList<Object> outbound = new ArrayList<>();
-        SUT.encode(null, amstcpPacket, outbound);
+        SUT.encode(null, amstcpPacket.getAmsPacket(), outbound);
         assertEquals(1, outbound.size());
         assertThat(outbound, hasSize(1));
         assertThat(outbound.get(0), instanceOf(ByteBuf.class));
@@ -194,8 +196,8 @@ public class ADSProtocolTest {
         SUT.decode(null, byteBuf, inbound);
         assertEquals(1, inbound.size());
         assertThat(inbound, hasSize(1));
-        assertThat(inbound.get(0), instanceOf(AMSTCPPacket.class));
-        AMSTCPPacket inboundAmstcpPacket = (AMSTCPPacket) inbound.get(0);
-        assertThat("inbound divers from outbound", this.amstcpPacket, equalTo(inboundAmstcpPacket));
+        assertThat(inbound.get(0), instanceOf(AMSPacket.class));
+        AMSPacket inboundAmsPacket = (AMSPacket) inbound.get(0);
+        assertThat("inbound divers from outbound", this.amstcpPacket, equalTo(inboundAmsPacket.toAmstcpPacket()));
     }
 }
\ No newline at end of file
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4XADSProtocolTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4X2ADS2TcpProtocolTest.java
similarity index 92%
rename from plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4XADSProtocolTest.java
rename to plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4X2ADS2TcpProtocolTest.java
index 66abf0a..5778b47 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4XADSProtocolTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4X2ADS2TcpProtocolTest.java
@@ -25,7 +25,7 @@ import org.apache.plc4x.java.ads.api.commands.ADSWriteResponse;
 import org.apache.plc4x.java.ads.api.commands.types.Data;
 import org.apache.plc4x.java.ads.api.commands.types.Result;
 import org.apache.plc4x.java.ads.api.generic.AMSHeader;
-import org.apache.plc4x.java.ads.api.generic.AMSTCPPacket;
+import org.apache.plc4x.java.ads.api.generic.AMSPacket;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Invoke;
@@ -54,12 +54,12 @@ import static org.hamcrest.Matchers.*;
 import static org.junit.Assert.assertThat;
 
 @RunWith(Parameterized.class)
-public class Plc4XADSProtocolTest {
-    private static final Logger LOGGER = LoggerFactory.getLogger(ADSProtocolTest.class);
+public class Plc4X2ADS2TcpProtocolTest {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ADS2TcpProtocolTest.class);
 
     public static final Calendar calenderInstance = Calendar.getInstance();
 
-    private Plc4XADSProtocol SUT;
+    private Plc4X2ADSProtocol SUT;
 
     @Parameterized.Parameter
     public String payloadClazzName;
@@ -74,10 +74,10 @@ public class Plc4XADSProtocolTest {
     public String plcRequestContainerClassName;
 
     @Parameterized.Parameter(4)
-    public AMSTCPPacket amstcpPacket;
+    public AMSPacket amsPacket;
 
     @Parameterized.Parameter(5)
-    public String aMSTCPPacketClassName;
+    public String amsPacketClassName;
 
     @Parameterized.Parameters(name = "{index} Type:{0} {3} {5}")
     public static Collection<Object[]> data() {
@@ -140,7 +140,7 @@ public class Plc4XADSProtocolTest {
         AMSPort targetAmsPort = AMSPort.of(7);
         AMSNetId sourceAmsNetId = AMSNetId.of("8.9.10.11.12.13");
         AMSPort sourceAmsPort = AMSPort.of(14);
-        SUT = new Plc4XADSProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort);
+        SUT = new Plc4X2ADSProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort);
     }
 
     @Test
@@ -148,11 +148,11 @@ public class Plc4XADSProtocolTest {
         ArrayList<Object> out = new ArrayList<>();
         SUT.encode(null, plcRequestContainer, out);
         assertThat(out, hasSize(1));
-        assertThat(out.get(0), instanceOf(AMSTCPPacket.class));
-        AMSTCPPacket amstcpPacket = (AMSTCPPacket) out.get(0);
-        LOGGER.info("{}\nHexDump:\n{}", amstcpPacket, amstcpPacket.dump());
-        if (amstcpPacket instanceof ADSWriteRequest) {
-            ADSWriteRequest adsWriteRequest = (ADSWriteRequest) amstcpPacket;
+        assertThat(out.get(0), instanceOf(AMSPacket.class));
+        AMSPacket amsPacket = (AMSPacket) out.get(0);
+        LOGGER.info("{}\nHexDump:\n{}", amsPacket, amsPacket.dump());
+        if (amsPacket instanceof ADSWriteRequest) {
+            ADSWriteRequest adsWriteRequest = (ADSWriteRequest) amsPacket;
             byte[] value = adsWriteRequest.getData().getBytes();
             if (payloadClazzName.equals(Boolean.class.getSimpleName())) {
                 assertThat(value, equalTo(new byte[]{0x1}));
@@ -179,8 +179,8 @@ public class Plc4XADSProtocolTest {
         assertThat(in, hasSize(1));
         syncInvoiceId();
         ArrayList<Object> out = new ArrayList<>();
-        LOGGER.info("{}\nHexDump:\n{}", amstcpPacket, amstcpPacket.dump());
-        SUT.decode(null, amstcpPacket, out);
+        LOGGER.info("{}\nHexDump:\n{}", amsPacket, amsPacket.dump());
+        SUT.decode(null, amsPacket, out);
         assertThat(out, hasSize(1));
         assertThat(out.get(0), instanceOf(PlcRequestContainer.class));
         PlcRequestContainer<?, ?> plcRequestContainer = (PlcRequestContainer) out.get(0);
@@ -188,7 +188,7 @@ public class Plc4XADSProtocolTest {
         PlcResponse plcResponse = plcRequestContainer.getResponseFuture().get();
         ResponseItem responseItem = (ResponseItem) plcResponse.getResponseItem().get();
         LOGGER.info("ResponseItem {}", responseItem);
-        if (amstcpPacket instanceof ADSReadResponse) {
+        if (amsPacket instanceof ADSReadResponse) {
             ReadResponseItem readResponseItem = (ReadResponseItem) responseItem;
             Object value = readResponseItem.getValues().get(0);
             if (payloadClazzName.equals(Boolean.class.getSimpleName())) {
@@ -214,7 +214,7 @@ public class Plc4XADSProtocolTest {
         correlationBuilderField.setAccessible(true);
         AtomicLong correlationBuilder = (AtomicLong) correlationBuilderField.get(SUT);
 
-        AMSHeader amsHeader = amstcpPacket.getAmsHeader();
+        AMSHeader amsHeader = amsPacket.getAmsHeader();
         Field invokeIdField = amsHeader.getClass().getDeclaredField("invokeId");
         Field modifiersField = Field.class.getDeclaredField("modifiers");
         modifiersField.setAccessible(true);
diff --git a/plc4j/protocols/benchmarks/src/main/java/org/apache/plc4x/java/ads/netty/ADSProtocolBenchmark.java b/plc4j/protocols/benchmarks/src/main/java/org/apache/plc4x/java/ads/netty/ADSProtocolBenchmark.java
index 0be9a4f..fba9662 100644
--- a/plc4j/protocols/benchmarks/src/main/java/org/apache/plc4x/java/ads/netty/ADSProtocolBenchmark.java
+++ b/plc4j/protocols/benchmarks/src/main/java/org/apache/plc4x/java/ads/netty/ADSProtocolBenchmark.java
@@ -28,7 +28,7 @@ import org.apache.plc4x.java.ads.api.commands.types.*;
 import org.apache.plc4x.java.ads.api.generic.types.AMSNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
 import org.apache.plc4x.java.ads.api.generic.types.Invoke;
-import org.apache.plc4x.java.ads.protocol.ADSProtocol;
+import org.apache.plc4x.java.ads.protocol.ADS2TcpProtocol;
 import org.openjdk.jmh.annotations.*;
 import org.openjdk.jmh.infra.Blackhole;
 
@@ -39,7 +39,7 @@ public class ADSProtocolBenchmark {
 
     @State(Scope.Benchmark)
     public static class MyState {
-        ADSProtocol SUT = new ADSProtocol();
+        ADS2TcpProtocol SUT = new ADS2TcpProtocol();
         ADSWriteRequest adsWriteRequest = buildAdsWriteRequest();
         byte[] adsWriteResponse = buildADSWriteResponse();
         ADSReadRequest adsReadRequest = buildAdsReadRequest();

-- 
To stop receiving notification emails like this one, please contact
sruehl@apache.org.