You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by jf...@apache.org on 2018/11/23 09:27:16 UTC

[incubator-plc4x] 03/05: - First attempt to separate the protocol and driver parts - Split up the different levels of the S7 driver into 3 separate protocol layers

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

jfeinauer pushed a commit to branch alias-registry-for-opm
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit bf89d5763cdfaec4391b10e7520f708f75f88b6e
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Wed Nov 21 18:25:49 2018 +0100

    - First attempt to separate the protocol and driver parts
    - Split up the different levels of the S7 driver into 3 separate protocol layers
---
 examples/hello-cloud-azure/pom.xml                 |   9 +-
 examples/hello-cloud-google/pom.xml                |  37 ++++----
 examples/hello-connectivity-kafka/pom.xml          |   8 +-
 examples/hello-connectivity-mqtt/pom.xml           |  13 +--
 examples/hello-integration-edgent/pom.xml          |   4 +-
 examples/hello-opm/pom.xml                         |   8 +-
 examples/hello-storage-elasticsearch/pom.xml       |   4 +-
 examples/hello-world-plc4x/pom.xml                 |  13 +--
 integrations/apache-camel/pom.xml                  |  10 +--
 integrations/apache-edgent/pom.xml                 |   6 --
 integrations/apache-kafka/pom.xml                  |   5 --
 integrations/apache-nifi/nifi-plc4x-nar/pom.xml    |  15 ++--
 .../apache-nifi/nifi-plc4x-processors/pom.xml      |   5 --
 .../org/apache/plc4x/java/PlcDriverManager.java    |   0
 .../api/exceptions/PlcInvalidFieldException.java   |   1 +
 .../apache/plc4x/java/PlcDriverManagerTest.java    |   7 +-
 .../exceptions/PlcFieldRangeExceptionTest.java}    |  28 +++---
 .../exceptions/PlcInvalidFieldExceptionTest.java   |   8 ++
 .../plc4x/java/mock/DuplicateMockDriver.java}      |   9 +-
 .../org/apache/plc4x/java/mock/MockDriver.java     |  55 ++++++++++++
 .../apache/plc4x/java/mock/MockPlcConnection.java} |  11 +--
 .../services/org.apache.plc4x.java.spi.PlcDriver   |   0
 .../services/org.apache.plc4x.java.spi.PlcDriver   |   2 +-
 .../apache/plc4x/java/mock/DoubleMockDriver.java   |  48 -----------
 .../org/apache/plc4x/java/mock/MockConnection.java |  52 -----------
 .../org/apache/plc4x/java/mock/MockDriver.java     |  48 -----------
 .../apache/plc4x/java/mock/PlcMockDriverTest.java  |  74 ----------------
 plc4j/drivers/ads/pom.xml                          |  37 ++++++++
 plc4j/drivers/delta-v/pom.xml                      |  37 ++++++++
 plc4j/{utils/opm => drivers/ethernet-ip}/pom.xml   |  96 +++++++++++----------
 .../plc4x/java/ethernetip/EtherNetIpPlcDriver.java |   4 +-
 .../connection/BaseEtherNetIpPlcConnection.java    |   2 +-
 .../connection/EtherNetIpTcpPlcConnection.java     |   0
 .../services/org.apache.plc4x.java.spi.PlcDriver   |   0
 .../org/apache/plc4x/java/ethernetip/EnipTest.java |  24 +++---
 .../java/ethernetip/ManualPlc4XEtherNetIpTest.java |   0
 .../src/test/resources/read-attribute.pcapng       | Bin
 plc4j/drivers/modbus/pom.xml                       |  37 ++++++++
 plc4j/drivers/pom.xml                              |  44 ++++++++++
 plc4j/{protocols => drivers}/s7/pom.xml            |  93 ++++++++------------
 .../java/org/apache/plc4x/java/s7/S7PlcDriver.java |   4 +-
 .../plc4x/java/s7/connection/S7PlcConnection.java  |  46 +++++-----
 .../services/org.apache.plc4x.java.spi.PlcDriver   |   0
 .../org/apache/plc4x/java/s7/S7PlcDriverTest.java  |   0
 .../java/s7/connection/S7PlcConnectionIT.java      |   0
 .../java/s7/connection/S7PlcConnectionTests.java   |  34 ++++----
 .../java/s7/connection/S7PlcTestConnection.java    |   0
 .../java/s7/connection}/issues/PLC4X47Test.java    |   2 +-
 .../s7/connection/iso-tp-connect-response.pcap     | Bin
 .../s7/connection/s7-cpu-functions-response.pcap   | Bin
 .../java/s7/connection/s7-read-var-request.pcapng  | Bin
 .../java/s7/connection/s7-read-var-response.pcapng | Bin
 .../s7-setup-communication-response.pcap           | Bin
 .../java/s7/connection/s7-write-var-request.pcapng | Bin
 .../s7/connection/s7-write-var-response.pcapng     | Bin
 .../{protocols/test => drivers/simulated}/pom.xml  |  36 ++++----
 .../plc4x/java/simulated/SimulatedPlcDriver.java}  |  46 +++++-----
 .../connection/SimulatedPlcConnection.java}        |  40 ++++-----
 .../java/simulated/connection}/TestDevice.java     |  44 +++++-----
 .../java/simulated/connection}/TestField.java      |  38 ++++----
 .../simulated/connection}/TestFieldHandler.java    |   2 +-
 .../java/simulated/connection}/TestFieldItem.java  |   2 +-
 .../plc4x/java/simulated/connection}/TestType.java |   2 +-
 .../services/org.apache.plc4x.java.spi.PlcDriver   |  38 ++++++++
 .../java/simulated/connection}/TestDeviceTest.java |   4 +-
 plc4j/pom.xml                                      |   2 +-
 plc4j/protocols/ads/pom.xml                        |   6 --
 .../java/ads/api/commands/types/LengthTest.java    |   2 +-
 .../ads/api/commands/types/ReadLengthTest.java     |   2 +-
 .../ads/api/commands/types/SampleSizeTest.java     |   2 +-
 .../java/ads/api/commands/types/SamplesTest.java   |   2 +-
 .../ads/api/commands/types/WriteLengthTest.java    |   2 +-
 .../java/ads/api/generic/types/AmsPortTest.java    |   2 +-
 .../java/ads/api/generic/types/DataLengthTest.java |   2 +-
 .../java/ads/api/generic/types/TcpLengthTest.java  |   2 +-
 .../connection/AdsAbstractPlcConnectionTest.java   |   2 +-
 .../ads/connection/AdsConnectionFactoryTest.java   |   2 +-
 .../protocols/{ethernetip => ethernet-ip}/pom.xml  |  30 +------
 .../java/ethernetip/model/EtherNetIpField.java     |   0
 .../plc4x/java/ethernetip/netty/EnipCodec.java     |   0
 .../ethernetip/netty/Plc4XEtherNetIpProtocol.java  |   0
 .../netty/events/EtherNetIpConnectedEvent.java     |   0
 .../ethernetip/netty/util/EnipPlcFieldHandler.java |   0
 .../src/site/asciidoc/index.adoc                   |   0
 .../src/site/resources/img/WAGO_enip_exporer.png   | Bin
 plc4j/{utils/opm => protocols/iso-on-tcp}/pom.xml  |  59 ++++---------
 .../java/isoontcp/protocol}/IsoOnTcpProtocol.java  |  38 ++++----
 .../isoontcp/protocol/model/IsoOnTcpMessage.java}  |  12 +--
 .../isoontcp/protocol}/IsoOnTcpProtocolTest.java   |  41 +++++----
 plc4j/{core => protocols/iso-tp}/pom.xml           |  61 ++++++-------
 .../plc4x/java/isotp/protocol}/IsoTPProtocol.java  |  50 +++++------
 .../protocol}/events/IsoTPConnectedEvent.java      |   2 +-
 .../java/isotp/protocol}/model/IsoTPMessage.java   |   4 +-
 .../model/params/CalledTsapParameter.java          |   4 +-
 .../model/params/CallingTsapParameter.java         |   4 +-
 .../protocol}/model/params/ChecksumParameter.java  |   4 +-
 .../DisconnectAdditionalInformationParameter.java  |   4 +-
 .../isotp/protocol}/model/params/Parameter.java    |   4 +-
 .../protocol}/model/params/TpduSizeParameter.java  |   6 +-
 .../protocol}/model/params/TsapParameter.java      |   2 +-
 .../model/tpdus/ConnectionConfirmTpdu.java         |   8 +-
 .../model/tpdus/ConnectionRequestTpdu.java         |   8 +-
 .../protocol}/model/tpdus/ConnectionTpdu.java      |   8 +-
 .../isotp/protocol}/model/tpdus/CustomTpdu.java    |   6 +-
 .../java/isotp/protocol}/model/tpdus/DataTpdu.java |   6 +-
 .../model/tpdus/DisconnectConfirmTpdu.java         |   6 +-
 .../model/tpdus/DisconnectRequestTpdu.java         |   8 +-
 .../protocol}/model/tpdus/DisconnectTpdu.java      |   6 +-
 .../isotp/protocol}/model/tpdus/ErrorTpdu.java     |   8 +-
 .../java/isotp/protocol}/model/tpdus/Tpdu.java     |   6 +-
 .../isotp/protocol}/model/types/DeviceGroup.java   |   2 +-
 .../protocol}/model/types/DisconnectReason.java    |   2 +-
 .../isotp/protocol}/model/types/ParameterCode.java |   2 +-
 .../isotp/protocol}/model/types/ProtocolClass.java |   2 +-
 .../isotp/protocol}/model/types/RejectCause.java   |   2 +-
 .../java/isotp/protocol}/model/types/TpduCode.java |   2 +-
 .../java/isotp/protocol}/model/types/TpduSize.java |   2 +-
 .../java/isotp/protocol}/IsoTPProtocolTest.java    |  65 +++++++-------
 .../isotp/protocol}/model/IsoTPMessageTests.java   |  46 +++++-----
 .../protocol}/model/params/ParameterTests.java     |  44 +++++-----
 .../protocol}/model/params/TsapParameterTests.java |  42 ++++-----
 .../protocol}/model/tpdus/IsotpModelTests.java     |  48 +++++------
 .../protocol}/model/types/IsotpTypeTests.java      |  38 ++++----
 plc4j/protocols/modbus/pom.xml                     |   6 --
 .../connection/BaseModbusPlcConnectionTest.java    |   4 +-
 .../connection/ModbusConnectionFactoryTest.java    |   2 +-
 plc4j/protocols/pom.xml                            |   4 +-
 plc4j/protocols/s7/pom.xml                         |  50 +----------
 .../java/isoontcp/netty/model/IsoOnTcpMessage.java |  30 -------
 .../org/apache/plc4x/java/s7/netty/S7Protocol.java |   8 +-
 .../plc4x/java/s7/utils/S7TsapIdEncoder.java       |   2 +-
 .../org/apache/plc4x/java/netty/NettyTestBase.java |  22 -----
 .../org/apache/plc4x/java/s7/S7PlcScanner.java     |  86 ------------------
 .../org/apache/plc4x/java/s7/S7PlcTestConsole.java |  69 ---------------
 .../apache/plc4x/java/s7/S7PlcWriterSample.java    |  63 --------------
 .../plc4x/java/s7/netty/Plc4XS7ProtocolTest.java   |   3 +-
 .../apache/plc4x/java/s7/netty/S7ProtocolTest.java |   5 +-
 .../plc4x/java/s7/utils/S7TsapIdEncoderTest.java   |   2 +-
 ...spockframework.report.IReportCreator.properties |  66 ++++++++++++++
 plc4j/protocols/test/pom.xml                       |   5 --
 .../services/org.apache.plc4x.java.spi.PlcDriver   |   1 -
 plc4j/utils/connection-pool/pom.xml                |   5 --
 plc4j/utils/opm/pom.xml                            |   5 --
 143 files changed, 994 insertions(+), 1356 deletions(-)

diff --git a/examples/hello-cloud-azure/pom.xml b/examples/hello-cloud-azure/pom.xml
index 966d6ff..5439607 100644
--- a/examples/hello-cloud-azure/pom.xml
+++ b/examples/hello-cloud-azure/pom.xml
@@ -39,11 +39,6 @@
       <artifactId>plc4j-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-    </dependency>
 
     <dependency>
       <groupId>com.microsoft.azure.sdk.iot</groupId>
@@ -59,7 +54,7 @@
 
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-s7</artifactId>
+      <artifactId>plc4j-driver-s7</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency>
@@ -88,7 +83,7 @@
         <artifactId>maven-dependency-plugin</artifactId>
         <configuration>
           <usedDependencies>
-            <usedDependency>org.apache.plc4x:plc4j-protocol-s7</usedDependency>
+            <usedDependency>org.apache.plc4x:plc4j-driver-s7</usedDependency>
           </usedDependencies>
         </configuration>
       </plugin>
diff --git a/examples/hello-cloud-google/pom.xml b/examples/hello-cloud-google/pom.xml
index 7ccb311..7b874d5 100644
--- a/examples/hello-cloud-google/pom.xml
+++ b/examples/hello-cloud-google/pom.xml
@@ -33,32 +33,12 @@
     a PLC and making that available in an the Google Cloud IoT Core.
   </description>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.apache.plc4x:plc4j-protocol-s7</usedDependency>
-            <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
   <dependencies>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
       <artifactId>plc4j-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-    </dependency>
 
     <dependency>
       <groupId>org.eclipse.paho</groupId>
@@ -92,12 +72,27 @@
 
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-s7</artifactId>
+      <artifactId>plc4j-driver-s7</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency>
   </dependencies>
 
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <configuration>
+          <usedDependencies combine.children="append">
+            <usedDependency>org.apache.plc4x:plc4j-driver-s7</usedDependency>
+            <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
+          </usedDependencies>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
   <dependencyManagement>
     <dependencies>
       <dependency>
diff --git a/examples/hello-connectivity-kafka/pom.xml b/examples/hello-connectivity-kafka/pom.xml
index 1dc1852..4703b82 100644
--- a/examples/hello-connectivity-kafka/pom.xml
+++ b/examples/hello-connectivity-kafka/pom.xml
@@ -101,13 +101,13 @@
     <!-- Required driver implementation -->
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-s7</artifactId>
+      <artifactId>plc4j-driver-s7</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-test</artifactId>
+      <artifactId>plc4j-driver-simulated</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency>
@@ -151,8 +151,8 @@
         <artifactId>maven-dependency-plugin</artifactId>
         <configuration>
           <usedDependencies>
-            <usedDependency>org.apache.plc4x:plc4j-protocol-s7</usedDependency>
-            <usedDependency>org.apache.plc4x:plc4j-protocol-test</usedDependency>
+            <usedDependency>org.apache.plc4x:plc4j-driver-s7</usedDependency>
+            <usedDependency>org.apache.plc4x:plc4j-driver-simulated</usedDependency>
           </usedDependencies>
         </configuration>
       </plugin>
diff --git a/examples/hello-connectivity-mqtt/pom.xml b/examples/hello-connectivity-mqtt/pom.xml
index 57549fd..582f92e 100644
--- a/examples/hello-connectivity-mqtt/pom.xml
+++ b/examples/hello-connectivity-mqtt/pom.xml
@@ -41,11 +41,6 @@
       <artifactId>plc4j-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-    </dependency>
 
     <!-- TODO: Replace this with a release version or comment this module out before releasing. -->
     <dependency>
@@ -92,13 +87,13 @@
     <!-- Required driver implementation -->
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-s7</artifactId>
+      <artifactId>plc4j-driver-s7</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-test</artifactId>
+      <artifactId>plc4j-driver-simulated</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency>
@@ -111,8 +106,8 @@
         <artifactId>maven-dependency-plugin</artifactId>
         <configuration>
           <usedDependencies>
-            <usedDependency>org.apache.plc4x:plc4j-protocol-s7</usedDependency>
-            <usedDependency>org.apache.plc4x:plc4j-protocol-test</usedDependency>
+            <usedDependency>org.apache.plc4x:plc4j-driver-s7</usedDependency>
+            <usedDependency>org.apache.plc4x:plc4j-driver-simulated</usedDependency>
           </usedDependencies>
         </configuration>
       </plugin>
diff --git a/examples/hello-integration-edgent/pom.xml b/examples/hello-integration-edgent/pom.xml
index e627ef2..672e180 100644
--- a/examples/hello-integration-edgent/pom.xml
+++ b/examples/hello-integration-edgent/pom.xml
@@ -67,7 +67,7 @@
     <!-- Required driver implementation -->
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-s7</artifactId>
+      <artifactId>plc4j-driver-s7</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency>
@@ -84,7 +84,7 @@
         <artifactId>maven-dependency-plugin</artifactId>
         <configuration>
           <usedDependencies>
-            <usedDependency>org.apache.plc4x:plc4j-protocol-s7</usedDependency>
+            <usedDependency>org.apache.plc4x:plc4j-driver-s7</usedDependency>
           </usedDependencies>
         </configuration>
       </plugin>
diff --git a/examples/hello-opm/pom.xml b/examples/hello-opm/pom.xml
index 6433738..07d832d 100644
--- a/examples/hello-opm/pom.xml
+++ b/examples/hello-opm/pom.xml
@@ -50,13 +50,13 @@
     <!-- Required driver implementation -->
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-s7</artifactId>
+      <artifactId>plc4j-driver-s7</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-test</artifactId>
+      <artifactId>plc4j-driver-simulated</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency>
@@ -83,8 +83,8 @@
         <artifactId>maven-dependency-plugin</artifactId>
         <configuration>
           <usedDependencies combine.children="append">
-            <usedDependency>org.apache.plc4x:plc4j-protocol-s7</usedDependency>
-            <usedDependency>org.apache.plc4x:plc4j-protocol-test</usedDependency>
+            <usedDependency>org.apache.plc4x:plc4j-driver-s7</usedDependency>
+            <usedDependency>org.apache.plc4x:plc4j-driver-simulated</usedDependency>
             <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
           </usedDependencies>
         </configuration>
diff --git a/examples/hello-storage-elasticsearch/pom.xml b/examples/hello-storage-elasticsearch/pom.xml
index 5bed942..6d8856d 100644
--- a/examples/hello-storage-elasticsearch/pom.xml
+++ b/examples/hello-storage-elasticsearch/pom.xml
@@ -78,7 +78,7 @@
     <!-- Required driver implementation -->
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-s7</artifactId>
+      <artifactId>plc4j-driver-s7</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency>
@@ -105,7 +105,7 @@
         <artifactId>maven-dependency-plugin</artifactId>
         <configuration>
           <usedDependencies combine.children="append">
-            <usedDependency>org.apache.plc4x:plc4j-protocol-s7</usedDependency>
+            <usedDependency>org.apache.plc4x:plc4j-driver-s7</usedDependency>
             <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
           </usedDependencies>
         </configuration>
diff --git a/examples/hello-world-plc4x/pom.xml b/examples/hello-world-plc4x/pom.xml
index 0fdff06..c15ff1a 100644
--- a/examples/hello-world-plc4x/pom.xml
+++ b/examples/hello-world-plc4x/pom.xml
@@ -41,22 +41,17 @@
       <artifactId>plc4j-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-    </dependency>
 
     <!-- Required driver implementation -->
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-s7</artifactId>
+      <artifactId>plc4j-driver-s7</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-test</artifactId>
+      <artifactId>plc4j-driver-simulated</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency>
@@ -88,8 +83,8 @@
         <artifactId>maven-dependency-plugin</artifactId>
         <configuration>
           <usedDependencies combine.children="append">
-            <usedDependency>org.apache.plc4x:plc4j-protocol-s7</usedDependency>
-            <usedDependency>org.apache.plc4x:plc4j-protocol-test</usedDependency>
+            <usedDependency>org.apache.plc4x:plc4j-driver-s7</usedDependency>
+            <usedDependency>org.apache.plc4x:plc4j-driver-simulated</usedDependency>
             <usedDependency>org.slf4j:log4j-over-slf4j</usedDependency>
           </usedDependencies>
         </configuration>
diff --git a/integrations/apache-camel/pom.xml b/integrations/apache-camel/pom.xml
index e76173c..63dd8be 100644
--- a/integrations/apache-camel/pom.xml
+++ b/integrations/apache-camel/pom.xml
@@ -41,12 +41,6 @@
       <artifactId>plc4j-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-    <!-- need plc4j-core if we need to use PlcDriverManager -->
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-    </dependency>
 
     <dependency>
       <groupId>org.apache.camel</groupId>
@@ -94,7 +88,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-ads</artifactId>
+      <artifactId>plc4j-driver-ads</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
@@ -165,7 +159,7 @@
             <configuration>
               <failOnWarning>true</failOnWarning>
               <ignoredDependencies combine.children="append">
-                <ignoredDependency>org.apache.plc4x:plc4j-protocol-ads</ignoredDependency>
+                <ignoredDependency>org.apache.plc4x:plc4j-driver-ads</ignoredDependency>
               </ignoredDependencies>
             </configuration>
           </execution>
diff --git a/integrations/apache-edgent/pom.xml b/integrations/apache-edgent/pom.xml
index daf7c88..bc27cd6 100644
--- a/integrations/apache-edgent/pom.xml
+++ b/integrations/apache-edgent/pom.xml
@@ -41,12 +41,6 @@
       <artifactId>plc4j-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-    <!-- need plc4j-core if we need to use PlcDriverManager -->
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-    </dependency>
 
     <dependency>
       <groupId>org.apache.edgent</groupId>
diff --git a/integrations/apache-kafka/pom.xml b/integrations/apache-kafka/pom.xml
index 295f3be..a878d42 100644
--- a/integrations/apache-kafka/pom.xml
+++ b/integrations/apache-kafka/pom.xml
@@ -41,11 +41,6 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
       <groupId>org.apache.kafka</groupId>
       <artifactId>kafka-clients</artifactId>
       <version>${kafka.version}</version>
diff --git a/integrations/apache-nifi/nifi-plc4x-nar/pom.xml b/integrations/apache-nifi/nifi-plc4x-nar/pom.xml
index 7f93cbb..b00eb0d 100644
--- a/integrations/apache-nifi/nifi-plc4x-nar/pom.xml
+++ b/integrations/apache-nifi/nifi-plc4x-nar/pom.xml
@@ -42,35 +42,30 @@
       <artifactId>plc4j-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-    </dependency>
     <!-- Bundle Drivers -->
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-ads</artifactId>
+      <artifactId>plc4j-driver-ads</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-ethernetip</artifactId>
+      <artifactId>plc4j-driver-ethernet-ip</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-modbus</artifactId>
+      <artifactId>plc4j-driver-modbus</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-s7</artifactId>
+      <artifactId>plc4j-driver-s7</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-test</artifactId>
+      <artifactId>plc4j-driver-simulated</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
   </dependencies>
diff --git a/integrations/apache-nifi/nifi-plc4x-processors/pom.xml b/integrations/apache-nifi/nifi-plc4x-processors/pom.xml
index e4b17e5..48a877f 100644
--- a/integrations/apache-nifi/nifi-plc4x-processors/pom.xml
+++ b/integrations/apache-nifi/nifi-plc4x-processors/pom.xml
@@ -31,11 +31,6 @@
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-    </dependency>
-    <dependency>
       <groupId>org.apache.nifi</groupId>
       <artifactId>nifi-api</artifactId>
     </dependency>
diff --git a/plc4j/core/src/main/java/org/apache/plc4x/java/PlcDriverManager.java b/plc4j/api/src/main/java/org/apache/plc4x/java/PlcDriverManager.java
similarity index 100%
rename from plc4j/core/src/main/java/org/apache/plc4x/java/PlcDriverManager.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/PlcDriverManager.java
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcInvalidFieldException.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcInvalidFieldException.java
index f4238d3..5eba89a 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcInvalidFieldException.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcInvalidFieldException.java
@@ -46,4 +46,5 @@ public class PlcInvalidFieldException extends PlcRuntimeException {
     public String getFieldToBeParsed() {
         return fieldToBeParsed;
     }
+
 }
diff --git a/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
similarity index 93%
rename from plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
rename to plc4j/api/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
index f5f16d1..38cb8cf 100644
--- a/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
@@ -21,7 +21,7 @@ package org.apache.plc4x.java;
 import org.apache.plc4x.java.api.authentication.PlcUsernamePasswordAuthentication;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.exceptions.PlcException;
-import org.apache.plc4x.java.mock.MockConnection;
+import org.apache.plc4x.java.mock.MockPlcConnection;
 import org.apache.plc4x.test.FastTests;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -47,7 +47,8 @@ public class PlcDriverManagerTest {
     @Test
     @Category(FastTests.class)
     public void getExistingDriverTest() throws PlcException {
-        MockConnection mockConnection = (MockConnection) new PlcDriverManager().getConnection("spi-mock://some-cool-url");
+        MockPlcConnection mockConnection = (MockPlcConnection) new PlcDriverManager().getConnection("spi-mock://some-cool-url");
+
         assertThat(mockConnection.getAuthentication(), nullValue());
         assertThat(mockConnection.isConnected(), is(true));
     }
@@ -62,7 +63,7 @@ public class PlcDriverManagerTest {
     public void getExistingDriverWithAuthenticationTest() throws PlcException {
         PlcUsernamePasswordAuthentication authentication =
             new PlcUsernamePasswordAuthentication("user", "pass");
-        MockConnection mockConnection = (MockConnection) new PlcDriverManager().getConnection("spi-mock://some-cool-url", authentication);
+        MockPlcConnection mockConnection = (MockPlcConnection) new PlcDriverManager().getConnection("spi-mock://some-cool-url", authentication);
 
         assertThat(mockConnection.getAuthentication(), notNullValue());
         assertThat(mockConnection.getAuthentication(), instanceOf(PlcUsernamePasswordAuthentication.class));
diff --git a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/util/Junit5Backport.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/exceptions/PlcFieldRangeExceptionTest.java
similarity index 50%
rename from plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/util/Junit5Backport.java
rename to plc4j/api/src/test/java/org/apache/plc4x/java/api/exceptions/PlcFieldRangeExceptionTest.java
index 84e6f26..afffb5b 100644
--- a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/util/Junit5Backport.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/exceptions/PlcFieldRangeExceptionTest.java
@@ -7,7 +7,7 @@
  "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
+     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
@@ -16,26 +16,20 @@
  specific language governing permissions and limitations
  under the License.
  */
-package org.apache.plc4x.java.base.util;
 
-import static org.junit.Assert.fail;
+package org.apache.plc4x.java.api.exceptions;
 
-public class Junit5Backport {
+import org.junit.jupiter.api.Test;
 
-    public static void assertThrows(Class<? extends Exception> exception, Acceptor<? extends Exception> acceptor) {
-        try {
-            acceptor.accept();
-            fail("Expected exception " + exception + " not thrown.");
-        } catch (Exception e) {
-            if (!exception.isAssignableFrom(e.getClass())) {
-                throw new AssertionError("Unexpected exception type " + e.getClass() + ". Expected " + exception, e);
-            }
-        }
-    }
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+public class PlcFieldRangeExceptionTest {
 
-    @FunctionalInterface
-    public interface Acceptor<T extends Exception> {
-        void accept() throws T;
+    @Test
+    public void simpleStringConstructor() {
+        assertThrows(PlcFieldRangeException.class,() -> {
+            throw new PlcFieldRangeException(1, 2);
+        });
     }
 
 }
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/exceptions/PlcInvalidFieldExceptionTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/exceptions/PlcInvalidFieldExceptionTest.java
index bfbf4ae..f869626 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/exceptions/PlcInvalidFieldExceptionTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/exceptions/PlcInvalidFieldExceptionTest.java
@@ -23,6 +23,8 @@ import org.junit.jupiter.api.Test;
 
 import java.util.regex.Pattern;
 
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
 class PlcInvalidFieldExceptionTest {
@@ -48,4 +50,10 @@ class PlcInvalidFieldExceptionTest {
         });
     }
 
+    @Test
+    public void getFieldToBeParsed() {
+        PlcInvalidFieldException ex = new PlcInvalidFieldException("Pattern");
+        assertThat(ex.getFieldToBeParsed(), equalTo("Pattern"));
+    }
+
 }
\ No newline at end of file
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestType.java b/plc4j/api/src/test/java/org/apache/plc4x/java/mock/DuplicateMockDriver.java
similarity index 89%
copy from plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestType.java
copy to plc4j/api/src/test/java/org/apache/plc4x/java/mock/DuplicateMockDriver.java
index 6654bb0..c998aa2 100644
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestType.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/mock/DuplicateMockDriver.java
@@ -17,12 +17,7 @@
  under the License.
  */
 
-package org.apache.plc4x.java.test;
-
-public enum TestType {
-
-    RANDOM,
-    STATE,
-    STDOUT
+package org.apache.plc4x.java.mock;
 
+public class DuplicateMockDriver extends MockDriver {
 }
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/mock/MockDriver.java b/plc4j/api/src/test/java/org/apache/plc4x/java/mock/MockDriver.java
new file mode 100644
index 0000000..d119b42
--- /dev/null
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/mock/MockDriver.java
@@ -0,0 +1,55 @@
+/*
+ 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.mock;
+
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.authentication.PlcAuthentication;
+import org.apache.plc4x.java.spi.PlcDriver;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class MockDriver implements PlcDriver {
+
+    @Override
+    public String getProtocolCode() {
+        return "spi-mock";
+    }
+
+    @Override
+    public String getProtocolName() {
+        return "Mock Protocol Implementation";
+    }
+
+    @Override
+    public PlcConnection connect(String url) {
+        MockPlcConnection connection = mock(MockPlcConnection.class);
+        when(connection.isConnected()).thenReturn(true);
+        return connection;
+    }
+
+    @Override
+    public PlcConnection connect(String url, PlcAuthentication authentication) {
+        MockPlcConnection connection = mock(MockPlcConnection.class);
+        when(connection.isConnected()).thenReturn(true);
+        when(connection.getAuthentication()).thenReturn(authentication);
+        return connection;
+    }
+
+}
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestType.java b/plc4j/api/src/test/java/org/apache/plc4x/java/mock/MockPlcConnection.java
similarity index 75%
copy from plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestType.java
copy to plc4j/api/src/test/java/org/apache/plc4x/java/mock/MockPlcConnection.java
index 6654bb0..5258df6 100644
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestType.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/mock/MockPlcConnection.java
@@ -17,12 +17,13 @@
  under the License.
  */
 
-package org.apache.plc4x.java.test;
+package org.apache.plc4x.java.mock;
 
-public enum TestType {
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.authentication.PlcAuthentication;
 
-    RANDOM,
-    STATE,
-    STDOUT
+public interface MockPlcConnection extends PlcConnection {
+
+    PlcAuthentication getAuthentication();
 
 }
diff --git a/plc4j/core/src/test/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver b/plc4j/api/src/test/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
similarity index 100%
rename from plc4j/core/src/test/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
rename to plc4j/api/src/test/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
diff --git a/plc4j/core/src/test/resources/test/META-INF/services/org.apache.plc4x.java.spi.PlcDriver b/plc4j/api/src/test/resources/test/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
similarity index 94%
rename from plc4j/core/src/test/resources/test/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
rename to plc4j/api/src/test/resources/test/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
index e6eec9f..4211709 100644
--- a/plc4j/core/src/test/resources/test/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
+++ b/plc4j/api/src/test/resources/test/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
@@ -16,4 +16,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-org.apache.plc4x.java.mock.DoubleMockDriver
+org.apache.plc4x.java.mock.DuplicateMockDriver
diff --git a/plc4j/core/src/test/java/org/apache/plc4x/java/mock/DoubleMockDriver.java b/plc4j/core/src/test/java/org/apache/plc4x/java/mock/DoubleMockDriver.java
deleted file mode 100644
index 0a180de..0000000
--- a/plc4j/core/src/test/java/org/apache/plc4x/java/mock/DoubleMockDriver.java
+++ /dev/null
@@ -1,48 +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.mock;
-
-import org.apache.plc4x.java.spi.PlcDriver;
-import org.apache.plc4x.java.api.authentication.PlcAuthentication;
-import org.apache.plc4x.java.api.PlcConnection;
-import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-
-public class DoubleMockDriver implements PlcDriver {
-
-    @Override
-    public String getProtocolCode() {
-        return "spi-mock";
-    }
-
-    @Override
-    public String getProtocolName() {
-        return "Mock Protocol Implementation";
-    }
-
-    @Override
-    public PlcConnection connect(String url) {
-        return new PlcMockConnection(null);
-    }
-
-    @Override
-    public PlcConnection connect(String url, PlcAuthentication authentication) {
-        return new PlcMockConnection(authentication);
-    }
-
-}
diff --git a/plc4j/core/src/test/java/org/apache/plc4x/java/mock/MockConnection.java b/plc4j/core/src/test/java/org/apache/plc4x/java/mock/MockConnection.java
deleted file mode 100644
index 4662485..0000000
--- a/plc4j/core/src/test/java/org/apache/plc4x/java/mock/MockConnection.java
+++ /dev/null
@@ -1,52 +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.mock;
-
-import io.netty.channel.Channel;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelInitializer;
-import org.apache.plc4x.java.api.authentication.PlcAuthentication;
-import org.apache.plc4x.java.base.connection.NettyPlcConnection;
-import org.apache.plc4x.java.base.connection.TestChannelFactory;
-
-import java.util.concurrent.CompletableFuture;
-
-public class MockConnection extends NettyPlcConnection {
-
-    private final PlcAuthentication authentication;
-
-    MockConnection(PlcAuthentication authentication) {
-        super(new TestChannelFactory());
-        this.authentication = authentication;
-    }
-
-    @Override
-    protected ChannelHandler getChannelHandler(CompletableFuture<Void> sessionSetupCompleteFuture) {
-        return new ChannelInitializer() {
-            @Override
-            protected void initChannel(Channel channel) {
-            }
-        };
-    }
-
-    public PlcAuthentication getAuthentication() {
-        return authentication;
-    }
-
-}
diff --git a/plc4j/core/src/test/java/org/apache/plc4x/java/mock/MockDriver.java b/plc4j/core/src/test/java/org/apache/plc4x/java/mock/MockDriver.java
deleted file mode 100644
index 5e8b440..0000000
--- a/plc4j/core/src/test/java/org/apache/plc4x/java/mock/MockDriver.java
+++ /dev/null
@@ -1,48 +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.mock;
-
-import org.apache.plc4x.java.spi.PlcDriver;
-import org.apache.plc4x.java.api.authentication.PlcAuthentication;
-import org.apache.plc4x.java.api.PlcConnection;
-import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-
-public class MockDriver implements PlcDriver {
-
-    @Override
-    public String getProtocolCode() {
-        return "spi-mock";
-    }
-
-    @Override
-    public String getProtocolName() {
-        return "Mock Protocol Implementation";
-    }
-
-    @Override
-    public PlcConnection connect(String url) {
-        return new MockConnection(null);
-    }
-
-    @Override
-    public PlcConnection connect(String url, PlcAuthentication authentication) {
-        return new MockConnection(authentication);
-    }
-
-}
diff --git a/plc4j/core/src/test/java/org/apache/plc4x/java/mock/PlcMockDriverTest.java b/plc4j/core/src/test/java/org/apache/plc4x/java/mock/PlcMockDriverTest.java
deleted file mode 100644
index 532e20f..0000000
--- a/plc4j/core/src/test/java/org/apache/plc4x/java/mock/PlcMockDriverTest.java
+++ /dev/null
@@ -1,74 +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.mock;
-
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.plc4x.java.PlcDriverManager;
-import org.apache.plc4x.java.api.PlcConnection;
-import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.base.messages.items.DefaultLongFieldItem;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import static junit.framework.TestCase.assertFalse;
-import static junit.framework.TestCase.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-public class PlcMockDriverTest {
-
-    private final PlcDriverManager driverManager = new PlcDriverManager();
-
-    @Test
-    public void useMockDriver_noDevice_isNotConnected() throws Exception {
-        PlcConnection connection = driverManager.getConnection("mock:dummy");
-
-        assertFalse(connection.isConnected());
-    }
-
-    @Test
-    public void useMockDriver_deviceSet_isConnected() throws Exception {
-        PlcMockConnection connection = (PlcMockConnection) driverManager.getConnection("mock:dummy");
-        MockDevice mock = Mockito.mock(MockDevice.class);
-        connection.setDevice(mock);
-
-        assertTrue(connection.isConnected());
-    }
-
-    @Test
-    public void mockDriver_assertSimpleRequest() throws PlcConnectionException {
-        PlcMockConnection connection = (PlcMockConnection) driverManager.getConnection("mock:dummy");
-        MockDevice mock = Mockito.mock(MockDevice.class);
-        when(mock.read(any())).thenReturn(Pair.of(PlcResponseCode.OK, new DefaultLongFieldItem(1L)));
-        connection.setDevice(mock);
-
-        connection.readRequestBuilder()
-            .addItem("item1", "myPlcField")
-            .build()
-            .execute();
-
-        // Verify the call
-        verify(mock, times(1)).read(eq("myPlcField"));
-    }
-}
\ No newline at end of file
diff --git a/plc4j/drivers/ads/pom.xml b/plc4j/drivers/ads/pom.xml
new file mode 100644
index 0000000..a6f7076
--- /dev/null
+++ b/plc4j/drivers/ads/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4j-drivers</artifactId>
+    <version>0.3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4j-driver-ads</artifactId>
+  <name>PLC4J: Driver: ADS</name>
+  <description>Implementation of a PLC4X driver able to speak with Beckhoff devices using the ADS protocol.</description>
+
+  <dependencies>
+  </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/plc4j/drivers/delta-v/pom.xml b/plc4j/drivers/delta-v/pom.xml
new file mode 100644
index 0000000..b7692b6
--- /dev/null
+++ b/plc4j/drivers/delta-v/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4j-drivers</artifactId>
+    <version>0.3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4j-driver-delta-v</artifactId>
+  <name>PLC4J: Driver: DeltaV</name>
+  <description>Implementation of a PLC4X driver able to speak with devices using the DeltaV protocol.</description>
+
+  <dependencies>
+  </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/plc4j/utils/opm/pom.xml b/plc4j/drivers/ethernet-ip/pom.xml
similarity index 56%
copy from plc4j/utils/opm/pom.xml
copy to plc4j/drivers/ethernet-ip/pom.xml
index 2912674..47bd68d 100644
--- a/plc4j/utils/opm/pom.xml
+++ b/plc4j/drivers/ethernet-ip/pom.xml
@@ -8,7 +8,7 @@
   "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
+      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
@@ -22,83 +22,91 @@
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
-    <artifactId>plc4j-utils</artifactId>
     <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4j-drivers</artifactId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>plc4j-opm</artifactId>
-  <packaging>jar</packaging>
+  <artifactId>plc4j-driver-ethernet-ip</artifactId>
+  <name>PLC4J: Driver: Ethernet/IP</name>
+  <description>Implementation of a PLC4X driver able to speak with devices using the Ethernet/IP protocol.</description>
 
-  <name>PLC4J: Utils: Object PLC Mapping</name>
-  <description>Layer on top of Plc4X that enables mapping between Objects and PLCs.</description>
+  <properties>
+    <ethernetip-driver.version>1.2.0</ethernetip-driver.version>
+  </properties>
 
   <dependencies>
-    <!--Internal Dependencies-->
     <dependency>
       <groupId>org.apache.plc4x</groupId>
       <artifactId>plc4j-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
+
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
+      <artifactId>plc4j-protocol-ethernet-ip</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-
-    <!-- Utils -->
     <dependency>
-      <groupId>net.bytebuddy</groupId>
-      <artifactId>byte-buddy</artifactId>
-      <version>1.8.15</version>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-protocol-driver-base</artifactId>
+      <version>0.3.0-SNAPSHOT</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-protocol-driver-base-tcp</artifactId>
+      <version>0.3.0-SNAPSHOT</version>
     </dependency>
+
     <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-configuration2</artifactId>
+      <groupId>com.digitalpetri.enip</groupId>
+      <artifactId>cip-core</artifactId>
+      <version>${ethernetip-driver.version}</version>
     </dependency>
 
-    <!--Testing-->
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-common</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-transport</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-buffer</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>com.digitalpetri.enip</groupId>
+      <artifactId>enip-client</artifactId>
+      <version>${ethernetip-driver.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-test</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
+      <groupId>com.digitalpetri.enip</groupId>
+      <artifactId>cip-client</artifactId>
+      <version>${ethernetip-driver.version}</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <!--Currently commented out as the dependency is used "explicitly".-->
-        <!--<configuration>-->
-          <!--<usedDependencies combine.children="append">-->
-            <!--<usedDependency>org.apache.plc4x:plc4j-protocol-test</usedDependency>-->
-          <!--</usedDependencies>-->
-        <!--</configuration>-->
-      </plugin>
-    </plugins>
-  </build>
+  <repositories>
+    <repository>
+      <id>ossrh</id>
+      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+    </repository>
+  </repositories>
 
 </project>
\ No newline at end of file
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/EtherNetIpPlcDriver.java b/plc4j/drivers/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/EtherNetIpPlcDriver.java
similarity index 100%
rename from plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/EtherNetIpPlcDriver.java
rename to plc4j/drivers/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/EtherNetIpPlcDriver.java
index 47a487b..41dfc6b 100644
--- a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/EtherNetIpPlcDriver.java
+++ b/plc4j/drivers/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/EtherNetIpPlcDriver.java
@@ -18,11 +18,11 @@ under the License.
 */
 package org.apache.plc4x.java.ethernetip;
 
-import org.apache.plc4x.java.spi.PlcDriver;
-import org.apache.plc4x.java.api.authentication.PlcAuthentication;
 import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.authentication.PlcAuthentication;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.ethernetip.connection.EtherNetIpTcpPlcConnection;
+import org.apache.plc4x.java.spi.PlcDriver;
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/connection/BaseEtherNetIpPlcConnection.java b/plc4j/drivers/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/connection/BaseEtherNetIpPlcConnection.java
similarity index 100%
rename from plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/connection/BaseEtherNetIpPlcConnection.java
rename to plc4j/drivers/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/connection/BaseEtherNetIpPlcConnection.java
index 8e88331..332fd9b 100644
--- a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/connection/BaseEtherNetIpPlcConnection.java
+++ b/plc4j/drivers/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/connection/BaseEtherNetIpPlcConnection.java
@@ -23,8 +23,8 @@ import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
-import org.apache.plc4x.java.base.connection.NettyPlcConnection;
 import org.apache.plc4x.java.base.connection.ChannelFactory;
+import org.apache.plc4x.java.base.connection.NettyPlcConnection;
 import org.apache.plc4x.java.base.messages.*;
 import org.apache.plc4x.java.ethernetip.netty.util.EnipPlcFieldHandler;
 import org.slf4j.Logger;
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/connection/EtherNetIpTcpPlcConnection.java b/plc4j/drivers/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/connection/EtherNetIpTcpPlcConnection.java
similarity index 100%
rename from plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/connection/EtherNetIpTcpPlcConnection.java
rename to plc4j/drivers/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/connection/EtherNetIpTcpPlcConnection.java
diff --git a/plc4j/protocols/ethernetip/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver b/plc4j/drivers/ethernet-ip/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
similarity index 100%
rename from plc4j/protocols/ethernetip/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
rename to plc4j/drivers/ethernet-ip/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
diff --git a/plc4j/protocols/ethernetip/src/test/java/org/apache/plc4x/java/ethernetip/EnipTest.java b/plc4j/drivers/ethernet-ip/src/test/java/org/apache/plc4x/java/ethernetip/EnipTest.java
similarity index 97%
rename from plc4j/protocols/ethernetip/src/test/java/org/apache/plc4x/java/ethernetip/EnipTest.java
rename to plc4j/drivers/ethernet-ip/src/test/java/org/apache/plc4x/java/ethernetip/EnipTest.java
index 41edb06..a12f809 100644
--- a/plc4j/protocols/ethernetip/src/test/java/org/apache/plc4x/java/ethernetip/EnipTest.java
+++ b/plc4j/drivers/ethernet-ip/src/test/java/org/apache/plc4x/java/ethernetip/EnipTest.java
@@ -1,16 +1,3 @@
-package org.apache.plc4x.java.ethernetip;
-
-import com.digitalpetri.enip.EtherNetIpClientConfig;
-import com.digitalpetri.enip.cip.CipClient;
-import com.digitalpetri.enip.cip.epath.EPath;
-import com.digitalpetri.enip.cip.epath.LogicalSegment;
-import com.digitalpetri.enip.cip.epath.PortSegment;
-import com.digitalpetri.enip.cip.services.GetAttributeSingleService;
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
-
-import java.time.Duration;
-
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -29,6 +16,17 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
+package org.apache.plc4x.java.ethernetip;
+
+import com.digitalpetri.enip.EtherNetIpClientConfig;
+import com.digitalpetri.enip.cip.CipClient;
+import com.digitalpetri.enip.cip.epath.EPath;
+import com.digitalpetri.enip.cip.epath.LogicalSegment;
+import com.digitalpetri.enip.cip.epath.PortSegment;
+import com.digitalpetri.enip.cip.services.GetAttributeSingleService;
+
+import java.time.Duration;
+
 public class EnipTest {
 
     public static void main(String[] args) throws Exception {
diff --git a/plc4j/protocols/ethernetip/src/test/java/org/apache/plc4x/java/ethernetip/ManualPlc4XEtherNetIpTest.java b/plc4j/drivers/ethernet-ip/src/test/java/org/apache/plc4x/java/ethernetip/ManualPlc4XEtherNetIpTest.java
similarity index 100%
rename from plc4j/protocols/ethernetip/src/test/java/org/apache/plc4x/java/ethernetip/ManualPlc4XEtherNetIpTest.java
rename to plc4j/drivers/ethernet-ip/src/test/java/org/apache/plc4x/java/ethernetip/ManualPlc4XEtherNetIpTest.java
diff --git a/plc4j/protocols/ethernetip/src/test/resources/read-attribute.pcapng b/plc4j/drivers/ethernet-ip/src/test/resources/read-attribute.pcapng
similarity index 100%
rename from plc4j/protocols/ethernetip/src/test/resources/read-attribute.pcapng
rename to plc4j/drivers/ethernet-ip/src/test/resources/read-attribute.pcapng
diff --git a/plc4j/drivers/modbus/pom.xml b/plc4j/drivers/modbus/pom.xml
new file mode 100644
index 0000000..fad65f8
--- /dev/null
+++ b/plc4j/drivers/modbus/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4j-drivers</artifactId>
+    <version>0.3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4j-driver-modbus</artifactId>
+  <name>PLC4J: Driver: Modbus</name>
+  <description>Implementation of a PLC4X driver able to speak with devices using the Modbus protocol.</description>
+
+  <dependencies>
+  </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/plc4j/drivers/pom.xml b/plc4j/drivers/pom.xml
new file mode 100644
index 0000000..bce44a0
--- /dev/null
+++ b/plc4j/drivers/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4j</artifactId>
+    <version>0.3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4j-drivers</artifactId>
+  <packaging>pom</packaging>
+
+  <name>PLC4J: Drivers</name>
+  <description>Wrapper project for all PLC4J driver implementations.</description>
+
+  <modules>
+    <module>ads</module>
+    <module>ethernet-ip</module>
+    <module>modbus</module>
+    <module>s7</module>
+    <module>simulated</module>
+  </modules>
+
+</project>
diff --git a/plc4j/protocols/s7/pom.xml b/plc4j/drivers/s7/pom.xml
similarity index 65%
copy from plc4j/protocols/s7/pom.xml
copy to plc4j/drivers/s7/pom.xml
index dd1b82c..c26c989 100644
--- a/plc4j/protocols/s7/pom.xml
+++ b/plc4j/drivers/s7/pom.xml
@@ -1,34 +1,34 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-
-  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
+  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.
-
--->
+  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.
+  -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.plc4x</groupId>
-    <artifactId>plc4j-protocols</artifactId>
+    <artifactId>plc4j-drivers</artifactId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>plc4j-protocol-s7</artifactId>
-  <name>PLC4J: Protocol: S7</name>
+  <artifactId>plc4j-driver-s7</artifactId>
+  <name>PLC4J: Driver: S7</name>
   <description>Implementation of a PLC4X driver able to speak with S7 devices using the S7 protocol.</description>
 
   <dependencies>
@@ -37,28 +37,34 @@
       <artifactId>plc4j-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
+
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base</artifactId>
+      <artifactId>plc4j-protocol-iso-on-tcp</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base-tcp</artifactId>
+      <artifactId>plc4j-protocol-iso-tp</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
+      <artifactId>plc4j-protocol-s7</artifactId>
       <version>0.3.0-SNAPSHOT</version>
-      <scope>runtime</scope>
     </dependency>
-
     <dependency>
-      <groupId>io.netty</groupId>
-      <artifactId>netty-buffer</artifactId>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-protocol-driver-base</artifactId>
+      <version>0.3.0-SNAPSHOT</version>
     </dependency>
     <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-protocol-driver-base-tcp</artifactId>
+      <version>0.3.0-SNAPSHOT</version>
+    </dependency>
+
+    <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-common</artifactId>
     </dependency>
@@ -68,32 +74,26 @@
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
-      <artifactId>netty-codec</artifactId>
+      <artifactId>netty-buffer</artifactId>
     </dependency>
 
     <dependency>
       <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
       <artifactId>commons-configuration2</artifactId>
     </dependency>
-
     <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <scope>test</scope>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
     </dependency>
-
     <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
-      <scope>test</scope>
     </dependency>
+
     <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-protocol-driver-base-test</artifactId>
+      <version>0.3.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -106,31 +106,12 @@
       <artifactId>pcap4j-packetfactory-static</artifactId>
       <scope>test</scope>
     </dependency>
-
-    <dependency>
-      <groupId>org.spockframework</groupId>
-      <artifactId>spock-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.athaydes</groupId>
-      <artifactId>spock-reports</artifactId>
-      <version>1.6.1</version>
-      <scope>test</scope>
-    </dependency>
-
     <dependency>
       <groupId>org.apache.plc4x</groupId>
       <artifactId>plc4j-utils-test-utils</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base-test</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-      <scope>test</scope>
-    </dependency>
   </dependencies>
 
   <build>
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/S7PlcDriver.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/S7PlcDriver.java
similarity index 100%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/S7PlcDriver.java
rename to plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/S7PlcDriver.java
index 839ed30..2ee2b0f 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/S7PlcDriver.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/S7PlcDriver.java
@@ -18,11 +18,11 @@ under the License.
 */
 package org.apache.plc4x.java.s7;
 
-import org.apache.plc4x.java.spi.PlcDriver;
-import org.apache.plc4x.java.api.authentication.PlcAuthentication;
 import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.authentication.PlcAuthentication;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.s7.connection.S7PlcConnection;
+import org.apache.plc4x.java.spi.PlcDriver;
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/connection/S7PlcConnection.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/connection/S7PlcConnection.java
similarity index 90%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/connection/S7PlcConnection.java
rename to plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/connection/S7PlcConnection.java
index beadfa3..a4f5306 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/connection/S7PlcConnection.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/connection/S7PlcConnection.java
@@ -1,21 +1,21 @@
 /*
-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.
-*/
+ 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.s7.connection;
 
 import io.netty.channel.*;
@@ -33,12 +33,12 @@ import org.apache.plc4x.java.base.connection.TcpSocketChannelFactory;
 import org.apache.plc4x.java.base.events.ConnectEvent;
 import org.apache.plc4x.java.base.events.ConnectedEvent;
 import org.apache.plc4x.java.base.messages.*;
-import org.apache.plc4x.java.isoontcp.netty.IsoOnTcpProtocol;
-import org.apache.plc4x.java.isotp.netty.IsoTPProtocol;
-import org.apache.plc4x.java.isotp.netty.model.tpdus.DisconnectRequestTpdu;
-import org.apache.plc4x.java.isotp.netty.model.types.DeviceGroup;
-import org.apache.plc4x.java.isotp.netty.model.types.DisconnectReason;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduSize;
+import org.apache.plc4x.java.isoontcp.protocol.IsoOnTcpProtocol;
+import org.apache.plc4x.java.isotp.protocol.IsoTPProtocol;
+import org.apache.plc4x.java.isotp.protocol.model.tpdus.DisconnectRequestTpdu;
+import org.apache.plc4x.java.isotp.protocol.model.types.DeviceGroup;
+import org.apache.plc4x.java.isotp.protocol.model.types.DisconnectReason;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduSize;
 import org.apache.plc4x.java.s7.netty.Plc4XS7Protocol;
 import org.apache.plc4x.java.s7.netty.S7Protocol;
 import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
diff --git a/plc4j/protocols/s7/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver b/plc4j/drivers/s7/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
similarity index 100%
rename from plc4j/protocols/s7/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
rename to plc4j/drivers/s7/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcDriverTest.java b/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcDriverTest.java
similarity index 100%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcDriverTest.java
rename to plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcDriverTest.java
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionIT.java b/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionIT.java
similarity index 100%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionIT.java
rename to plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionIT.java
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java b/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java
similarity index 66%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java
rename to plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java
index 78ced2e..d4b4a22 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java
+++ b/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java
@@ -1,35 +1,35 @@
 /*
-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
+ 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
+     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.
-*/
+ 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.s7.connection;
 
 import org.apache.plc4x.java.api.exceptions.PlcUnsupportedOperationException;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduSize;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduSize;
 import org.apache.plc4x.java.s7.types.S7ControllerType;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.apache.plc4x.java.base.util.Junit5Backport.assertThrows;
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.hamcrest.core.IsNull.notNullValue;
 import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class S7PlcConnectionTests {
 
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcTestConnection.java b/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcTestConnection.java
similarity index 100%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcTestConnection.java
rename to plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcTestConnection.java
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/issues/PLC4X47Test.java b/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/connection/issues/PLC4X47Test.java
similarity index 97%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/issues/PLC4X47Test.java
rename to plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/connection/issues/PLC4X47Test.java
index 3683f83..9509f4f 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/issues/PLC4X47Test.java
+++ b/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/connection/issues/PLC4X47Test.java
@@ -17,7 +17,7 @@
  under the License.
  */
 
-package org.apache.plc4x.java.s7.issues;
+package org.apache.plc4x.java.s7.connection.issues;
 
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
diff --git a/plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/iso-tp-connect-response.pcap b/plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/iso-tp-connect-response.pcap
similarity index 100%
rename from plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/iso-tp-connect-response.pcap
rename to plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/iso-tp-connect-response.pcap
diff --git a/plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-cpu-functions-response.pcap b/plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-cpu-functions-response.pcap
similarity index 100%
rename from plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-cpu-functions-response.pcap
rename to plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-cpu-functions-response.pcap
diff --git a/plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-read-var-request.pcapng b/plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-read-var-request.pcapng
similarity index 100%
rename from plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-read-var-request.pcapng
rename to plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-read-var-request.pcapng
diff --git a/plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-read-var-response.pcapng b/plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-read-var-response.pcapng
similarity index 100%
rename from plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-read-var-response.pcapng
rename to plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-read-var-response.pcapng
diff --git a/plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-setup-communication-response.pcap b/plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-setup-communication-response.pcap
similarity index 100%
rename from plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-setup-communication-response.pcap
rename to plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-setup-communication-response.pcap
diff --git a/plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-write-var-request.pcapng b/plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-write-var-request.pcapng
similarity index 100%
rename from plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-write-var-request.pcapng
rename to plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-write-var-request.pcapng
diff --git a/plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-write-var-response.pcapng b/plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-write-var-response.pcapng
similarity index 100%
rename from plc4j/protocols/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-write-var-response.pcapng
rename to plc4j/drivers/s7/src/test/resources/org/apache/plc4x/java/s7/connection/s7-write-var-response.pcapng
diff --git a/plc4j/protocols/test/pom.xml b/plc4j/drivers/simulated/pom.xml
similarity index 52%
copy from plc4j/protocols/test/pom.xml
copy to plc4j/drivers/simulated/pom.xml
index eb761f4..5716099 100644
--- a/plc4j/protocols/test/pom.xml
+++ b/plc4j/drivers/simulated/pom.xml
@@ -1,35 +1,35 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-
-  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
+  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.
-
--->
+  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.
+  -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.plc4x</groupId>
-    <artifactId>plc4j-protocols</artifactId>
+    <artifactId>plc4j-drivers</artifactId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>plc4j-protocol-test</artifactId>
-  <name>PLC4J: Protocol: TEST</name>
-  <description>Test implementation of a PLC4X driver.</description>
+  <artifactId>plc4j-driver-simulated</artifactId>
+  <name>PLC4J: Driver: Simulated</name>
+  <description>Implementation of a PLC4X driver able to speak a simulated device.</description>
 
   <dependencies>
     <dependency>
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestPlcDriver.java b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/SimulatedPlcDriver.java
similarity index 57%
rename from plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestPlcDriver.java
rename to plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/SimulatedPlcDriver.java
index d5cec02..8bfa145 100644
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestPlcDriver.java
+++ b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/SimulatedPlcDriver.java
@@ -1,27 +1,29 @@
 /*
-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.test;
+ 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.simulated;
 
-import org.apache.plc4x.java.spi.PlcDriver;
-import org.apache.plc4x.java.api.authentication.PlcAuthentication;
 import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.authentication.PlcAuthentication;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
+import org.apache.plc4x.java.simulated.connection.SimulatedPlcConnection;
+import org.apache.plc4x.java.simulated.connection.TestDevice;
+import org.apache.plc4x.java.spi.PlcDriver;
 
 /**
  * Test driver holding its state in the client process.
@@ -30,7 +32,7 @@ import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
  * Every device contains a random value generator accessible by address {@code random}.
  * Any value can be stored into test devices, however the state will be gone when connection is closed.
  */
-public class TestPlcDriver implements PlcDriver {
+public class SimulatedPlcDriver implements PlcDriver {
 
     @Override
     public String getProtocolCode() {
@@ -50,7 +52,7 @@ public class TestPlcDriver implements PlcDriver {
             throw new PlcConnectionException("Invalid URL: no device name given.");
         }
         TestDevice device = new TestDevice(deviceName);
-        return new TestConnection(device);
+        return new SimulatedPlcConnection(device);
     }
 
     @Override
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestConnection.java b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedPlcConnection.java
similarity index 79%
rename from plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestConnection.java
rename to plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedPlcConnection.java
index 50ef026..68969f2 100644
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestConnection.java
+++ b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedPlcConnection.java
@@ -1,22 +1,22 @@
 /*
-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.test;
+ 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.simulated.connection;
 
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
@@ -38,11 +38,11 @@ import java.util.concurrent.CompletableFuture;
  * Connection to a test device.
  * This class is not thread-safe.
  */
-class TestConnection extends AbstractPlcConnection implements PlcReader, PlcWriter {
+public class SimulatedPlcConnection extends AbstractPlcConnection implements PlcReader, PlcWriter {
     private final TestDevice device;
     private boolean connected = false;
 
-    TestConnection(TestDevice device) {
+    public SimulatedPlcConnection(TestDevice device) {
         this.device = device;
     }
 
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestDevice.java b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestDevice.java
similarity index 73%
rename from plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestDevice.java
rename to plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestDevice.java
index c4a4716..e94cc6a 100644
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestDevice.java
+++ b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestDevice.java
@@ -1,22 +1,22 @@
 /*
-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.test;
+ 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.simulated.connection;
 
 import org.apache.plc4x.java.base.messages.items.BaseDefaultFieldItem;
 
@@ -26,17 +26,17 @@ import java.util.*;
  * Test device storing its state in memory.
  * Values are stored in a HashMap.
  */
-class TestDevice {
+public class TestDevice {
 
     private final Random random = new Random();
     private final String name;
     private final Map<TestField, BaseDefaultFieldItem> state = new HashMap<>();
 
-    TestDevice(String name) {
+    public TestDevice(String name) {
         this.name = name;
     }
 
-    Optional<BaseDefaultFieldItem> get(TestField field) {
+    public Optional<BaseDefaultFieldItem> get(TestField field) {
         Objects.requireNonNull(field);
         switch(field.getType()) {
             case STATE:
@@ -49,7 +49,7 @@ class TestDevice {
         throw new IllegalArgumentException("Unsupported field type: " + field.getType().name());
     }
 
-    void set(TestField field, BaseDefaultFieldItem value) {
+    public void set(TestField field, BaseDefaultFieldItem value) {
         Objects.requireNonNull(field);
         switch (field.getType()) {
             case STATE:
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestField.java b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestField.java
similarity index 74%
rename from plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestField.java
rename to plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestField.java
index 89b85b2..619ff2b 100644
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestField.java
+++ b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestField.java
@@ -1,22 +1,22 @@
 /*
-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.test;
+ 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.simulated.connection;
 
 import org.apache.commons.text.WordUtils;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
@@ -30,7 +30,7 @@ import java.util.regex.Pattern;
 /**
  * Test address for accessing values in virtual devices.
  */
-class TestField implements PlcField {
+public class TestField implements PlcField {
 
     private static final Logger logger = LoggerFactory.getLogger(TestField.class);
 
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldHandler.java b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestFieldHandler.java
similarity index 99%
rename from plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldHandler.java
rename to plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestFieldHandler.java
index 4452656..329a28e 100644
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldHandler.java
+++ b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestFieldHandler.java
@@ -17,7 +17,7 @@
  under the License.
  */
 
-package org.apache.plc4x.java.test;
+package org.apache.plc4x.java.simulated.connection;
 
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldItem.java b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestFieldItem.java
similarity index 95%
rename from plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldItem.java
rename to plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestFieldItem.java
index a040a6d..230b7b7 100644
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestFieldItem.java
+++ b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestFieldItem.java
@@ -17,7 +17,7 @@
  under the License.
  */
 
-package org.apache.plc4x.java.test;
+package org.apache.plc4x.java.simulated.connection;
 
 import org.apache.plc4x.java.base.messages.items.BaseDefaultFieldItem;
 
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestType.java b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestType.java
similarity index 94%
copy from plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestType.java
copy to plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestType.java
index 6654bb0..d0d8d43 100644
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestType.java
+++ b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/TestType.java
@@ -17,7 +17,7 @@
  under the License.
  */
 
-package org.apache.plc4x.java.test;
+package org.apache.plc4x.java.simulated.connection;
 
 public enum TestType {
 
diff --git a/plc4j/drivers/simulated/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver b/plc4j/drivers/simulated/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
new file mode 100644
index 0000000..37f9038
--- /dev/null
+++ b/plc4j/drivers/simulated/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
@@ -0,0 +1,38 @@
+#
+# 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.
+#
+
+#
+# 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.
+#
+org.apache.plc4x.java.simulated.SimulatedPlcDriver
diff --git a/plc4j/protocols/test/src/test/java/org/apache/plc4x/java/test/TestDeviceTest.java b/plc4j/drivers/simulated/src/test/java/org/apache/plc4x/java/simulated/connection/TestDeviceTest.java
similarity index 94%
rename from plc4j/protocols/test/src/test/java/org/apache/plc4x/java/test/TestDeviceTest.java
rename to plc4j/drivers/simulated/src/test/java/org/apache/plc4x/java/simulated/connection/TestDeviceTest.java
index 9038e46..a4f2703 100644
--- a/plc4j/protocols/test/src/test/java/org/apache/plc4x/java/test/TestDeviceTest.java
+++ b/plc4j/drivers/simulated/src/test/java/org/apache/plc4x/java/simulated/connection/TestDeviceTest.java
@@ -7,7 +7,7 @@
  "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
+     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
@@ -16,7 +16,7 @@
  specific language governing permissions and limitations
  under the License.
  */
-package org.apache.plc4x.java.test;
+package org.apache.plc4x.java.simulated.connection;
 
 import org.apache.plc4x.java.base.messages.items.BaseDefaultFieldItem;
 import org.apache.plc4x.java.base.messages.items.DefaultLongFieldItem;
diff --git a/plc4j/pom.xml b/plc4j/pom.xml
index 52f446b..f3b8906 100644
--- a/plc4j/pom.xml
+++ b/plc4j/pom.xml
@@ -35,7 +35,7 @@
 
   <modules>
     <module>api</module>
-    <module>core</module>
+    <module>drivers</module>
     <module>protocols</module>
     <module>utils</module>
   </modules>
diff --git a/plc4j/protocols/ads/pom.xml b/plc4j/protocols/ads/pom.xml
index 6ab84a7..cc64139 100644
--- a/plc4j/protocols/ads/pom.xml
+++ b/plc4j/protocols/ads/pom.xml
@@ -53,12 +53,6 @@
       <artifactId>plc4j-protocol-driver-base-serial</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-      <scope>runtime</scope>
-    </dependency>
 
     <dependency>
       <groupId>io.netty</groupId>
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/LengthTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/LengthTest.java
index a982c35..63c0597 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/LengthTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/LengthTest.java
@@ -21,10 +21,10 @@ package org.apache.plc4x.java.ads.api.commands.types;
 import org.apache.commons.codec.binary.Hex;
 import org.junit.Test;
 
-import static org.apache.plc4x.java.base.util.Junit5Backport.assertThrows;
 import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class LengthTest {
 
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/ReadLengthTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/ReadLengthTest.java
index 746b303..0cc21dd 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/ReadLengthTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/ReadLengthTest.java
@@ -21,10 +21,10 @@ package org.apache.plc4x.java.ads.api.commands.types;
 import org.apache.commons.codec.binary.Hex;
 import org.junit.Test;
 
-import static org.apache.plc4x.java.base.util.Junit5Backport.assertThrows;
 import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 
 public class ReadLengthTest {
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/SampleSizeTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/SampleSizeTest.java
index 64d193e..edbd603 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/SampleSizeTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/SampleSizeTest.java
@@ -21,10 +21,10 @@ package org.apache.plc4x.java.ads.api.commands.types;
 import org.apache.commons.codec.binary.Hex;
 import org.junit.Test;
 
-import static org.apache.plc4x.java.base.util.Junit5Backport.assertThrows;
 import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class SampleSizeTest {
 
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/SamplesTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/SamplesTest.java
index 10633f2..9c27fc9 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/SamplesTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/SamplesTest.java
@@ -21,10 +21,10 @@ package org.apache.plc4x.java.ads.api.commands.types;
 import org.apache.commons.codec.binary.Hex;
 import org.junit.Test;
 
-import static org.apache.plc4x.java.base.util.Junit5Backport.assertThrows;
 import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class SamplesTest {
 
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/WriteLengthTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/WriteLengthTest.java
index b4b28c1..2964f55 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/WriteLengthTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/types/WriteLengthTest.java
@@ -21,10 +21,10 @@ package org.apache.plc4x.java.ads.api.commands.types;
 import org.apache.commons.codec.binary.Hex;
 import org.junit.Test;
 
-import static org.apache.plc4x.java.base.util.Junit5Backport.assertThrows;
 import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 
 public class WriteLengthTest {
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/AmsPortTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/AmsPortTest.java
index f37be58..a61b3cf 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/AmsPortTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/AmsPortTest.java
@@ -21,9 +21,9 @@ package org.apache.plc4x.java.ads.api.generic.types;
 import org.apache.commons.codec.binary.Hex;
 import org.junit.Test;
 
-import static org.apache.plc4x.java.base.util.Junit5Backport.assertThrows;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 
 public class AmsPortTest {
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/DataLengthTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/DataLengthTest.java
index fac0fca..0bcb618 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/DataLengthTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/types/DataLengthTest.java
@@ -21,10 +21,10 @@ package org.apache.plc4x.java.ads.api.generic.types;
 import org.apache.commons.codec.binary.Hex;
 import org.junit.Test;
 
-import static org.apache.plc4x.java.base.util.Junit5Backport.assertThrows;
 import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 
 public class DataLengthTest {
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 4aa2cbd..a840ada 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
@@ -23,10 +23,10 @@ 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.base.util.Junit5Backport.assertThrows;
 import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 
 public class TcpLengthTest {
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnectionTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnectionTest.java
index c2f30cc..d20df92 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnectionTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnectionTest.java
@@ -52,8 +52,8 @@ import java.util.Map;
 import java.util.Queue;
 import java.util.concurrent.*;
 
-import static org.apache.plc4x.java.base.util.Junit5Backport.assertThrows;
 import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.Mockito.*;
 
 @SuppressWarnings("unchecked")
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsConnectionFactoryTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsConnectionFactoryTest.java
index 82b4d38..0fdd0c0 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsConnectionFactoryTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsConnectionFactoryTest.java
@@ -32,9 +32,9 @@ import org.mockito.junit.MockitoJUnitRunner;
 
 import java.net.InetAddress;
 
-import static org.apache.plc4x.java.base.util.Junit5Backport.assertThrows;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 @RunWith(MockitoJUnitRunner.class)
 public class AdsConnectionFactoryTest {
diff --git a/plc4j/protocols/ethernetip/pom.xml b/plc4j/protocols/ethernet-ip/pom.xml
similarity index 80%
rename from plc4j/protocols/ethernetip/pom.xml
rename to plc4j/protocols/ethernet-ip/pom.xml
index 05f0eb7..70d46b3 100644
--- a/plc4j/protocols/ethernetip/pom.xml
+++ b/plc4j/protocols/ethernet-ip/pom.xml
@@ -27,7 +27,7 @@
     <version>0.3.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>plc4j-protocol-ethernetip</artifactId>
+  <artifactId>plc4j-protocol-ethernet-ip</artifactId>
   <name>PLC4J: Protocol: Ethernet/IP</name>
   <description>Implementation of a PLC4X driver able to speak with devices using the Ethernet/IP protocol.
   </description>
@@ -47,18 +47,6 @@
       <artifactId>plc4j-protocol-driver-base</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base-tcp</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-      <scope>test</scope>
-    </dependency>
 
     <dependency>
       <groupId>com.digitalpetri.enip</groupId>
@@ -70,18 +58,6 @@
       <artifactId>enip-core</artifactId>
       <version>${ethernetip-driver.version}</version>
     </dependency>
-    <dependency>
-      <groupId>com.digitalpetri.enip</groupId>
-      <artifactId>enip-client</artifactId>
-      <version>${ethernetip-driver.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.digitalpetri.enip</groupId>
-      <artifactId>cip-client</artifactId>
-      <version>${ethernetip-driver.version}</version>
-      <scope>test</scope>
-    </dependency>
 
     <dependency>
       <groupId>io.netty</groupId>
@@ -93,10 +69,6 @@
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
-      <artifactId>netty-common</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.netty</groupId>
       <artifactId>netty-transport</artifactId>
     </dependency>
 
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/model/EtherNetIpField.java b/plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/model/EtherNetIpField.java
similarity index 100%
rename from plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/model/EtherNetIpField.java
rename to plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/model/EtherNetIpField.java
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/EnipCodec.java b/plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/netty/EnipCodec.java
similarity index 100%
rename from plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/EnipCodec.java
rename to plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/netty/EnipCodec.java
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java b/plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java
similarity index 100%
rename from plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java
rename to plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/events/EtherNetIpConnectedEvent.java b/plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/netty/events/EtherNetIpConnectedEvent.java
similarity index 100%
rename from plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/events/EtherNetIpConnectedEvent.java
rename to plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/netty/events/EtherNetIpConnectedEvent.java
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/util/EnipPlcFieldHandler.java b/plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/netty/util/EnipPlcFieldHandler.java
similarity index 100%
rename from plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/util/EnipPlcFieldHandler.java
rename to plc4j/protocols/ethernet-ip/src/main/java/org/apache/plc4x/java/ethernetip/netty/util/EnipPlcFieldHandler.java
diff --git a/plc4j/protocols/ethernetip/src/site/asciidoc/index.adoc b/plc4j/protocols/ethernet-ip/src/site/asciidoc/index.adoc
similarity index 100%
rename from plc4j/protocols/ethernetip/src/site/asciidoc/index.adoc
rename to plc4j/protocols/ethernet-ip/src/site/asciidoc/index.adoc
diff --git a/plc4j/protocols/ethernetip/src/site/resources/img/WAGO_enip_exporer.png b/plc4j/protocols/ethernet-ip/src/site/resources/img/WAGO_enip_exporer.png
similarity index 100%
rename from plc4j/protocols/ethernetip/src/site/resources/img/WAGO_enip_exporer.png
rename to plc4j/protocols/ethernet-ip/src/site/resources/img/WAGO_enip_exporer.png
diff --git a/plc4j/utils/opm/pom.xml b/plc4j/protocols/iso-on-tcp/pom.xml
similarity index 55%
copy from plc4j/utils/opm/pom.xml
copy to plc4j/protocols/iso-on-tcp/pom.xml
index 2912674..78e909b 100644
--- a/plc4j/utils/opm/pom.xml
+++ b/plc4j/protocols/iso-on-tcp/pom.xml
@@ -8,7 +8,7 @@
   "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
+      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
@@ -22,19 +22,16 @@
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
-    <artifactId>plc4j-utils</artifactId>
     <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4j-protocols</artifactId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>plc4j-opm</artifactId>
-  <packaging>jar</packaging>
-
-  <name>PLC4J: Utils: Object PLC Mapping</name>
-  <description>Layer on top of Plc4X that enables mapping between Objects and PLCs.</description>
+  <artifactId>plc4j-protocol-iso-on-tcp</artifactId>
+  <name>PLC4J: Protocol: ISO on TCP</name>
+  <description>Implementation of the ISO on TCP protocol layer.</description>
 
   <dependencies>
-    <!--Internal Dependencies-->
     <dependency>
       <groupId>org.apache.plc4x</groupId>
       <artifactId>plc4j-api</artifactId>
@@ -42,63 +39,37 @@
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
+      <artifactId>plc4j-protocol-driver-base</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
 
-    <!-- Utils -->
-    <dependency>
-      <groupId>net.bytebuddy</groupId>
-      <artifactId>byte-buddy</artifactId>
-      <version>1.8.15</version>
-    </dependency>
     <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-buffer</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-configuration2</artifactId>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-transport</artifactId>
     </dependency>
 
-    <!--Testing-->
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-core</artifactId>
       <scope>test</scope>
     </dependency>
+
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
       <scope>test</scope>
     </dependency>
+
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-test</artifactId>
+      <artifactId>plc4j-utils-test-utils</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <!--Currently commented out as the dependency is used "explicitly".-->
-        <!--<configuration>-->
-          <!--<usedDependencies combine.children="append">-->
-            <!--<usedDependency>org.apache.plc4x:plc4j-protocol-test</usedDependency>-->
-          <!--</usedDependencies>-->
-        <!--</configuration>-->
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
\ No newline at end of file
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isoontcp/netty/IsoOnTcpProtocol.java b/plc4j/protocols/iso-on-tcp/src/main/java/org/apache/plc4x/java/isoontcp/protocol/IsoOnTcpProtocol.java
similarity index 82%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isoontcp/netty/IsoOnTcpProtocol.java
rename to plc4j/protocols/iso-on-tcp/src/main/java/org/apache/plc4x/java/isoontcp/protocol/IsoOnTcpProtocol.java
index 1c9a1fe..32648fa 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isoontcp/netty/IsoOnTcpProtocol.java
+++ b/plc4j/protocols/iso-on-tcp/src/main/java/org/apache/plc4x/java/isoontcp/protocol/IsoOnTcpProtocol.java
@@ -1,22 +1,22 @@
 /*
-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.isoontcp.netty;
+ 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.isoontcp.protocol;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufUtil;
@@ -24,7 +24,7 @@ import io.netty.buffer.Unpooled;
 import io.netty.channel.ChannelHandlerContext;
 import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
 import org.apache.plc4x.java.base.PlcMessageToMessageCodec;
-import org.apache.plc4x.java.isoontcp.netty.model.IsoOnTcpMessage;
+import org.apache.plc4x.java.isoontcp.protocol.model.IsoOnTcpMessage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestType.java b/plc4j/protocols/iso-on-tcp/src/main/java/org/apache/plc4x/java/isoontcp/protocol/model/IsoOnTcpMessage.java
similarity index 73%
rename from plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestType.java
rename to plc4j/protocols/iso-on-tcp/src/main/java/org/apache/plc4x/java/isoontcp/protocol/model/IsoOnTcpMessage.java
index 6654bb0..1500d80 100644
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/test/TestType.java
+++ b/plc4j/protocols/iso-on-tcp/src/main/java/org/apache/plc4x/java/isoontcp/protocol/model/IsoOnTcpMessage.java
@@ -16,13 +16,15 @@
  specific language governing permissions and limitations
  under the License.
  */
+package org.apache.plc4x.java.isoontcp.protocol.model;
 
-package org.apache.plc4x.java.test;
+import io.netty.buffer.ByteBuf;
+import org.apache.plc4x.java.base.messages.PlcRawMessage;
 
-public enum TestType {
+public class IsoOnTcpMessage extends PlcRawMessage {
 
-    RANDOM,
-    STATE,
-    STDOUT
+    public IsoOnTcpMessage(ByteBuf userData) {
+        super(userData);
+    }
 
 }
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isoontcp/netty/IsoOnTcpProtocolTest.java b/plc4j/protocols/iso-on-tcp/src/test/java/org/apache/plc4x/java/isoontcp/protocol/IsoOnTcpProtocolTest.java
similarity index 86%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isoontcp/netty/IsoOnTcpProtocolTest.java
rename to plc4j/protocols/iso-on-tcp/src/test/java/org/apache/plc4x/java/isoontcp/protocol/IsoOnTcpProtocolTest.java
index b2ae4b2..8b158e4 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isoontcp/netty/IsoOnTcpProtocolTest.java
+++ b/plc4j/protocols/iso-on-tcp/src/test/java/org/apache/plc4x/java/isoontcp/protocol/IsoOnTcpProtocolTest.java
@@ -1,22 +1,22 @@
 /*
-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.isoontcp.netty;
+ 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.isoontcp.protocol;
 
 import ch.qos.logback.classic.Level;
 import ch.qos.logback.classic.Logger;
@@ -26,8 +26,7 @@ import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import io.netty.channel.embedded.EmbeddedChannel;
 import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
-import org.apache.plc4x.java.isoontcp.netty.model.IsoOnTcpMessage;
-import org.apache.plc4x.java.netty.NettyTestBase;
+import org.apache.plc4x.java.isoontcp.protocol.model.IsoOnTcpMessage;
 import org.apache.plc4x.test.FastTests;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -42,7 +41,7 @@ import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.*;
 
 
-public class IsoOnTcpProtocolTest extends NettyTestBase {
+public class IsoOnTcpProtocolTest {
 
     @Test
     @Category(FastTests.class)
diff --git a/plc4j/core/pom.xml b/plc4j/protocols/iso-tp/pom.xml
similarity index 51%
rename from plc4j/core/pom.xml
rename to plc4j/protocols/iso-tp/pom.xml
index 26b6154..c6eec35 100644
--- a/plc4j/core/pom.xml
+++ b/plc4j/protocols/iso-tp/pom.xml
@@ -1,35 +1,35 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-
-  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
+  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.
-
--->
+  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.
+  -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
     <groupId>org.apache.plc4x</groupId>
-    <artifactId>plc4j</artifactId>
+    <artifactId>plc4j-protocols</artifactId>
     <version>0.3.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>plc4j-core</artifactId>
-  <name>PLC4J: Core</name>
-  <description>Implementation of the core PLC4J system containing the DriverManger.</description>
+  <artifactId>plc4j-protocol-iso-tp</artifactId>
+  <name>PLC4J: Protocol: ISO TP</name>
+  <description>Implementation of the ISO Transport Protocol layer.</description>
 
   <dependencies>
     <dependency>
@@ -37,33 +37,36 @@
       <artifactId>plc4j-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-utils-test-utils</artifactId>
+      <artifactId>plc4j-protocol-driver-base</artifactId>
       <version>0.3.0-SNAPSHOT</version>
-      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base</artifactId>
+      <artifactId>plc4j-protocol-iso-on-tcp</artifactId>
       <version>0.3.0-SNAPSHOT</version>
-      <scope>test</scope>
     </dependency>
+
     <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base-test</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-      <scope>test</scope>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-buffer</artifactId>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-transport</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
       <scope>test</scope>
     </dependency>
+
     <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-utils-test-utils</artifactId>
+      <version>0.3.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocol.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/IsoTPProtocol.java
similarity index 93%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocol.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/IsoTPProtocol.java
index a6bdfad..d486a86 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocol.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/IsoTPProtocol.java
@@ -1,22 +1,22 @@
 /*
-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.isotp.netty;
+ 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.isotp.protocol;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufUtil;
@@ -26,13 +26,13 @@ import io.netty.channel.ChannelHandlerContext;
 import org.apache.plc4x.java.api.exceptions.PlcProtocolPayloadTooBigException;
 import org.apache.plc4x.java.base.PlcMessageToMessageCodec;
 import org.apache.plc4x.java.base.events.ConnectEvent;
-import org.apache.plc4x.java.isoontcp.netty.IsoOnTcpProtocol;
-import org.apache.plc4x.java.isoontcp.netty.model.IsoOnTcpMessage;
-import org.apache.plc4x.java.isotp.netty.events.IsoTPConnectedEvent;
-import org.apache.plc4x.java.isotp.netty.model.IsoTPMessage;
-import org.apache.plc4x.java.isotp.netty.model.params.*;
-import org.apache.plc4x.java.isotp.netty.model.tpdus.*;
-import org.apache.plc4x.java.isotp.netty.model.types.*;
+import org.apache.plc4x.java.isoontcp.protocol.IsoOnTcpProtocol;
+import org.apache.plc4x.java.isoontcp.protocol.model.IsoOnTcpMessage;
+import org.apache.plc4x.java.isotp.protocol.events.IsoTPConnectedEvent;
+import org.apache.plc4x.java.isotp.protocol.model.IsoTPMessage;
+import org.apache.plc4x.java.isotp.protocol.model.params.*;
+import org.apache.plc4x.java.isotp.protocol.model.tpdus.*;
+import org.apache.plc4x.java.isotp.protocol.model.types.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/events/IsoTPConnectedEvent.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/events/IsoTPConnectedEvent.java
similarity index 93%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/events/IsoTPConnectedEvent.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/events/IsoTPConnectedEvent.java
index 96a6d1a..4e9401c 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/events/IsoTPConnectedEvent.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/events/IsoTPConnectedEvent.java
@@ -16,7 +16,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.events;
+package org.apache.plc4x.java.isotp.protocol.events;
 
 public class IsoTPConnectedEvent {
 }
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessage.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/IsoTPMessage.java
similarity index 90%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessage.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/IsoTPMessage.java
index 13b554f..7e76ebe 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessage.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/IsoTPMessage.java
@@ -16,11 +16,11 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model;
+package org.apache.plc4x.java.isotp.protocol.model;
 
 import io.netty.buffer.ByteBuf;
 import org.apache.plc4x.java.base.messages.PlcRawMessage;
-import org.apache.plc4x.java.isotp.netty.model.tpdus.Tpdu;
+import org.apache.plc4x.java.isotp.protocol.model.tpdus.Tpdu;
 
 public class IsoTPMessage extends PlcRawMessage {
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/CalledTsapParameter.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/CalledTsapParameter.java
similarity index 88%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/CalledTsapParameter.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/CalledTsapParameter.java
index a9446f3..de7ce1e 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/CalledTsapParameter.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/CalledTsapParameter.java
@@ -16,9 +16,9 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.params;
+package org.apache.plc4x.java.isotp.protocol.model.params;
 
-import org.apache.plc4x.java.isotp.netty.model.types.ParameterCode;
+import org.apache.plc4x.java.isotp.protocol.model.types.ParameterCode;
 
 public class CalledTsapParameter extends TsapParameter {
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/CallingTsapParameter.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/CallingTsapParameter.java
similarity index 88%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/CallingTsapParameter.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/CallingTsapParameter.java
index a4dd393..ffc62dd 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/CallingTsapParameter.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/CallingTsapParameter.java
@@ -16,9 +16,9 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.params;
+package org.apache.plc4x.java.isotp.protocol.model.params;
 
-import org.apache.plc4x.java.isotp.netty.model.types.ParameterCode;
+import org.apache.plc4x.java.isotp.protocol.model.types.ParameterCode;
 
 public class CallingTsapParameter extends TsapParameter {
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/ChecksumParameter.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/ChecksumParameter.java
similarity index 89%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/ChecksumParameter.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/ChecksumParameter.java
index bfd2f95..d2b876a 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/ChecksumParameter.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/ChecksumParameter.java
@@ -16,9 +16,9 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.params;
+package org.apache.plc4x.java.isotp.protocol.model.params;
 
-import org.apache.plc4x.java.isotp.netty.model.types.ParameterCode;
+import org.apache.plc4x.java.isotp.protocol.model.types.ParameterCode;
 
 public class ChecksumParameter implements Parameter {
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/DisconnectAdditionalInformationParameter.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/DisconnectAdditionalInformationParameter.java
similarity index 89%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/DisconnectAdditionalInformationParameter.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/DisconnectAdditionalInformationParameter.java
index e8ac392..1d47c2d 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/DisconnectAdditionalInformationParameter.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/DisconnectAdditionalInformationParameter.java
@@ -16,10 +16,10 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.params;
+package org.apache.plc4x.java.isotp.protocol.model.params;
 
 
-import org.apache.plc4x.java.isotp.netty.model.types.ParameterCode;
+import org.apache.plc4x.java.isotp.protocol.model.types.ParameterCode;
 
 public class DisconnectAdditionalInformationParameter implements Parameter {
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/Parameter.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/Parameter.java
similarity index 86%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/Parameter.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/Parameter.java
index 4c06fe9..4d1878d 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/Parameter.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/Parameter.java
@@ -16,9 +16,9 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.params;
+package org.apache.plc4x.java.isotp.protocol.model.params;
 
-import org.apache.plc4x.java.isotp.netty.model.types.ParameterCode;
+import org.apache.plc4x.java.isotp.protocol.model.types.ParameterCode;
 
 public interface Parameter {
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/TpduSizeParameter.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/TpduSizeParameter.java
similarity index 85%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/TpduSizeParameter.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/TpduSizeParameter.java
index 146b8ad..7179273 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/TpduSizeParameter.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/TpduSizeParameter.java
@@ -16,10 +16,10 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.params;
+package org.apache.plc4x.java.isotp.protocol.model.params;
 
-import org.apache.plc4x.java.isotp.netty.model.types.ParameterCode;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduSize;
+import org.apache.plc4x.java.isotp.protocol.model.types.ParameterCode;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduSize;
 
 public class TpduSizeParameter implements Parameter {
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameter.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/TsapParameter.java
similarity index 94%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameter.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/TsapParameter.java
index f521828..c8882fc 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameter.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/params/TsapParameter.java
@@ -16,7 +16,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.params;
+package org.apache.plc4x.java.isotp.protocol.model.params;
 
 /**
  * Base class for calling and called TSAPs
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/ConnectionConfirmTpdu.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/ConnectionConfirmTpdu.java
similarity index 81%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/ConnectionConfirmTpdu.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/ConnectionConfirmTpdu.java
index b811ff3..3931269 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/ConnectionConfirmTpdu.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/ConnectionConfirmTpdu.java
@@ -16,12 +16,12 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.tpdus;
+package org.apache.plc4x.java.isotp.protocol.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
-import org.apache.plc4x.java.isotp.netty.model.types.ProtocolClass;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
+import org.apache.plc4x.java.isotp.protocol.model.params.Parameter;
+import org.apache.plc4x.java.isotp.protocol.model.types.ProtocolClass;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduCode;
 
 import java.util.List;
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/ConnectionRequestTpdu.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/ConnectionRequestTpdu.java
similarity index 81%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/ConnectionRequestTpdu.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/ConnectionRequestTpdu.java
index db93ce5..01218e3 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/ConnectionRequestTpdu.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/ConnectionRequestTpdu.java
@@ -16,12 +16,12 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.tpdus;
+package org.apache.plc4x.java.isotp.protocol.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
-import org.apache.plc4x.java.isotp.netty.model.types.ProtocolClass;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
+import org.apache.plc4x.java.isotp.protocol.model.params.Parameter;
+import org.apache.plc4x.java.isotp.protocol.model.types.ProtocolClass;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduCode;
 
 import java.util.List;
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/ConnectionTpdu.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/ConnectionTpdu.java
similarity index 86%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/ConnectionTpdu.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/ConnectionTpdu.java
index dcc7e8d..632effb 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/ConnectionTpdu.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/ConnectionTpdu.java
@@ -16,12 +16,12 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.tpdus;
+package org.apache.plc4x.java.isotp.protocol.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
-import org.apache.plc4x.java.isotp.netty.model.types.ProtocolClass;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
+import org.apache.plc4x.java.isotp.protocol.model.params.Parameter;
+import org.apache.plc4x.java.isotp.protocol.model.types.ProtocolClass;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduCode;
 
 import java.util.List;
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/CustomTpdu.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/CustomTpdu.java
similarity index 84%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/CustomTpdu.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/CustomTpdu.java
index 12739ab..c5cbae1 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/CustomTpdu.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/CustomTpdu.java
@@ -16,11 +16,11 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.tpdus;
+package org.apache.plc4x.java.isotp.protocol.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
+import org.apache.plc4x.java.isotp.protocol.model.params.Parameter;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduCode;
 
 import java.util.List;
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DataTpdu.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/DataTpdu.java
similarity index 88%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DataTpdu.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/DataTpdu.java
index 1134954..129773d 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DataTpdu.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/DataTpdu.java
@@ -16,12 +16,12 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.tpdus;
+package org.apache.plc4x.java.isotp.protocol.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
 import org.apache.plc4x.java.base.messages.PlcProtocolMessage;
-import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
+import org.apache.plc4x.java.isotp.protocol.model.params.Parameter;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduCode;
 
 import java.util.List;
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DisconnectConfirmTpdu.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/DisconnectConfirmTpdu.java
similarity index 85%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DisconnectConfirmTpdu.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/DisconnectConfirmTpdu.java
index 1dd3dde..e6d1815 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DisconnectConfirmTpdu.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/DisconnectConfirmTpdu.java
@@ -16,11 +16,11 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.tpdus;
+package org.apache.plc4x.java.isotp.protocol.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
+import org.apache.plc4x.java.isotp.protocol.model.params.Parameter;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduCode;
 
 import java.util.List;
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DisconnectRequestTpdu.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/DisconnectRequestTpdu.java
similarity index 83%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DisconnectRequestTpdu.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/DisconnectRequestTpdu.java
index ead47a6..149c366 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DisconnectRequestTpdu.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/DisconnectRequestTpdu.java
@@ -16,12 +16,12 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.tpdus;
+package org.apache.plc4x.java.isotp.protocol.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
-import org.apache.plc4x.java.isotp.netty.model.types.DisconnectReason;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
+import org.apache.plc4x.java.isotp.protocol.model.params.Parameter;
+import org.apache.plc4x.java.isotp.protocol.model.types.DisconnectReason;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduCode;
 
 import java.util.List;
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DisconnectTpdu.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/DisconnectTpdu.java
similarity index 88%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DisconnectTpdu.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/DisconnectTpdu.java
index 1c09138..4596d2e 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DisconnectTpdu.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/DisconnectTpdu.java
@@ -16,11 +16,11 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.tpdus;
+package org.apache.plc4x.java.isotp.protocol.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
+import org.apache.plc4x.java.isotp.protocol.model.params.Parameter;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduCode;
 
 import java.util.List;
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/ErrorTpdu.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/ErrorTpdu.java
similarity index 84%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/ErrorTpdu.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/ErrorTpdu.java
index 0851977..a526f8a 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/ErrorTpdu.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/ErrorTpdu.java
@@ -16,12 +16,12 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.tpdus;
+package org.apache.plc4x.java.isotp.protocol.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
-import org.apache.plc4x.java.isotp.netty.model.types.RejectCause;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
+import org.apache.plc4x.java.isotp.protocol.model.params.Parameter;
+import org.apache.plc4x.java.isotp.protocol.model.types.RejectCause;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduCode;
 
 import java.util.List;
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/Tpdu.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/Tpdu.java
similarity index 91%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/Tpdu.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/Tpdu.java
index 69e8545..1f49eeb 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/Tpdu.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/Tpdu.java
@@ -16,13 +16,13 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.tpdus;
+package org.apache.plc4x.java.isotp.protocol.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
 import org.apache.plc4x.java.base.messages.PlcProtocolMessage;
 import org.apache.plc4x.java.base.messages.PlcRawMessage;
-import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
+import org.apache.plc4x.java.isotp.protocol.model.params.Parameter;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduCode;
 
 import java.util.List;
 import java.util.Optional;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/DeviceGroup.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/DeviceGroup.java
similarity index 95%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/DeviceGroup.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/DeviceGroup.java
index 7064e88..a2ce863 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/DeviceGroup.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/DeviceGroup.java
@@ -16,7 +16,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.types;
+package org.apache.plc4x.java.isotp.protocol.model.types;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/DisconnectReason.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/DisconnectReason.java
similarity index 97%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/DisconnectReason.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/DisconnectReason.java
index 9eabe89..a776909 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/DisconnectReason.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/DisconnectReason.java
@@ -16,7 +16,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.types;
+package org.apache.plc4x.java.isotp.protocol.model.types;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/ParameterCode.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/ParameterCode.java
similarity index 97%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/ParameterCode.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/ParameterCode.java
index 8e4fe1c..98fdf36 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/ParameterCode.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/ParameterCode.java
@@ -16,7 +16,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.types;
+package org.apache.plc4x.java.isotp.protocol.model.types;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/ProtocolClass.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/ProtocolClass.java
similarity index 96%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/ProtocolClass.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/ProtocolClass.java
index f944f69..b8f1c6f 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/ProtocolClass.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/ProtocolClass.java
@@ -16,7 +16,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.types;
+package org.apache.plc4x.java.isotp.protocol.model.types;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/RejectCause.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/RejectCause.java
similarity index 96%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/RejectCause.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/RejectCause.java
index 37c2b28..0152bae 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/RejectCause.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/RejectCause.java
@@ -16,7 +16,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.types;
+package org.apache.plc4x.java.isotp.protocol.model.types;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/TpduCode.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/TpduCode.java
similarity index 96%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/TpduCode.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/TpduCode.java
index ded9a07..9f63059 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/TpduCode.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/TpduCode.java
@@ -16,7 +16,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.types;
+package org.apache.plc4x.java.isotp.protocol.model.types;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/TpduSize.java b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/TpduSize.java
similarity index 97%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/TpduSize.java
rename to plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/TpduSize.java
index 5ba90ec..d6386d2 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/types/TpduSize.java
+++ b/plc4j/protocols/iso-tp/src/main/java/org/apache/plc4x/java/isotp/protocol/model/types/TpduSize.java
@@ -16,7 +16,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.java.isotp.netty.model.types;
+package org.apache.plc4x.java.isotp.protocol.model.types;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocolTest.java b/plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/IsoTPProtocolTest.java
similarity index 93%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocolTest.java
rename to plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/IsoTPProtocolTest.java
index a79df5f..d1d0fff 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocolTest.java
+++ b/plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/IsoTPProtocolTest.java
@@ -1,32 +1,31 @@
 /*
-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.isotp.netty;
+ 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.isotp.protocol;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import io.netty.channel.ChannelHandlerContext;
-import org.apache.plc4x.java.isoontcp.netty.model.IsoOnTcpMessage;
-import org.apache.plc4x.java.isotp.netty.model.IsoTPMessage;
-import org.apache.plc4x.java.isotp.netty.model.params.*;
-import org.apache.plc4x.java.isotp.netty.model.tpdus.*;
-import org.apache.plc4x.java.isotp.netty.model.types.*;
-import org.apache.plc4x.java.s7.utils.S7TsapIdEncoder;
+import org.apache.plc4x.java.isoontcp.protocol.model.IsoOnTcpMessage;
+import org.apache.plc4x.java.isotp.protocol.model.IsoTPMessage;
+import org.apache.plc4x.java.isotp.protocol.model.params.*;
+import org.apache.plc4x.java.isotp.protocol.model.tpdus.*;
+import org.apache.plc4x.java.isotp.protocol.model.types.*;
 import org.apache.plc4x.test.FastTests;
 import org.junit.After;
 import org.junit.Before;
@@ -312,9 +311,11 @@ public class IsoTPProtocolTest {
     @Category(FastTests.class)
     public void encodeCallingParameter() {
         ArrayList<Parameter> parmameters = new ArrayList<>();
+        short firstByte = (short) (DeviceGroup.PG_OR_PC.getCode() << 8);
+        short secondByte = (short) ((0x7 << 4) | (0xe1 & 0x0F));
         CallingTsapParameter callingParameter = new CallingTsapParameter(
             // slot number too big and overflows into rack
-            S7TsapIdEncoder.encodeS7TsapId(DeviceGroup.PG_OR_PC, (byte) 0x7, (byte) 0xe1));
+            (short) (firstByte | secondByte));
         parmameters.add(callingParameter);
         ErrorTpdu tpdu = new ErrorTpdu((short) 0x1, RejectCause.REASON_NOT_SPECIFIED, parmameters, buf);
 
@@ -504,9 +505,10 @@ public class IsoTPProtocolTest {
         assertThat(errorTpdu.getParameters(), hasSize(1));
         CallingTsapParameter parameter = (CallingTsapParameter) errorTpdu.getParameters().get(0);
         assertThat(parameter.getType(), equalTo(ParameterCode.CALLING_TSAP));
-        assertThat(S7TsapIdEncoder.decodeDeviceGroup(parameter.getTsapId()), equalTo(DeviceGroup.PG_OR_PC));
-        assertThat(S7TsapIdEncoder.decodeRack(parameter.getTsapId()), equalTo(0x1));
-        assertThat(S7TsapIdEncoder.decodeSlot(parameter.getTsapId()), equalTo(0x7));
+        short firstByte = (short) (DeviceGroup.PG_OR_PC.getCode() << 8);
+        short secondByte = (short) ((0x1 << 4) | (0x7 & 0x0F));
+        short expectedTsapId = (short) (firstByte | secondByte);
+        assertThat(parameter.getTsapId(), equalTo(expectedTsapId));
     }
 
     @Test
@@ -534,9 +536,10 @@ public class IsoTPProtocolTest {
         assertThat(errorTpdu.getParameters(), hasSize(1));
         CalledTsapParameter parameter = (CalledTsapParameter) errorTpdu.getParameters().get(0);
         assertThat(parameter.getType(), equalTo(ParameterCode.CALLED_TSAP));
-        assertThat(S7TsapIdEncoder.decodeDeviceGroup(parameter.getTsapId()), equalTo(DeviceGroup.PG_OR_PC));
-        assertThat(S7TsapIdEncoder.decodeRack(parameter.getTsapId()), equalTo(0x2));
-        assertThat(S7TsapIdEncoder.decodeSlot(parameter.getTsapId()), equalTo(0x3));
+        short firstByte = (short) (DeviceGroup.PG_OR_PC.getCode() << 8);
+        short secondByte = (short) ((0x2 << 4) | (0x3 & 0x0F));
+        short expectedTsapId = (short) (firstByte | secondByte);
+        assertThat(parameter.getTsapId(), equalTo(expectedTsapId));
     }
 
     @Test
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessageTests.java b/plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/IsoTPMessageTests.java
similarity index 53%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessageTests.java
rename to plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/IsoTPMessageTests.java
index f370239..e02cc26 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessageTests.java
+++ b/plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/IsoTPMessageTests.java
@@ -1,30 +1,30 @@
 /*
-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.isotp.netty.model;
+ 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.isotp.protocol.model;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
-import org.apache.plc4x.java.isotp.netty.model.tpdus.ErrorTpdu;
-import org.apache.plc4x.java.isotp.netty.model.types.RejectCause;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
+import org.apache.plc4x.java.isotp.protocol.model.params.Parameter;
+import org.apache.plc4x.java.isotp.protocol.model.tpdus.ErrorTpdu;
+import org.apache.plc4x.java.isotp.protocol.model.types.RejectCause;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduCode;
 import org.apache.plc4x.test.FastTests;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/ParameterTests.java b/plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/params/ParameterTests.java
similarity index 60%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/ParameterTests.java
rename to plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/params/ParameterTests.java
index 5161593..584a76a 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/ParameterTests.java
+++ b/plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/params/ParameterTests.java
@@ -1,26 +1,26 @@
 /*
-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.isotp.netty.model.params;
-
-import org.apache.plc4x.java.isotp.netty.model.types.ParameterCode;
-import org.apache.plc4x.java.isotp.netty.model.types.TpduSize;
+ 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.isotp.protocol.model.params;
+
+import org.apache.plc4x.java.isotp.protocol.model.types.ParameterCode;
+import org.apache.plc4x.java.isotp.protocol.model.types.TpduSize;
 import org.apache.plc4x.test.FastTests;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameterTests.java b/plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/params/TsapParameterTests.java
similarity index 55%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameterTests.java
rename to plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/params/TsapParameterTests.java
index 46498d1..bf663d5 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameterTests.java
+++ b/plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/params/TsapParameterTests.java
@@ -1,25 +1,25 @@
 /*
-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.isotp.netty.model.params;
-
-import org.apache.plc4x.java.isotp.netty.model.types.ParameterCode;
+ 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.isotp.protocol.model.params;
+
+import org.apache.plc4x.java.isotp.protocol.model.types.ParameterCode;
 import org.apache.plc4x.test.FastTests;
 import org.junit.After;
 import org.junit.Test;
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/tpdus/IsotpModelTests.java b/plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/IsotpModelTests.java
similarity index 86%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/tpdus/IsotpModelTests.java
rename to plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/IsotpModelTests.java
index 311eec4..942ed75 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/tpdus/IsotpModelTests.java
+++ b/plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/tpdus/IsotpModelTests.java
@@ -1,31 +1,31 @@
 /*
-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.isotp.netty.model.tpdus;
+ 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.isotp.protocol.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-import org.apache.plc4x.java.isotp.netty.model.params.CallingTsapParameter;
-import org.apache.plc4x.java.isotp.netty.model.params.ChecksumParameter;
-import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
-import org.apache.plc4x.java.isotp.netty.model.params.TpduSizeParameter;
-import org.apache.plc4x.java.isotp.netty.model.types.*;
+import org.apache.plc4x.java.isotp.protocol.model.params.CallingTsapParameter;
+import org.apache.plc4x.java.isotp.protocol.model.params.ChecksumParameter;
+import org.apache.plc4x.java.isotp.protocol.model.params.Parameter;
+import org.apache.plc4x.java.isotp.protocol.model.params.TpduSizeParameter;
+import org.apache.plc4x.java.isotp.protocol.model.types.*;
 import org.apache.plc4x.test.FastTests;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/types/IsotpTypeTests.java b/plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/types/IsotpTypeTests.java
similarity index 87%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/types/IsotpTypeTests.java
rename to plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/types/IsotpTypeTests.java
index 73676b1..3b88a01 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/types/IsotpTypeTests.java
+++ b/plc4j/protocols/iso-tp/src/test/java/org/apache/plc4x/java/isotp/protocol/model/types/IsotpTypeTests.java
@@ -1,23 +1,23 @@
 /*
-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.isotp.netty.model.types;
+ 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.isotp.protocol.model.types;
 
 import org.apache.plc4x.test.FastTests;
 import org.junit.Test;
diff --git a/plc4j/protocols/modbus/pom.xml b/plc4j/protocols/modbus/pom.xml
index a572d4b..18bc827 100644
--- a/plc4j/protocols/modbus/pom.xml
+++ b/plc4j/protocols/modbus/pom.xml
@@ -57,12 +57,6 @@
       <artifactId>plc4j-protocol-driver-base-serial</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-      <scope>runtime</scope>
-    </dependency>
 
     <dependency>
       <!-- Just for reference can be removed later-->
diff --git a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnectionTest.java b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnectionTest.java
index 8a4c419..e3e8eb4 100644
--- a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnectionTest.java
+++ b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnectionTest.java
@@ -23,9 +23,7 @@ import io.netty.channel.ChannelFuture;
 import io.netty.channel.ChannelHandler;
 import io.netty.util.concurrent.Future;
 import io.netty.util.concurrent.GenericFutureListener;
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.base.connection.ChannelFactory;
 import org.apache.plc4x.java.base.messages.InternalPlcReadRequest;
@@ -43,9 +41,9 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 
-import static org.apache.plc4x.java.base.util.Junit5Backport.assertThrows;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
diff --git a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusConnectionFactoryTest.java b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusConnectionFactoryTest.java
index e4dbc97..dd04648 100644
--- a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusConnectionFactoryTest.java
+++ b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusConnectionFactoryTest.java
@@ -30,8 +30,8 @@ import org.mockito.junit.MockitoJUnitRunner;
 
 import java.net.InetAddress;
 
-import static org.apache.plc4x.java.base.util.Junit5Backport.assertThrows;
 import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 @RunWith(MockitoJUnitRunner.class)
 public class ModbusConnectionFactoryTest {
diff --git a/plc4j/protocols/pom.xml b/plc4j/protocols/pom.xml
index e3638ce..f4cbe1d 100644
--- a/plc4j/protocols/pom.xml
+++ b/plc4j/protocols/pom.xml
@@ -38,7 +38,9 @@
 
     <module>ads</module>
     <module>delta-v</module>
-    <module>ethernetip</module>
+    <module>ethernet-ip</module>
+    <module>iso-on-tcp</module>
+    <module>iso-tp</module>
     <module>modbus</module>
     <module>s7</module>
     <module>test</module>
diff --git a/plc4j/protocols/s7/pom.xml b/plc4j/protocols/s7/pom.xml
index dd1b82c..4c9efb3 100644
--- a/plc4j/protocols/s7/pom.xml
+++ b/plc4j/protocols/s7/pom.xml
@@ -29,7 +29,7 @@
 
   <artifactId>plc4j-protocol-s7</artifactId>
   <name>PLC4J: Protocol: S7</name>
-  <description>Implementation of a PLC4X driver able to speak with S7 devices using the S7 protocol.</description>
+  <description>Implementation of the S7 Protocol layer.</description>
 
   <dependencies>
     <dependency>
@@ -44,15 +44,9 @@
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base-tcp</artifactId>
+      <artifactId>plc4j-protocol-iso-tp</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-      <scope>runtime</scope>
-    </dependency>
 
     <dependency>
       <groupId>io.netty</groupId>
@@ -75,16 +69,6 @@
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-configuration2</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <scope>test</scope>
-    </dependency>
 
     <dependency>
       <groupId>commons-io</groupId>
@@ -96,16 +80,6 @@
       <artifactId>mockito-core</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.pcap4j</groupId>
-      <artifactId>pcap4j-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.pcap4j</groupId>
-      <artifactId>pcap4j-packetfactory-static</artifactId>
-      <scope>test</scope>
-    </dependency>
 
     <dependency>
       <groupId>org.spockframework</groupId>
@@ -125,26 +99,6 @@
       <version>0.3.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base-test</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-      <scope>test</scope>
-    </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <configuration>
-          <usedDependencies combine.children="append">
-            <usedDependency>org.pcap4j:pcap4j-packetfactory-static</usedDependency>
-          </usedDependencies>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
\ No newline at end of file
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isoontcp/netty/model/IsoOnTcpMessage.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isoontcp/netty/model/IsoOnTcpMessage.java
deleted file mode 100644
index c21bbd8..0000000
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isoontcp/netty/model/IsoOnTcpMessage.java
+++ /dev/null
@@ -1,30 +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.isoontcp.netty.model;
-
-import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.base.messages.PlcRawMessage;
-
-public class IsoOnTcpMessage extends PlcRawMessage {
-
-    public IsoOnTcpMessage(ByteBuf userData) {
-        super(userData);
-    }
-
-}
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java
index 606c1b6..e473056 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/S7Protocol.java
@@ -28,10 +28,10 @@ import io.netty.util.concurrent.PromiseCombiner;
 import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
 import org.apache.plc4x.java.api.exceptions.PlcProtocolPayloadTooBigException;
-import org.apache.plc4x.java.isotp.netty.IsoTPProtocol;
-import org.apache.plc4x.java.isotp.netty.events.IsoTPConnectedEvent;
-import org.apache.plc4x.java.isotp.netty.model.IsoTPMessage;
-import org.apache.plc4x.java.isotp.netty.model.tpdus.DataTpdu;
+import org.apache.plc4x.java.isotp.protocol.IsoTPProtocol;
+import org.apache.plc4x.java.isotp.protocol.events.IsoTPConnectedEvent;
+import org.apache.plc4x.java.isotp.protocol.model.IsoTPMessage;
+import org.apache.plc4x.java.isotp.protocol.model.tpdus.DataTpdu;
 import org.apache.plc4x.java.s7.netty.events.S7ConnectedEvent;
 import org.apache.plc4x.java.s7.netty.model.messages.S7Message;
 import org.apache.plc4x.java.s7.netty.model.messages.S7RequestMessage;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/utils/S7TsapIdEncoder.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/utils/S7TsapIdEncoder.java
index 73200a4..c2250b6 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/utils/S7TsapIdEncoder.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/utils/S7TsapIdEncoder.java
@@ -18,7 +18,7 @@ under the License.
 */
 package org.apache.plc4x.java.s7.utils;
 
-import org.apache.plc4x.java.isotp.netty.model.types.DeviceGroup;
+import org.apache.plc4x.java.isotp.protocol.model.types.DeviceGroup;
 
 public class S7TsapIdEncoder {
 
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/netty/NettyTestBase.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/netty/NettyTestBase.java
deleted file mode 100644
index 16e4f5f..0000000
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/netty/NettyTestBase.java
+++ /dev/null
@@ -1,22 +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.netty;
-
-public class NettyTestBase {
-}
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcScanner.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcScanner.java
deleted file mode 100644
index c7ddebd..0000000
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcScanner.java
+++ /dev/null
@@ -1,86 +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.s7;
-
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class S7PlcScanner {
-
-    private static final Logger logger = LoggerFactory.getLogger(S7PlcScanner.class);
-
-    @Test
-    public void hurz() {
-
-    }
-
-
-    /**
-     * Example code do demonstrate using the S7 Plc Driver.
-     *
-     * @param args ignored.
-     */
-/*    public static void main(String[] args) {
-        // Create a connection to the S7 PLC (s7://{hostname/ip}/{racknumber}/{slotnumber})
-        logger.info("Connecting");
-        try (PlcConnection plcConnection = new PlcDriverManager().getConnection("s7://10.10.64.20/1/1")) {
-            logger.info("Connected");
-
-            Optional<PlcReader> reader = plcConnection.getReader();
-            // Check if this connection support reading of data.
-            if (reader.isPresent()) {
-                PlcReader plcReader = reader.get();
-
-                for (MemoryArea memoryArea : MemoryArea.values()) {
-                    System.out.println(memoryArea);
-                    System.out.println("------------------------------------------");
-                    for (int i = 0; i < 8959; i++) {
-                        try {
-                            PlcField field;
-                            if (memoryArea == MemoryArea.DATA_BLOCKS) {
-                                field = plcConnection.prepareField("DATA_BLOCKS/1/" + i);
-                            } else {
-                                field = plcConnection.prepareField(memoryArea.name() + "/" + i);
-                            }
-                            TypeSafePlcReadResponse<Byte> plcReadResponse = plcReader.read(
-                                new TypeSafePlcReadRequest<>(Byte.class, field)).get();
-                            Byte data = plcReadResponse.getResponseItem()
-                                .orElseThrow(() -> new IllegalStateException("No response available"))
-                                .getValues().get(0);
-                            if (data != null && data != 0) {
-                                System.out.println(String.format(
-                                    "Response: Memory Area: %s Index: %d Value: %02X", memoryArea.name(), i, data));
-                            }
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
-                    }
-                }
-            }
-        }
-        // Catch any exception or the application won't be able to finish if something goes wrong.
-        catch (Exception e) {
-            e.printStackTrace();
-        }
-        // The application would cleanly terminate after several seconds ... this just speeds things up.
-        System.exit(0);
-    }*/
-
-}
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcTestConsole.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcTestConsole.java
deleted file mode 100644
index f33f563..0000000
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcTestConsole.java
+++ /dev/null
@@ -1,69 +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.s7;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class S7PlcTestConsole {
-
-    private static final Logger logger = LoggerFactory.getLogger(S7PlcTestConsole.class);
-
-    /**
-     * Example code do demonstrate using the S7 Plc Driver.
-     *
-     * @param args ignored.
-     */
-/*    public static void main(String[] args) {
-        // Create a connection to the S7 PLC (s7://{hostname/ip}/{racknumber}/{slotnumber})
-        logger.info("Connecting");
-        try (PlcConnection plcConnection = new PlcDriverManager().getConnection("s7://10.10.64.20/1/1")) {
-            logger.info("Connected");
-
-            Optional<PlcReader> reader = plcConnection.getReader();
-            // Check if this connection support reading of data.
-            if (reader.isPresent()) {
-                PlcReader plcReader = reader.get();
-
-                Scanner scanner = new Scanner(System.in);
-                String line;
-                while (!"exit".equalsIgnoreCase(line = scanner.next())) {
-                    try {
-                        PlcField field = plcConnection.prepareField(line);
-                        TypeSafePlcReadResponse<Byte> plcReadResponse = plcReader.read(new TypeSafePlcReadRequest<>(Byte.class, field)).get();
-                        List<Byte> data = plcReadResponse.getResponseItem()
-                            .orElseThrow(() -> new IllegalStateException("No response available"))
-                            .getValues();
-                        System.out.println("Response: " + data.get(0));
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-                }
-                scanner.close();
-            }
-        }
-        // Catch any exception or the application won't be able to finish if something goes wrong.
-        catch (Exception e) {
-            e.printStackTrace();
-        }
-        // The application would cleanly terminate after several seconds ... this just speeds things up.
-        System.exit(0);
-    }*/
-
-}
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcWriterSample.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcWriterSample.java
deleted file mode 100644
index 48318ed..0000000
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcWriterSample.java
+++ /dev/null
@@ -1,63 +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.s7;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class S7PlcWriterSample {
-
-    private static final Logger logger = LoggerFactory.getLogger(S7PlcWriterSample.class);
-
-    /**
-     * Example code do demonstrate using the S7 Plc Driver.
-     *
-     * @param args ignored.
-     */
-/*    public static void main(String[] args) {
-        // Create a connection to the S7 PLC (s7://{hostname/ip}/{racknumber}/{slotnumber})
-        logger.info("Connecting");
-        try (PlcConnection plcConnection = new PlcDriverManager().getConnection("s7://192.168.0.1/0/0")) {
-            logger.info("Connected");
-
-            Optional<PlcWriter> writer = plcConnection.getWriter();
-            // Check if this connection support reading of data.
-            if (writer.isPresent()) {
-                PlcWriter plcWriter = writer.get();
-                PlcField inputs = plcConnection.prepareField("DATA_BLOCKS/1/2");
-                //////////////////////////////////////////////////////////
-                // Write synchronously ...
-                // NOTICE: the ".get()" immediately lets this thread pause till
-                // the response is processed and available.
-                TypeSafePlcWriteResponse<Float> plcWriteResponse = plcWriter.write(
-                    new TypeSafePlcWriteRequest<>(Float.class, inputs, 2.0f)).get();
-                System.out.println("Written: " + plcWriteResponse.getResponseItem()
-                    .orElseThrow(() -> new IllegalStateException("No response available"))
-                    .getResponseCode().name());
-            }
-        }
-        // Catch any exception or the application won't be able to finish if something goes wrong.
-        catch (Exception e) {
-            e.printStackTrace();
-        }
-        // The application would cleanly terminate after several seconds ... this just speeds things up.
-        System.exit(0);
-    }*/
-
-}
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/Plc4XS7ProtocolTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/Plc4XS7ProtocolTest.java
index 152fb0f..d4f401b 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/Plc4XS7ProtocolTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/Plc4XS7ProtocolTest.java
@@ -29,7 +29,6 @@ import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.base.messages.*;
-import org.apache.plc4x.java.netty.NettyTestBase;
 import org.apache.plc4x.java.s7.netty.model.messages.S7Message;
 import org.apache.plc4x.java.s7.netty.model.messages.S7RequestMessage;
 import org.apache.plc4x.java.s7.netty.model.params.VarParameter;
@@ -56,7 +55,7 @@ import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public class Plc4XS7ProtocolTest extends NettyTestBase {
+public class Plc4XS7ProtocolTest {
 
     private EmbeddedChannel SUT;
     private PlcReadRequest.Builder readRequestBuilder =
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/S7ProtocolTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/S7ProtocolTest.java
index 7c8b416..dfeb21e 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/S7ProtocolTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/S7ProtocolTest.java
@@ -21,8 +21,7 @@ package org.apache.plc4x.java.s7.netty;
 import io.netty.channel.ChannelFuture;
 import io.netty.channel.embedded.EmbeddedChannel;
 import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
-import org.apache.plc4x.java.isotp.netty.model.tpdus.DataTpdu;
-import org.apache.plc4x.java.netty.NettyTestBase;
+import org.apache.plc4x.java.isotp.protocol.model.tpdus.DataTpdu;
 import org.apache.plc4x.java.s7.netty.model.messages.S7RequestMessage;
 import org.apache.plc4x.java.s7.netty.model.messages.SetupCommunicationRequestMessage;
 import org.apache.plc4x.java.s7.netty.model.params.CpuServicesRequestParameter;
@@ -49,7 +48,7 @@ import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public class S7ProtocolTest extends NettyTestBase {
+public class S7ProtocolTest {
 
     private EmbeddedChannel SUT;
 
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/utils/S7TsapIdEncoderTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/utils/S7TsapIdEncoderTest.java
index e0851ee..bae498f 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/utils/S7TsapIdEncoderTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/utils/S7TsapIdEncoderTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.plc4x.java.s7.utils;
 
-import org.apache.plc4x.java.isotp.netty.model.types.DeviceGroup;
+import org.apache.plc4x.java.isotp.protocol.model.types.DeviceGroup;
 import org.junit.jupiter.api.Test;
 
 import java.lang.reflect.Constructor;
diff --git a/plc4j/protocols/s7/src/test/resources/META-INF/services/com.athaydes.spockframework.report.IReportCreator.properties b/plc4j/protocols/s7/src/test/resources/META-INF/services/com.athaydes.spockframework.report.IReportCreator.properties
new file mode 100644
index 0000000..0759363
--- /dev/null
+++ b/plc4j/protocols/s7/src/test/resources/META-INF/services/com.athaydes.spockframework.report.IReportCreator.properties
@@ -0,0 +1,66 @@
+#
+# 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.
+#
+
+# Name of the implementation class(es) of report creator(s) to enable (separate multiple entries with commas)
+# Currently supported classes are:
+#   1. com.athaydes.spockframework.report.internal.HtmlReportCreator
+#   2. com.athaydes.spockframework.report.template.TemplateReportCreator
+com.athaydes.spockframework.report.IReportCreator=com.athaydes.spockframework.report.internal.HtmlReportCreator
+
+# Set properties of the report creator
+# For the HtmlReportCreator, the only properties available are
+# (the location of the css files is relative to the classpath):
+com.athaydes.spockframework.report.internal.HtmlReportCreator.featureReportCss=spock-feature-report.css
+com.athaydes.spockframework.report.internal.HtmlReportCreator.summaryReportCss=spock-summary-report.css
+com.athaydes.spockframework.report.internal.HtmlReportCreator.printThrowableStackTrace=false
+com.athaydes.spockframework.report.internal.HtmlReportCreator.inlineCss=true
+com.athaydes.spockframework.report.internal.HtmlReportCreator.enabled=true
+# options are: "class_name_and_title", "class_name", "title"
+com.athaydes.spockframework.report.internal.HtmlReportCreator.specSummaryNameOption=class_name_and_title
+
+# exclude Specs Table of Contents
+com.athaydes.spockframework.report.internal.HtmlReportCreator.excludeToc=false
+
+# Output directory (where the spock reports will be created) - relative to working directory
+com.athaydes.spockframework.report.outputDir=target/spock-reports
+
+# Output directory where to store the aggregated JSON report (used to support parallel builds)
+com.athaydes.spockframework.report.aggregatedJsonReportDir=
+
+# If set to true, hides blocks which do not have any description
+com.athaydes.spockframework.report.hideEmptyBlocks=false
+
+# Set the name of the project under test so it can be displayed in the report
+com.athaydes.spockframework.report.projectName=
+
+# Set the version of the project under test so it can be displayed in the report
+com.athaydes.spockframework.report.projectVersion=Unknown
+
+# Show the source code for each block
+com.athaydes.spockframework.report.showCodeBlocks=false
+
+# Set the root location of the Spock test source code (only used if showCodeBlocks is 'true')
+com.athaydes.spockframework.report.testSourceRoots=src/test/groovy
+
+# Set properties specific to the TemplateReportCreator
+com.athaydes.spockframework.report.template.TemplateReportCreator.specTemplateFile=/templateReportCreator/spec-template.md
+com.athaydes.spockframework.report.template.TemplateReportCreator.reportFileExtension=md
+com.athaydes.spockframework.report.template.TemplateReportCreator.summaryTemplateFile=/templateReportCreator/summary-template.md
+com.athaydes.spockframework.report.template.TemplateReportCreator.summaryFileName=summary.md
+com.athaydes.spockframework.report.template.TemplateReportCreator.enabled=true
\ No newline at end of file
diff --git a/plc4j/protocols/test/pom.xml b/plc4j/protocols/test/pom.xml
index eb761f4..d415346 100644
--- a/plc4j/protocols/test/pom.xml
+++ b/plc4j/protocols/test/pom.xml
@@ -44,11 +44,6 @@
     </dependency>
     <dependency>
       <groupId>org.apache.commons</groupId>
-      <artifactId>commons-text</artifactId>
-      <version>1.4</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
     </dependency>
   </dependencies>
diff --git a/plc4j/protocols/test/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver b/plc4j/protocols/test/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
index f145b55..ebff4aa 100644
--- a/plc4j/protocols/test/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
+++ b/plc4j/protocols/test/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
@@ -16,5 +16,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-org.apache.plc4x.java.test.TestPlcDriver
 org.apache.plc4x.java.mock.PlcMockDriver
diff --git a/plc4j/utils/connection-pool/pom.xml b/plc4j/utils/connection-pool/pom.xml
index a7ae646..049d960 100644
--- a/plc4j/utils/connection-pool/pom.xml
+++ b/plc4j/utils/connection-pool/pom.xml
@@ -38,11 +38,6 @@
       <artifactId>plc4j-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-     <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-    </dependency>
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-pool2</artifactId>
diff --git a/plc4j/utils/opm/pom.xml b/plc4j/utils/opm/pom.xml
index 2912674..4e25bf7 100644
--- a/plc4j/utils/opm/pom.xml
+++ b/plc4j/utils/opm/pom.xml
@@ -40,11 +40,6 @@
       <artifactId>plc4j-api</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-core</artifactId>
-      <version>0.3.0-SNAPSHOT</version>
-    </dependency>
 
     <!-- Utils -->
     <dependency>