You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2018/08/27 12:27:26 UTC

[incubator-plc4x] branch feature/api-redesign-chris-c created (now fc70e60)

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

cdutz pushed a change to branch feature/api-redesign-chris-c
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git.


      at fc70e60  API Refactoring according to proposal: https://cwiki.apache.org/confluence/display/PLC4X/Chris%27+Proposal+2

This branch includes the following new commits:

     new fc70e60  API Refactoring according to proposal: https://cwiki.apache.org/confluence/display/PLC4X/Chris%27+Proposal+2

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-plc4x] 01/01: API Refactoring according to proposal: https://cwiki.apache.org/confluence/display/PLC4X/Chris%27+Proposal+2

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch feature/api-redesign-chris-c
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit fc70e604acd9d735b3b531a868a59c0236956092
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Mon Aug 27 14:27:20 2018 +0200

    API Refactoring according to proposal: https://cwiki.apache.org/confluence/display/PLC4X/Chris%27+Proposal+2
    
    - Renaming all API classes to use the prefix "Plc"
    - Renamed Address to PlcField
    - Removed the PlcLister interface
    - Renamed parseAddress to prepareField
---
 .../azure/iothub/S7PlcToAzureIoTHubSample.java     |   4 +-
 .../dummydriver/connection/DummyConnection.java    |   8 +-
 .../model/{DummyAddress.java => DummyField.java}   |   6 +-
 .../java/examples/kafkabridge/KafkaBridge.java     |  18 +--
 .../java/examples/kafkabridge/model/PlcConfig.java |  10 +-
 .../model/{PlcAddress.java => PlcFieldConfig.java} |   2 +-
 .../java/org/apache/plc4x/camel/Plc4XConsumer.java |   8 +-
 .../apache/plc4x/camel/Plc4XPollingConsumer.java   |  10 +-
 .../java/org/apache/plc4x/camel/Plc4XProducer.java |  10 +-
 .../plc4x/camel/ResponseItemTypeConverter.java     |   4 +-
 .../java/org/apache/plc4x/camel/MockDriver.java    |  12 +-
 .../org/apache/plc4x/camel/Plc4XComponentTest.java |   6 +-
 .../org/apache/plc4x/camel/Plc4XProducerTest.java  |   6 +-
 .../apache/plc4x/edgent/PlcConnectionAdapter.java  |  42 +++----
 .../java/org/apache/plc4x/edgent/PlcFunctions.java |   2 +-
 .../plc4x/edgent/PlcConnectionAdapterTest.java     | 117 ++++++++---------
 .../org/apache/plc4x/edgent/PlcFunctionsTest.java  |  20 +--
 .../apache/plc4x/edgent/mock/MockConnection.java   |  49 ++++----
 .../mock/{MockAddress.java => MockField.java}      |  13 +-
 .../plc4x/java/api/connection/PlcConnection.java   |  18 ++-
 .../plc4x/java/api/connection/PlcLister.java       |  25 ----
 .../plc4x/java/api/connection/PlcSubscriber.java   |   6 +-
 ...xception.java => PlcInvalidFieldException.java} |  16 +--
 .../java/api/messages/PlcProprietaryRequest.java   |   4 +-
 .../java/api/messages/PlcProprietaryResponse.java  |   4 +-
 ...rotocolMessage.java => PlcProtocolMessage.java} |   4 +-
 .../plc4x/java/api/messages/PlcReadRequest.java    |  40 +++---
 .../plc4x/java/api/messages/PlcReadResponse.java   |  14 +--
 .../java/api/messages/PlcSubscriptionRequest.java  |  14 +--
 .../api/messages/PlcUnsubscriptionRequest.java     |   8 +-
 .../plc4x/java/api/messages/PlcWriteRequest.java   |  30 ++---
 .../plc4x/java/api/messages/PlcWriteResponse.java  |  12 +-
 ...eadRequestItem.java => PlcReadRequestItem.java} |  26 ++--
 ...dResponseItem.java => PlcReadResponseItem.java} |  18 +--
 ...teRequestItem.java => PlcWriteRequestItem.java} |  14 +--
 ...ResponseItem.java => PlcWriteResponseItem.java} |   8 +-
 .../plc4x/java/api/messages/items/RequestItem.java |  25 ++--
 .../java/api/messages/items/ResponseItem.java      |   8 +-
 .../SubscriptionRequestChangeOfStateItem.java      |   8 +-
 .../items/SubscriptionRequestCyclicItem.java       |   8 +-
 .../items/SubscriptionRequestEventItem.java        |   8 +-
 .../messages/items/SubscriptionRequestItem.java    |  12 +-
 .../messages/items/SubscriptionResponseItem.java   |  10 +-
 .../messages/items/UnsubscriptionRequestItem.java  |  10 +-
 .../messages/specific/TypeSafePlcReadRequest.java  |  30 ++---
 .../messages/specific/TypeSafePlcReadResponse.java |  20 +--
 .../messages/specific/TypeSafePlcWriteRequest.java |  24 ++--
 .../specific/TypeSafePlcWriteResponse.java         |  16 +--
 .../java/api/model/{Address.java => PlcField.java} |  10 +-
 ...ptionHandle.java => PlcSubscriptionHandle.java} |   6 +-
 ...scriptionType.java => PlcSubscriptionType.java} |   4 +-
 .../{ResponseCode.java => PlcResponseCode.java}    |   2 +-
 .../apache/plc4x/java/api/ImmutabilityTest.java    |  12 +-
 .../plc4x/java/api/connection/PlcReaderTest.java   |  12 +-
 .../plc4x/java/api/connection/PlcWriterTest.java   |   4 +-
 .../plc4x/java/api/messages/APIMessageTests.java   | 138 ++++++++++-----------
 .../java/api/messages/PlcReadRequestTest.java      |  38 +++---
 .../java/api/messages/PlcReadResponseTest.java     |  12 +-
 .../java/api/messages/PlcWriteRequestTest.java     |  36 +++---
 .../java/api/messages/PlcWriteResponseTest.java    |  14 +--
 .../mock/{MockAddress.java => MockField.java}      |  23 ++--
 .../specific/TypeSafePlcReadRequestTest.java       |  12 +-
 .../specific/TypeSafePlcReadResponseTest.java      |  12 +-
 .../specific/TypeSafePlcWriteRequestTest.java      |  12 +-
 .../specific/TypeSafePlcWriteResponseTest.java     |  11 +-
 .../org/apache/plc4x/java/mock/MockConnection.java |   4 +-
 .../ads/connection/AdsAbstractPlcConnection.java   |  62 ++++-----
 .../ads/connection/AdsSerialPlcConnection.java     |   2 +-
 .../java/ads/connection/AdsTcpPlcConnection.java   |  44 +++----
 .../ads/model/{AdsAddress.java => AdsField.java}   |  25 ++--
 .../java/ads/model/AdsSubscriptionHandle.java      |   4 +-
 ...mbolicAdsAddress.java => SymbolicAdsField.java} |  23 ++--
 .../plc4x/java/ads/protocol/Plc4x2AdsProtocol.java | 100 +++++++--------
 .../apache/plc4x/java/ads/ManualPlc4XAdsTest.java  |  12 +-
 .../connection/AdsAbstractPlcConnectionTest.java   |  32 ++---
 .../ads/connection/AdsSerialPlcConnectionTest.java |  32 ++---
 .../ads/connection/AdsTcpPlcConnectionTests.java   |  34 ++---
 .../{AdsAddressTest.java => AdsFieldTest.java}     |  39 +++---
 .../java/ads/protocol/Plc4x2AdsProtocolTest.java   |  10 +-
 .../plc4x/java/base/PlcMessageToMessageCodec.java  |   2 +-
 .../base/connection/AbstractPlcConnection.java     |   9 +-
 .../plc4x/java/base/events/ConnectEvent.java       |   2 +-
 .../plc4x/java/base/events/ConnectedEvent.java     |   2 +-
 .../{RawMessage.java => PlcRawMessage.java}        |  12 +-
 .../java/base/messages/PlcRequestContainer.java    |   6 +-
 .../base/messages/PlcRequestContainerTest.java     |   4 +-
 .../plc4x/java/base/connection/MockConnection.java |   4 +-
 .../connection/BaseEtherNetIpPlcConnection.java    |  14 +--
 ...EtherNetIpAddress.java => EtherNetIpField.java} |  20 +--
 .../ethernetip/netty/Plc4XEtherNetIpProtocol.java  |  34 ++---
 .../ethernetip/src/site/asciidoc/index.adoc        |   2 +-
 .../java/ethernetip/ManualPlc4XEtherNetIpTest.java |  12 +-
 .../modbus/connection/BaseModbusPlcConnection.java |  32 ++---
 ...CoilModbusAddress.java => CoilModbusField.java} |  14 +--
 ...ress.java => MaskWriteRegisterModbusField.java} |  20 +--
 .../model/{ModbusAddress.java => ModbusField.java} |  12 +-
 ...ess.java => ReadDiscreteInputsModbusField.java} |  14 +--
 ...s.java => ReadHoldingRegistersModbusField.java} |  14 +--
 ...ess.java => ReadInputRegistersModbusField.java} |  14 +--
 .../java/modbus/model/RegisterModbusAddress.java   |  43 -------
 ...ModbusAddress.java => RegisterModbusField.java} |  15 +--
 .../java/modbus/netty/Plc4XModbusProtocol.java     |  92 +++++++-------
 .../plc4x/java/modbus/ManualPlc4XModbusTest.java   |  20 +--
 .../connection/ModbusSerialPlcConnectionTest.java  |  44 +++----
 .../connection/ModbusTcpPlcConnectionTests.java    |  48 +++----
 .../java/modbus/netty/Plc4XModbusProtocolTest.java |  78 ++++++------
 .../java/isoontcp/netty/model/IsoOnTcpMessage.java |   4 +-
 .../isotp/netty/events/IsoTPConnectedEvent.java    |   2 +-
 .../plc4x/java/isotp/netty/model/IsoTPMessage.java |   4 +-
 .../java/isotp/netty/model/tpdus/DataTpdu.java     |   4 +-
 .../plc4x/java/isotp/netty/model/tpdus/Tpdu.java   |   8 +-
 .../plc4x/java/s7/connection/S7PlcConnection.java  |  26 ++--
 .../model/{S7BitAddress.java => S7BitField.java}   |  14 +--
 ...DataBlockAddress.java => S7DataBlockField.java} |  18 +--
 .../java/s7/model/{S7Address.java => S7Field.java} |  20 +--
 .../plc4x/java/s7/netty/Plc4XS7Protocol.java       |  94 +++++++-------
 .../org/apache/plc4x/java/s7/netty/S7Protocol.java |   2 +-
 .../java/s7/netty/events/S7ConnectedEvent.java     |   2 +-
 .../java/s7/netty/events/S7IdentifiedEvent.java    |   2 +-
 .../java/s7/netty/model/messages/S7Message.java    |   8 +-
 .../s7/netty/model/messages/S7RequestMessage.java  |   4 +-
 .../messages/SetupCommunicationRequestMessage.java |   4 +-
 .../plc4x/java/s7/netty/model/types/SslId.java     |   1 -
 .../strategies/DefaultS7MessageProcessor.java      |   8 +-
 .../s7/netty/strategies/S7MessageProcessor.java    |   2 +-
 .../s7/netty/util/S7RequestSizeCalculator.java     |   2 +-
 .../s7/netty/util/S7ResponseSizeEstimator.java     |   2 +-
 .../plc4x/java/s7/netty/util/S7SizeHelper.java     |   2 +-
 .../plc4x/java/s7/utils/S7TsapIdEncoder.java       |   2 +-
 .../plc4x/java/isotp/netty/IsoTPProtocolTest.java  |   2 +-
 .../isotp/netty/model/params/ParameterTests.java   |   2 +-
 .../netty/model/params/TsapParameterTests.java     |   4 +-
 .../isotp/netty/model/types/IsotpTypeTests.java    |   2 +-
 .../org/apache/plc4x/java/s7/PcapGenerator.java    |   2 +-
 .../apache/plc4x/java/s7/S7PlcReaderSample.java    |   6 +-
 .../org/apache/plc4x/java/s7/S7PlcScanner.java     |  13 +-
 .../org/apache/plc4x/java/s7/S7PlcTestConsole.java |   9 +-
 .../apache/plc4x/java/s7/S7PlcWriterSample.java    |   7 +-
 .../java/s7/connection/S7PlcConnectionTests.java   |  49 ++++----
 .../{S7AddressTests.java => S7FieldTests.java}     |  30 ++---
 .../plc4x/java/s7/netty/Plc4XS7ProtocolTest.java   |  26 ++--
 .../s7/netty/model/params/S7ParameterTests.java    |   2 +-
 .../java/s7/netty/model/types/S7TypeTests.java     |   2 -
 .../strategies/DefaultS7MessageProcessorTest.java  |  68 +++++-----
 .../plc4x/java/s7/netty/util/S7SizeHelperTest.java |   2 +-
 145 files changed, 1267 insertions(+), 1345 deletions(-)

diff --git a/examples/azure/src/main/java/org/apache/plc4x/java/examples/azure/iothub/S7PlcToAzureIoTHubSample.java b/examples/azure/src/main/java/org/apache/plc4x/java/examples/azure/iothub/S7PlcToAzureIoTHubSample.java
index 10ca886..7c399e0 100644
--- a/examples/azure/src/main/java/org/apache/plc4x/java/examples/azure/iothub/S7PlcToAzureIoTHubSample.java
+++ b/examples/azure/src/main/java/org/apache/plc4x/java/examples/azure/iothub/S7PlcToAzureIoTHubSample.java
@@ -26,7 +26,7 @@ import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -54,7 +54,7 @@ public class S7PlcToAzureIoTHubSample {
 
             PlcReader plcReader = plcConnection.getReader().orElseThrow(IllegalStateException::new);
 
-            Address outputs = plcConnection.parseAddress(addressString);
+            PlcField outputs = plcConnection.prepareField(addressString);
 
             while (!Thread.currentThread().isInterrupted()) {
                 // Simulate telemetry.
diff --git a/examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/connection/DummyConnection.java b/examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/connection/DummyConnection.java
index 3cbfd45..36c6e5b 100644
--- a/examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/connection/DummyConnection.java
+++ b/examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/connection/DummyConnection.java
@@ -27,11 +27,11 @@ 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.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.base.connection.AbstractPlcConnection;
 import org.apache.plc4x.java.base.connection.TcpSocketChannelFactory;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
-import org.apache.plc4x.java.examples.dummydriver.model.DummyAddress;
+import org.apache.plc4x.java.examples.dummydriver.model.DummyField;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,8 +60,8 @@ public class DummyConnection extends AbstractPlcConnection implements PlcReader,
     }
 
     @Override
-    public Address parseAddress(String addressString) {
-        return new DummyAddress(Integer.parseInt(addressString));
+    public PlcField prepareField(String fieldString) {
+        return new DummyField(Integer.parseInt(fieldString));
     }
 
     @Override
diff --git a/examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/model/DummyAddress.java b/examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/model/DummyField.java
similarity index 87%
rename from examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/model/DummyAddress.java
rename to examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/model/DummyField.java
index 9ada925..ab45b4f 100644
--- a/examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/model/DummyAddress.java
+++ b/examples/dummy-driver/src/main/java/org/apache/plc4x/java/examples/dummydriver/model/DummyField.java
@@ -18,13 +18,13 @@ under the License.
 */
 package org.apache.plc4x.java.examples.dummydriver.model;
 
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
-public class DummyAddress implements Address {
+public class DummyField implements PlcField {
 
     private final int address;
 
-    public DummyAddress(int address) {
+    public DummyField(int address) {
         this.address = address;
     }
 
diff --git a/examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/KafkaBridge.java b/examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/KafkaBridge.java
index f371b41..509687e 100644
--- a/examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/KafkaBridge.java
+++ b/examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/KafkaBridge.java
@@ -39,10 +39,10 @@ import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.examples.kafkabridge.model.PlcAddress;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.examples.kafkabridge.model.PlcFieldConfig;
 import org.apache.plc4x.java.examples.kafkabridge.model.Configuration;
 import org.apache.plc4x.java.examples.kafkabridge.model.PlcMemoryBlock;
 import org.slf4j.Logger;
@@ -79,14 +79,14 @@ public class KafkaBridge {
         Topology top = dp.newTopology("kafka-bridge");
 
         // Build the entire request.
-        Map<ReadRequestItem, String> names = new HashMap<>();
+        Map<PlcReadRequestItem, String> names = new HashMap<>();
         PlcReadRequest readRequest = new PlcReadRequest();
         for(PlcMemoryBlock plcMemoryBlock : config.getPlcConfig().getPlcMemoryBlocks()) {
-            for (PlcAddress address : config.getPlcConfig().getPlcAddresses()) {
+            for (PlcFieldConfig address : config.getPlcConfig().getPlcFields()) {
                 try {
-                    Address plcAddress = plcAdapter.parseAddress(
+                    PlcField field = plcAdapter.prepareField(
                             "DATA_BLOCKS/" + plcMemoryBlock.getAddress() + "/" + address.getAddress());
-                    ReadRequestItem readItem = new ReadRequestItem<>(address.getType(), plcAddress,
+                    PlcReadRequestItem readItem = new PlcReadRequestItem<>(address.getType(), field,
                             +address.getSize());
                     readRequest.addItem(readItem);
                     names.put(readItem, plcMemoryBlock.getName() + "/" + address.getName());
@@ -109,7 +109,7 @@ public class KafkaBridge {
         // Convert the byte into a string.
         TStream<String> jsonSource = source.map(value -> {
             JsonObject jsonObject = new JsonObject();
-            for (ReadResponseItem<?> readResponseItem : value.getResponseItems()) {
+            for (PlcReadResponseItem<?> readResponseItem : value.getResponseItems()) {
                 String name = names.get(readResponseItem.getRequestItem());
                 if(readResponseItem.getValues().size() == 1) {
                     jsonObject.addProperty(name, Byte.toString((Byte) readResponseItem.getValues().get(0)));
diff --git a/examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/model/PlcConfig.java b/examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/model/PlcConfig.java
index aabc9c6..3b5a681 100644
--- a/examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/model/PlcConfig.java
+++ b/examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/model/PlcConfig.java
@@ -28,7 +28,7 @@ public class PlcConfig {
     @JsonProperty("memory-blocks")
     private List<PlcMemoryBlock> plcMemoryBlocks;
     @JsonProperty("addresses")
-    private List<PlcAddress> plcAddresses;
+    private List<PlcFieldConfig> plcFields;
 
     public String getConnection() {
         return connection;
@@ -46,12 +46,12 @@ public class PlcConfig {
         this.plcMemoryBlocks = plcMemoryBlocks;
     }
 
-    public List<PlcAddress> getPlcAddresses() {
-        return plcAddresses;
+    public List<PlcFieldConfig> getPlcFields() {
+        return plcFields;
     }
 
-    public void setPlcAddresses(List<PlcAddress> plcAddresses) {
-        this.plcAddresses = plcAddresses;
+    public void setPlcFields(List<PlcFieldConfig> plcFields) {
+        this.plcFields = plcFields;
     }
 
 }
diff --git a/examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/model/PlcAddress.java b/examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/model/PlcFieldConfig.java
similarity index 98%
rename from examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/model/PlcAddress.java
rename to examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/model/PlcFieldConfig.java
index 90d63de..f3202cf 100644
--- a/examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/model/PlcAddress.java
+++ b/examples/kafka-bridge/src/main/java/org/apache/plc4x/java/examples/kafkabridge/model/PlcFieldConfig.java
@@ -18,7 +18,7 @@ under the License.
 */
 package org.apache.plc4x.java.examples.kafkabridge.model;
 
-public class PlcAddress {
+public class PlcFieldConfig {
 
     private String name;
     private String description;
diff --git a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
index e04e016..8ce7dcd 100644
--- a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
+++ b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
@@ -33,7 +33,7 @@ import org.apache.plc4x.java.api.messages.items.SubscriptionEventItem;
 import org.apache.plc4x.java.api.messages.items.SubscriptionRequestCyclicItem;
 import org.apache.plc4x.java.api.messages.items.SubscriptionResponseItem;
 import org.apache.plc4x.java.api.messages.items.UnsubscriptionRequestItem;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,7 +50,7 @@ public class Plc4XConsumer extends ServiceSupport implements Consumer, java.util
     private AsyncProcessor processor;
     private ExceptionHandler exceptionHandler;
     private PlcConnection plcConnection;
-    private Address address;
+    private PlcField field;
     private Class<?> dataType;
     private PlcSubscriptionResponse subscriptionResponse;
 
@@ -62,7 +62,7 @@ public class Plc4XConsumer extends ServiceSupport implements Consumer, java.util
         this.exceptionHandler = new LoggingExceptionHandler(endpoint.getCamelContext(), getClass());
         String plc4xURI = endpoint.getEndpointUri().replaceFirst("plc4x:/?/?", "");
         this.plcConnection = endpoint.getPlcDriverManager().getConnection(plc4xURI);
-        this.address = plcConnection.parseAddress(endpoint.getAddress());
+        this.field = plcConnection.prepareField(endpoint.getAddress());
     }
 
     @Override
@@ -87,7 +87,7 @@ public class Plc4XConsumer extends ServiceSupport implements Consumer, java.util
     protected void doStart() throws InterruptedException, ExecutionException, TimeoutException {
         PlcSubscriptionRequest request = new PlcSubscriptionRequest();
         @SuppressWarnings("unchecked")
-        SubscriptionRequestCyclicItem subscriptionRequestCyclicItem = new SubscriptionRequestCyclicItem(dataType, address, TimeUnit.SECONDS, 3, this);
+        SubscriptionRequestCyclicItem subscriptionRequestCyclicItem = new SubscriptionRequestCyclicItem(dataType, field, TimeUnit.SECONDS, 3, this);
         request.addItem(subscriptionRequestCyclicItem);
         CompletableFuture<PlcSubscriptionResponse> subscriptionFuture = getSubscriber().subscribe(request);
         subscriptionResponse = subscriptionFuture.get(5, TimeUnit.SECONDS);
diff --git a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XPollingConsumer.java b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XPollingConsumer.java
index 603f76e..57be55e 100644
--- a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XPollingConsumer.java
+++ b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XPollingConsumer.java
@@ -29,7 +29,7 @@ import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,7 +45,7 @@ public class Plc4XPollingConsumer extends ServiceSupport implements PollingConsu
     private Plc4XEndpoint endpoint;
     private ExceptionHandler exceptionHandler;
     private PlcConnection plcConnection;
-    private Address address;
+    private PlcField field;
     private Class dataType;
 
 
@@ -55,7 +55,7 @@ public class Plc4XPollingConsumer extends ServiceSupport implements PollingConsu
         this.exceptionHandler = new LoggingExceptionHandler(endpoint.getCamelContext(), getClass());
         String plc4xURI = endpoint.getEndpointUri().replaceFirst("plc4x:/?/?", "");
         this.plcConnection = endpoint.getPlcDriverManager().getConnection(plc4xURI);
-        this.address = plcConnection.parseAddress(endpoint.getAddress());
+        this.field = plcConnection.prepareField(endpoint.getAddress());
     }
 
     @Override
@@ -79,7 +79,7 @@ public class Plc4XPollingConsumer extends ServiceSupport implements PollingConsu
     @Override
     public Exchange receive() {
         Exchange exchange = endpoint.createExchange();
-        CompletableFuture<? extends PlcReadResponse> read = getReader().read(new PlcReadRequest(dataType, address));
+        CompletableFuture<? extends PlcReadResponse> read = getReader().read(new PlcReadRequest(dataType, field));
         try {
             PlcReadResponse plcReadResponse = read.get();
             exchange.getIn().setBody(unwrapIfSingle(plcReadResponse.getResponseItems()));
@@ -97,7 +97,7 @@ public class Plc4XPollingConsumer extends ServiceSupport implements PollingConsu
     @Override
     public Exchange receive(long timeout) {
         Exchange exchange = endpoint.createExchange();
-        CompletableFuture<? extends PlcReadResponse> read = getReader().read(new PlcReadRequest(dataType, address));
+        CompletableFuture<? extends PlcReadResponse> read = getReader().read(new PlcReadRequest(dataType, field));
         try {
             PlcReadResponse plcReadResponse = read.get(timeout, TimeUnit.MILLISECONDS);
             exchange.getIn().setBody(unwrapIfSingle(plcReadResponse.getResponseItems()));
diff --git a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XProducer.java b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XProducer.java
index 3a6751f..0995a24 100644
--- a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XProducer.java
+++ b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XProducer.java
@@ -27,8 +27,8 @@ import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
@@ -52,18 +52,18 @@ public class Plc4XProducer extends DefaultAsyncProducer {
     @Override
     public void process(Exchange exchange) throws Exception {
         Message in = exchange.getIn();
-        Address address = in.getHeader(Constants.ADDRESS_HEADER, Address.class);
+        PlcField field = in.getHeader(Constants.ADDRESS_HEADER, PlcField.class);
         Object body = in.getBody();
         PlcWriteRequest.Builder builder = PlcWriteRequest.builder();
         if (body instanceof List) {
             List<?> bodyList = in.getBody(List.class);
             bodyList
                 .stream()
-                .map(o -> (WriteRequestItem<?>) new WriteRequestItem(o.getClass(), address, o))
+                .map(o -> (PlcWriteRequestItem<?>) new PlcWriteRequestItem(o.getClass(), field, o))
                 .forEach(builder::addItem);
         } else {
             Object value = in.getBody(Object.class);
-            builder.addItem(address, value);
+            builder.addItem(field, value);
         }
         PlcWriter plcWriter = plcConnection.getWriter().orElseThrow(() -> new IllegalArgumentException("Writer for driver not found"));
         CompletableFuture<? extends PlcWriteResponse> completableFuture = plcWriter.write(builder.build());
diff --git a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/ResponseItemTypeConverter.java b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/ResponseItemTypeConverter.java
index e99d0c1..467768c 100644
--- a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/ResponseItemTypeConverter.java
+++ b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/ResponseItemTypeConverter.java
@@ -19,7 +19,7 @@
 package org.apache.plc4x.camel;
 
 import org.apache.camel.Converter;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
 
 import java.util.stream.Collectors;
 
@@ -27,7 +27,7 @@ import java.util.stream.Collectors;
 public class ResponseItemTypeConverter {
 
     @Converter
-    public static String toString(ReadResponseItem<?> responseItem) {
+    public static String toString(PlcReadResponseItem<?> responseItem) {
         return responseItem.getValues().stream().map(String::valueOf).collect(Collectors.joining(","));
     }
 
diff --git a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/MockDriver.java b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/MockDriver.java
index f7c00cb..d86bd10 100644
--- a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/MockDriver.java
+++ b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/MockDriver.java
@@ -23,16 +23,14 @@ import org.apache.plc4x.java.api.authentication.PlcAuthentication;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcSubscriber;
 import org.apache.plc4x.java.api.connection.PlcWriter;
-import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.exceptions.PlcException;
-import org.apache.plc4x.java.api.messages.PlcSubscriptionEvent;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
 import org.apache.plc4x.java.api.messages.items.SubscriptionEventItem;
 import org.apache.plc4x.java.api.messages.items.SubscriptionResponseItem;
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.api.model.SubscriptionHandle;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -70,7 +68,7 @@ public class MockDriver implements PlcDriver {
         // Mock a connection.
         PlcConnection plcConnectionMock = mock(PlcConnection.class, RETURNS_DEEP_STUBS);
         try {
-            when(plcConnectionMock.parseAddress(anyString())).thenReturn(mock(Address.class));
+            when(plcConnectionMock.prepareField(anyString())).thenReturn(mock(PlcField.class));
         } catch (PlcException e) {
             throw new RuntimeException(e);
         }
@@ -96,7 +94,7 @@ public class MockDriver implements PlcDriver {
                         }
                     });
                     return new SubscriptionResponseItem<>(subscriptionRequestItem,
-                        mock(SubscriptionHandle.class, RETURNS_DEEP_STUBS), ResponseCode.OK);
+                        mock(PlcSubscriptionHandle.class, RETURNS_DEEP_STUBS), PlcResponseCode.OK);
                 }).collect(Collectors.toList());
             PlcSubscriptionResponse response = new PlcSubscriptionResponse(subscriptionRequest, responseItems);
             CompletableFuture<PlcSubscriptionResponse> responseFuture = new CompletableFuture<>();
diff --git a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/Plc4XComponentTest.java b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/Plc4XComponentTest.java
index 47ae8a0..6af63c5 100644
--- a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/Plc4XComponentTest.java
+++ b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/Plc4XComponentTest.java
@@ -21,7 +21,7 @@ package org.apache.plc4x.camel;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.junit.Test;
 
 import java.util.Arrays;
@@ -46,13 +46,13 @@ public class Plc4XComponentTest extends CamelTestSupport {
         return new RouteBuilder() {
             public void configure() {
                 from("direct:plc4x")
-                    .setHeader(Constants.ADDRESS_HEADER, constant(new Address() {
+                    .setHeader(Constants.ADDRESS_HEADER, constant(new PlcField() {
                     }))
                     .setBody(constant((byte) 0x0))
                     .to("plc4x:mock:10.10.10.1/1/1")
                     .to("mock:result");
                 from("direct:plc4x2")
-                    .setHeader(Constants.ADDRESS_HEADER, constant(new Address() {
+                    .setHeader(Constants.ADDRESS_HEADER, constant(new PlcField() {
                     }))
                     .setBody(constant(Arrays.asList((byte) 0x0, (byte) 0x1, (byte) 0x2, (byte) 0x3)))
                     .to("plc4x:mock:10.10.10.1/1/1")
diff --git a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/Plc4XProducerTest.java b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/Plc4XProducerTest.java
index 50726d1..9de7d23 100644
--- a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/Plc4XProducerTest.java
+++ b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/Plc4XProducerTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.ExchangePattern;
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcWriter;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -51,8 +51,8 @@ public class Plc4XProducerTest {
         when(endpointMock.getPlcDriverManager()).thenReturn(plcDriverManagerMock);
         SUT = new Plc4XProducer(endpointMock);
         testExchange = mock(Exchange.class, RETURNS_DEEP_STUBS);
-        when(testExchange.getIn().getHeader(eq(Constants.ADDRESS_HEADER), eq(Address.class)))
-            .thenReturn(mock(Address.class));
+        when(testExchange.getIn().getHeader(eq(Constants.ADDRESS_HEADER), eq(PlcField.class)))
+            .thenReturn(mock(PlcField.class));
     }
 
     @Test
diff --git a/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java b/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
index 9a6d1c3..41a1761 100644
--- a/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
+++ b/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcConnectionAdapter.java
@@ -33,7 +33,7 @@ import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -102,14 +102,14 @@ public class PlcConnectionAdapter implements AutoCloseable {
         }
     }
 
-    public Address parseAddress(String addressString) throws PlcException {
-        return getConnection().parseAddress(addressString);
+    public PlcField prepareField(String fieldString) throws PlcException {
+        return getConnection().prepareField(fieldString);
     }
 
-    <T> Supplier<T> newSupplier(Class<T> datatype, String addressStr) {
+    <T> Supplier<T> newSupplier(Class<T> datatype, String fieldString) {
         PlcConnectionAdapter.checkDatatype(datatype);
         // satisfy sonar's "Reduce number of anonymous class lines" code smell
-        return new MySupplier<>(datatype, addressStr);
+        return new MySupplier<>(datatype, fieldString);
     }
     
     private class MySupplier<T> implements Supplier<T> {
@@ -125,18 +125,18 @@ public class PlcConnectionAdapter implements AutoCloseable {
         @Override
         public T get() {
             PlcConnection connection = null;
-            Address address = null;
+            PlcField field = null;
             try {
                 connection = getConnection();
-                address = connection.parseAddress(addressStr);
+                field = connection.prepareField(addressStr);
                 PlcReader reader = connection.getReader()
                   .orElseThrow(() -> new NullPointerException("No reader available"));
-                TypeSafePlcReadRequest<T> readRequest = PlcConnectionAdapter.newPlcReadRequest(datatype, address);
+                TypeSafePlcReadRequest<T> readRequest = PlcConnectionAdapter.newPlcReadRequest(datatype, field);
                 return reader.read(readRequest).get().getResponseItem()
                   .orElseThrow(() -> new IllegalStateException("No response available"))
                   .getValues().get(0);
             } catch (Exception e) {
-                logger.error("reading from plc device {} {} failed", connection, address, e);
+                logger.error("reading from plc device {} {} failed", connection, field, e);
                 return null;
             }
         }
@@ -170,16 +170,16 @@ public class PlcConnectionAdapter implements AutoCloseable {
             @Override
             public void accept(T arg0) {
                 PlcConnection connection = null;
-                Address address = null;
+                PlcField field = null;
                 try {
                     connection = getConnection();
-                    address = connection.parseAddress(addressStr);
+                    field = connection.prepareField(addressStr);
                     PlcWriter writer = connection.getWriter()
                         .orElseThrow(() -> new NullPointerException("No writer available"));
-                    PlcWriteRequest writeReq = PlcConnectionAdapter.newPlcWriteRequest(address, arg0);
+                    PlcWriteRequest writeReq = PlcConnectionAdapter.newPlcWriteRequest(field, arg0);
                     writer.write(writeReq).get();
                 } catch (Exception e) {
-                    logger.error("writing to plc device {} {} failed", connection, address, e);
+                    logger.error("writing to plc device {} {} failed", connection, field, e);
                 }
             }
 
@@ -194,18 +194,18 @@ public class PlcConnectionAdapter implements AutoCloseable {
             @Override
             public void accept(JsonObject jo) {
                 PlcConnection connection = null;
-                Address address = null;
+                PlcField field = null;
                 try {
                     connection = getConnection();
                     String addressStr = addressFn.apply(jo);
-                    address = connection.parseAddress(addressStr);
+                    field = connection.prepareField(addressStr);
                     T value = valueFn.apply(jo);
                     PlcWriter writer = connection.getWriter()
                         .orElseThrow(() -> new NullPointerException("No writer available"));
-                    PlcWriteRequest writeReq = newPlcWriteRequest(address, value);
+                    PlcWriteRequest writeReq = newPlcWriteRequest(field, value);
                     writer.write(writeReq).get();
                 } catch (Exception e) {
-                    logger.error("writing to plc device {} {} failed", connection, address, e);
+                    logger.error("writing to plc device {} {} failed", connection, field, e);
                 }
             }
 
@@ -221,13 +221,13 @@ public class PlcConnectionAdapter implements AutoCloseable {
     }
 
     @SuppressWarnings("unchecked")
-    static <T> TypeSafePlcWriteRequest<T> newPlcWriteRequest(Address address, T value) {
+    static <T> TypeSafePlcWriteRequest<T> newPlcWriteRequest(PlcField field, T value) {
         Class<T> cls = (Class<T>) value.getClass();
-        return new TypeSafePlcWriteRequest<>(cls, address, value);
+        return new TypeSafePlcWriteRequest<>(cls, field, value);
     }
 
-    static <T> TypeSafePlcReadRequest<T> newPlcReadRequest(Class<T> datatype, Address address) {
-        return new TypeSafePlcReadRequest<>(datatype, address);
+    static <T> TypeSafePlcReadRequest<T> newPlcReadRequest(Class<T> datatype, PlcField field) {
+        return new TypeSafePlcReadRequest<>(datatype, field);
     }
 
 }
diff --git a/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcFunctions.java b/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcFunctions.java
index 43fe00d..526c805 100644
--- a/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcFunctions.java
+++ b/integrations/apache-edgent/src/main/java/org/apache/plc4x/edgent/PlcFunctions.java
@@ -168,7 +168,7 @@ public class PlcFunctions {
    * </ul>
    * 
    * @param adapter the @{link PlcConnectionAdapter}
-   * @param addressFn {@code Function} the returns a device {@code Address} from a {@code JsonObject}
+   * @param addressFn {@code Function} the returns a device {@code PlcField} from a {@code JsonObject}
    * @param valueFn {@code Function} the returns a {@code Value} from a {@code JsonObject}
    * @return the {@code Consumer<JsonObject>}
    *
diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java
index 3fd4e0d..e8279f5 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java
@@ -36,18 +36,18 @@ import java.util.concurrent.ExecutionException;
 import org.apache.edgent.function.Consumer;
 import org.apache.edgent.function.Function;
 import org.apache.edgent.function.Supplier;
-import org.apache.plc4x.edgent.mock.MockAddress;
+import org.apache.plc4x.edgent.mock.MockField;
 import org.apache.plc4x.edgent.mock.MockConnection;
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.test.FastTests;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -56,7 +56,7 @@ import com.google.gson.JsonObject;
 
 public class PlcConnectionAdapterTest {
 
-    protected MockConnection getMockConnection() throws PlcConnectionException {
+    private MockConnection getMockConnection() throws PlcConnectionException {
         return (MockConnection) new PlcDriverManager().getConnection("mock-for-edgent-integration://some-cool-url");
     }
 
@@ -92,7 +92,7 @@ public class PlcConnectionAdapterTest {
 
     @Test
     @Category(FastTests.class)
-    public void testCheckDatatype() throws Exception {
+    public void testCheckDatatype() {
         PlcConnectionAdapter.checkDatatype(Boolean.class);
         PlcConnectionAdapter.checkDatatype(Byte.class);
         PlcConnectionAdapter.checkDatatype(Short.class);
@@ -115,7 +115,7 @@ public class PlcConnectionAdapterTest {
     private <T> void checkRead(MockConnection connection, TypeSafePlcReadRequest<T> request, T value) throws InterruptedException, ExecutionException {
         // this is really a tests of our mock tooling but knowing it's behaving as expected
         // will help identify problems in the adapter/supplier/consumer
-        connection.setDataValue(request.getCheckedReadRequestItems().get(0).getAddress(), value);
+        connection.setDataValue(request.getCheckedReadRequestItems().get(0).getField(), value);
 
         CompletableFuture<TypeSafePlcReadResponse<T>> cf = connection.read(request);
 
@@ -127,14 +127,14 @@ public class PlcConnectionAdapterTest {
     private <T> void checkWrite(MockConnection connection, TypeSafePlcWriteRequest<T> request, T value) throws InterruptedException, ExecutionException {
         // this is really a tests of our mock tooling but knowing it's behaving as expected
         // will help identify problems in the adapter/supplier/consumer
-        connection.setDataValue(request.getRequestItems().get(0).getAddress(), value);
+        connection.setDataValue(request.getRequestItems().get(0).getField(), value);
 
         CompletableFuture<TypeSafePlcWriteResponse<T>> cf = connection.write(request);
 
         assertThat(cf.isDone(), is(true));
         PlcWriteResponse response = cf.get();
         assertThat(response, notNullValue());
-        Object writtenData = connection.getDataValue(request.getRequestItems().get(0).getAddress());
+        Object writtenData = connection.getDataValue(request.getRequestItems().get(0).getField());
         if (writtenData.getClass().isArray()) {
             writtenData = Array.get(writtenData, 0);
         }
@@ -153,70 +153,70 @@ public class PlcConnectionAdapterTest {
     @Category(FastTests.class)
     public void testNewPlcReadRequest() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
-        MockAddress address = new MockAddress(addressStr);
+        MockField address = new MockField(addressStr);
         PlcConnectionAdapter adapter = new PlcConnectionAdapter(getMockConnection());
         MockConnection connection = (MockConnection) adapter.getConnection();
 
         {
             TypeSafePlcReadRequest<Boolean> request = PlcConnectionAdapter.newPlcReadRequest(Boolean.class, address);
-            ReadRequestItem<Boolean> requestItem = request.getCheckedReadRequestItems().get(0);
+            PlcReadRequestItem<Boolean> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Boolean> dataType = requestItem.getDatatype();
             assertThat(dataType, equalTo(Boolean.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkRead(connection, request, true);
             checkRead(connection, request, false);
         }
         {
             TypeSafePlcReadRequest<Byte> request = PlcConnectionAdapter.newPlcReadRequest(Byte.class, address);
-            ReadRequestItem<Byte> requestItem = request.getCheckedReadRequestItems().get(0);
+            PlcReadRequestItem<Byte> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Byte> dataType = requestItem.getDatatype();
             assertThat(dataType, equalTo(Byte.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkRead(connection, request, (byte) 0x13);
             checkRead(connection, request, (byte) 0x23);
         }
         {
             TypeSafePlcReadRequest<Short> request = PlcConnectionAdapter.newPlcReadRequest(Short.class, address);
-            ReadRequestItem<Short> requestItem = request.getCheckedReadRequestItems().get(0);
+            PlcReadRequestItem<Short> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Short> dataType = requestItem.getDatatype();
             assertThat(dataType, equalTo(Short.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkRead(connection, request, (short) 13);
             checkRead(connection, request, (short) 23);
         }
         {
             TypeSafePlcReadRequest<Integer> request = PlcConnectionAdapter.newPlcReadRequest(Integer.class, address);
-            ReadRequestItem<Integer> requestItem = request.getCheckedReadRequestItems().get(0);
+            PlcReadRequestItem<Integer> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Integer> dataType = requestItem.getDatatype();
             assertThat(dataType, equalTo(Integer.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkRead(connection, request, 33);
             checkRead(connection, request, -133);
         }
         {
             TypeSafePlcReadRequest<Float> request = PlcConnectionAdapter.newPlcReadRequest(Float.class, address);
-            ReadRequestItem<Float> requestItem = request.getCheckedReadRequestItems().get(0);
+            PlcReadRequestItem<Float> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Float> dataType = requestItem.getDatatype();
             assertThat(dataType, equalTo(Float.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkRead(connection, request, 43.5f);
             checkRead(connection, request, -143.5f);
         }
         {
             TypeSafePlcReadRequest<String> request = PlcConnectionAdapter.newPlcReadRequest(String.class, address);
-            ReadRequestItem<String> requestItem = request.getCheckedReadRequestItems().get(0);
+            PlcReadRequestItem<String> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<String> dataType = requestItem.getDatatype();
             assertThat(dataType, equalTo(String.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkRead(connection, request, "ReadySetGo");
             checkRead(connection, request, "OneMoreTime");
         }
         {
             TypeSafePlcReadRequest<Calendar> request = PlcConnectionAdapter.newPlcReadRequest(Calendar.class, address);
-            ReadRequestItem<Calendar> requestItem = request.getCheckedReadRequestItems().get(0);
+            PlcReadRequestItem<Calendar> requestItem = request.getCheckedReadRequestItems().get(0);
             Class<Calendar> dataType = requestItem.getDatatype();
             assertThat(dataType, equalTo(Calendar.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkRead(connection, request, Calendar.getInstance());
         }
         adapter.close();
@@ -230,65 +230,65 @@ public class PlcConnectionAdapterTest {
     @Category(FastTests.class)
     public void testNewPlcWriteRequest() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
-        MockAddress address = new MockAddress(addressStr);
+        MockField address = new MockField(addressStr);
         PlcConnectionAdapter adapter = new PlcConnectionAdapter(getMockConnection());
         MockConnection connection = (MockConnection) adapter.getConnection();
 
         {
             TypeSafePlcWriteRequest<Boolean> request = PlcConnectionAdapter.newPlcWriteRequest(address, true);
-            WriteRequestItem<Boolean> requestItem = request.getCheckedRequestItems().get(0);
+            PlcWriteRequestItem<Boolean> requestItem = request.getCheckedRequestItems().get(0);
             Class<Boolean> dataType = requestItem.getDatatype();
             assertThat(dataType, typeCompatibleWith(Boolean.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkWrite(connection, request, true);
         }
         {
             TypeSafePlcWriteRequest<Byte> request = PlcConnectionAdapter.newPlcWriteRequest(address, (byte) 0x113);
-            WriteRequestItem<Byte> requestItem = request.getCheckedRequestItems().get(0);
+            PlcWriteRequestItem<Byte> requestItem = request.getCheckedRequestItems().get(0);
             Class<Byte> dataType = requestItem.getDatatype();
             assertThat(dataType, typeCompatibleWith(Byte.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkWrite(connection, request, (byte) 0x113);
         }
         {
             TypeSafePlcWriteRequest<Short> request = PlcConnectionAdapter.newPlcWriteRequest(address, (short) 113);
-            WriteRequestItem<Short> requestItem = request.getCheckedRequestItems().get(0);
+            PlcWriteRequestItem<Short> requestItem = request.getCheckedRequestItems().get(0);
             Class<Short> dataType = requestItem.getDatatype();
             assertThat(dataType, typeCompatibleWith(Short.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkWrite(connection, request, (short) 113);
         }
         {
             TypeSafePlcWriteRequest<Integer> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1033);
-            WriteRequestItem<Integer> requestItem = request.getCheckedRequestItems().get(0);
+            PlcWriteRequestItem<Integer> requestItem = request.getCheckedRequestItems().get(0);
             Class<Integer> dataType = requestItem.getDatatype();
             assertThat(dataType, typeCompatibleWith(Integer.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkWrite(connection, request, 1033);
         }
         {
             TypeSafePlcWriteRequest<Float> request = PlcConnectionAdapter.newPlcWriteRequest(address, 1043.5f);
-            WriteRequestItem<Float> requestItem = request.getCheckedRequestItems().get(0);
+            PlcWriteRequestItem<Float> requestItem = request.getCheckedRequestItems().get(0);
             Class<Float> dataType = requestItem.getDatatype();
             assertThat(dataType, typeCompatibleWith(Float.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkWrite(connection, request, 1043.5f);
         }
         {
             TypeSafePlcWriteRequest<String> request = PlcConnectionAdapter.newPlcWriteRequest(address, "A written value");
-            WriteRequestItem<String> requestItem = request.getCheckedRequestItems().get(0);
+            PlcWriteRequestItem<String> requestItem = request.getCheckedRequestItems().get(0);
             Class<String> dataType = requestItem.getDatatype();
             assertThat(dataType, typeCompatibleWith(String.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkWrite(connection, request, "A written value");
         }
         {
             Calendar calValue = Calendar.getInstance();
             TypeSafePlcWriteRequest<Calendar> request = PlcConnectionAdapter.newPlcWriteRequest(address, calValue);
-            WriteRequestItem<Calendar> requestItem = request.getCheckedRequestItems().get(0);
+            PlcWriteRequestItem<Calendar> requestItem = request.getCheckedRequestItems().get(0);
             Class<Calendar> dataType = requestItem.getDatatype();
             assertThat(dataType, typeCompatibleWith(Calendar.class));
-            assertThat(address, sameInstance(requestItem.getAddress()));
+            assertThat(address, sameInstance(requestItem.getField()));
             checkWrite(connection, request, calValue);
         }
         adapter.close();
@@ -301,7 +301,7 @@ public class PlcConnectionAdapterTest {
     @Category(FastTests.class)
     public void testNewSupplier() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
-        MockAddress address = new MockAddress(addressStr);
+        MockField address = new MockField(addressStr);
         PlcConnectionAdapter adapter = new PlcConnectionAdapter(getMockConnection());
         MockConnection connection = (MockConnection) adapter.getConnection();
 
@@ -340,7 +340,7 @@ public class PlcConnectionAdapterTest {
     @Category(FastTests.class)
     public void testNewSupplierNeg() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
-        MockAddress address = new MockAddress(addressStr);
+        MockField address = new MockField(addressStr);
         PlcConnectionAdapter adapter = new PlcConnectionAdapter(getMockConnection());
         MockConnection connection = (MockConnection) adapter.getConnection();
 
@@ -350,17 +350,17 @@ public class PlcConnectionAdapterTest {
         adapter.close();
     }
 
-    static <T> void checkSupplier(MockConnection connection, Address address, Supplier<T> supplier, Object... values) throws Exception {
-        checkSupplier(0, connection, address, supplier, values);
+    static <T> void checkSupplier(MockConnection connection, PlcField field, Supplier<T> supplier, Object... values) throws Exception {
+        checkSupplier(0, connection, field, supplier, values);
     }
 
-    private static <T> void checkSupplier(int readFailureCountTrigger, MockConnection connection, Address address, Supplier<T> supplier, Object... values) throws Exception {
+    private static <T> void checkSupplier(int readFailureCountTrigger, MockConnection connection, PlcField field, Supplier<T> supplier, Object... values) {
         // verify that a read failure doesn't kill the consumer
         // it logs (not verified) but returns null (as designed) and keeps working for the subsequent reads
         connection.setReadException(readFailureCountTrigger, "This is a mock read exception");
         int readCount = 0;
         for (Object value : values) {
-            connection.setDataValue(address, value);
+            connection.setDataValue(field, value);
             T readData = supplier.get();
             // System.out.println("checkSupplier"+(readFailureCountTrigger > 0 ? "NEG" : "")+": value:"+value+" readData:"+readData);
             if (readFailureCountTrigger <= 0)
@@ -381,7 +381,7 @@ public class PlcConnectionAdapterTest {
     @Category(FastTests.class)
     public void testNewConsumer1() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
-        MockAddress address = new MockAddress(addressStr);
+        MockField address = new MockField(addressStr);
         PlcConnectionAdapter adapter = new PlcConnectionAdapter(getMockConnection());
         MockConnection connection = (MockConnection) adapter.getConnection();
 
@@ -416,7 +416,7 @@ public class PlcConnectionAdapterTest {
     @Category(FastTests.class)
     public void testNewConsumer1Neg() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
-        MockAddress address = new MockAddress(addressStr);
+        MockField address = new MockField(addressStr);
         PlcConnectionAdapter adapter = new PlcConnectionAdapter(getMockConnection());
         MockConnection connection = (MockConnection) adapter.getConnection();
 
@@ -428,11 +428,11 @@ public class PlcConnectionAdapterTest {
         adapter.close();
     }
 
-    static <T> void checkConsumer(MockConnection connection, Address address, Consumer<T> consumer, Object... values) throws Exception {
-        checkConsumer(0, connection, address, consumer, values);
+    static <T> void checkConsumer(MockConnection connection, PlcField field, Consumer<T> consumer, Object... values) throws Exception {
+        checkConsumer(0, connection, field, consumer, values);
     }
 
-    private static <T> void checkConsumer(int writeFailureCountTrigger, MockConnection connection, Address address, Consumer<T> consumer, Object... values) throws Exception {
+    private static <T> void checkConsumer(int writeFailureCountTrigger, MockConnection connection, PlcField field, Consumer<T> consumer, Object... values) {
         // verify that a write failure doesn't kill the consumer
         // it logs (not verified) but keeps working for the subsequent writes
         connection.setWriteException(writeFailureCountTrigger, "This is a mock write exception");
@@ -442,7 +442,7 @@ public class PlcConnectionAdapterTest {
             @SuppressWarnings("unchecked")
             T tValue = (T) value;
             consumer.accept(tValue);
-            Object writtenData = connection.getDataValue(address);
+            Object writtenData = connection.getDataValue(field);
             if (List.class.isAssignableFrom(writtenData.getClass())) {
               @SuppressWarnings("unchecked")
               List<Object> writtenDataList = (List<Object>) writtenData;
@@ -471,7 +471,7 @@ public class PlcConnectionAdapterTest {
     @Category(FastTests.class)
     public void testNewConsumer2() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
-        MockAddress address = new MockAddress(addressStr);
+        MockField address = new MockField(addressStr);
         PlcConnectionAdapter adapter = new PlcConnectionAdapter(getMockConnection());
         MockConnection connection = (MockConnection) adapter.getConnection();
 
@@ -507,7 +507,7 @@ public class PlcConnectionAdapterTest {
     @Category(FastTests.class)
     public void testNewConsumer2Neg() throws Exception {
         String addressStr = "MyReadWriteAddress/0";
-        MockAddress address = new MockAddress(addressStr);
+        MockField address = new MockField(addressStr);
         PlcConnectionAdapter adapter = new PlcConnectionAdapter(getMockConnection());
         MockConnection connection = (MockConnection) adapter.getConnection();
 
@@ -521,11 +521,12 @@ public class PlcConnectionAdapterTest {
         adapter.close();
     }
 
-    static <T> void checkConsumerJson(MockConnection connection, MockAddress address, Consumer<JsonObject> consumer, Object... values) throws Exception {
+    static <T> void checkConsumerJson(MockConnection connection, MockField address, Consumer<JsonObject> consumer, Object... values) {
         checkConsumerJson(0, connection, address, consumer, values);
     }
 
-    private static <T> void checkConsumerJson(int writeFailureCountTrigger, MockConnection connection, MockAddress address, Consumer<JsonObject> consumer, Object... values) throws Exception {
+    private static <T> void checkConsumerJson(int writeFailureCountTrigger, MockConnection connection,
+                                              MockField field, Consumer<JsonObject> consumer, Object... values) {
         if (writeFailureCountTrigger > 0)
             connection.setWriteException(writeFailureCountTrigger, "This is a mock write exception");
         int writeCount = 0;
@@ -534,7 +535,7 @@ public class PlcConnectionAdapterTest {
 
             // build the JsonObject to consume
             JsonObject jo = new JsonObject();
-            jo.addProperty("address", address.getAddress());
+            jo.addProperty("address", field.getAddress());
             if (value instanceof Boolean)
                 jo.addProperty("value", (Boolean) value);
             else if (value instanceof Number)
@@ -544,10 +545,10 @@ public class PlcConnectionAdapterTest {
 
             consumer.accept(jo);
 
-            Object writtenData = connection.getDataValue(address);
+            Object writtenData = connection.getDataValue(field);
             if (writtenData.getClass().isArray()) {
                 Object[] writtenDataArray = (Object[]) writtenData;
-                writtenData = Array.get((Object[]) writtenDataArray, 0);
+                writtenData = Array.get(writtenDataArray, 0);
             }
             if (List.class.isAssignableFrom(writtenData.getClass())) {
                 @SuppressWarnings("unchecked")
diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcFunctionsTest.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcFunctionsTest.java
index 79df837..ebebb69 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcFunctionsTest.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/PlcFunctionsTest.java
@@ -21,7 +21,7 @@ package org.apache.plc4x.edgent;
 import org.apache.edgent.function.Consumer;
 import org.apache.edgent.function.Function;
 import org.apache.edgent.function.Supplier;
-import org.apache.plc4x.edgent.mock.MockAddress;
+import org.apache.plc4x.edgent.mock.MockField;
 import org.apache.plc4x.edgent.mock.MockConnection;
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
@@ -45,29 +45,29 @@ public class PlcFunctionsTest {
   @Category(FastTests.class)
   public void testSupplier() throws Exception {
     String addressStr = "MyReadWriteAddress/0";
-    MockAddress address = new MockAddress(addressStr);
+    MockField address = new MockField(addressStr);
     PlcConnectionAdapter adapter = new PlcConnectionAdapter(getMockConnection());
     MockConnection connection = (MockConnection) adapter.getConnection();
 
     Supplier<?> supplier;
     
     supplier = PlcFunctions.booleanSupplier(adapter, addressStr);
-    PlcConnectionAdapterTest.checkSupplier(connection, address, (Supplier<Boolean>)supplier, true, false);
+    PlcConnectionAdapterTest.checkSupplier(connection, address, supplier, true, false);
     
     supplier = PlcFunctions.byteSupplier(adapter, addressStr);
-    PlcConnectionAdapterTest.checkSupplier(connection, address, (Supplier<Byte>)supplier, (byte)0x1, (byte)0x2, (byte)0x3);
+    PlcConnectionAdapterTest.checkSupplier(connection, address, supplier, (byte)0x1, (byte)0x2, (byte)0x3);
 
     supplier = PlcFunctions.shortSupplier(adapter, addressStr);
-    PlcConnectionAdapterTest.checkSupplier(connection, address, (Supplier<Short>)supplier, (short)1, (short)2, (short)3);
+    PlcConnectionAdapterTest.checkSupplier(connection, address, supplier, (short)1, (short)2, (short)3);
 
     supplier = PlcFunctions.integerSupplier(adapter, addressStr);
-    PlcConnectionAdapterTest.checkSupplier(connection, address, (Supplier<Integer>)supplier, 1000, 1001, 1002);
+    PlcConnectionAdapterTest.checkSupplier(connection, address, supplier, 1000, 1001, 1002);
     
     supplier = PlcFunctions.floatSupplier(adapter, addressStr);
-    PlcConnectionAdapterTest.checkSupplier(connection, address, (Supplier<Float>)supplier, 1000.5f, 1001.5f, 1002.5f);
+    PlcConnectionAdapterTest.checkSupplier(connection, address, supplier, 1000.5f, 1001.5f, 1002.5f);
     
     supplier = PlcFunctions.stringSupplier(adapter, addressStr);
-    PlcConnectionAdapterTest.checkSupplier(connection, address, (Supplier<String>)supplier, "one", "two", "three");
+    PlcConnectionAdapterTest.checkSupplier(connection, address, supplier, "one", "two", "three");
     
     adapter.close();
   }
@@ -79,7 +79,7 @@ public class PlcFunctionsTest {
   @Category(FastTests.class)
   public void testNewConsumer1() throws Exception {
     String addressStr = "MyReadWriteAddress/0";
-    MockAddress address = new MockAddress(addressStr);
+    MockField address = new MockField(addressStr);
     PlcConnectionAdapter adapter = new PlcConnectionAdapter(getMockConnection());
     MockConnection connection = (MockConnection) adapter.getConnection();
 
@@ -113,7 +113,7 @@ public class PlcFunctionsTest {
   @Category(FastTests.class)
   public void testNewConsumer2() throws Exception {
     String addressStr = "MyReadWriteAddress/0";
-    MockAddress address = new MockAddress(addressStr);
+    MockField address = new MockField(addressStr);
     PlcConnectionAdapter adapter = new PlcConnectionAdapter(getMockConnection());
     MockConnection connection = (MockConnection) adapter.getConnection();
 
diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
index f0fc069..2ddd5c6 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockConnection.java
@@ -33,22 +33,22 @@ 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.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 
 public class MockConnection extends org.apache.plc4x.java.base.connection.MockConnection implements PlcReader, PlcWriter {
 
     private final String url;
     private final PlcAuthentication authentication;
-    private final Map<Address, Object> dataValueMap = new HashMap<>();
+    private final Map<PlcField, Object> dataValueMap = new HashMap<>();
     private long curReadCnt;
     private int readExceptionTriggerCount;
     private String readExceptionMsg;
@@ -73,8 +73,8 @@ public class MockConnection extends org.apache.plc4x.java.base.connection.MockCo
     }
 
     @Override
-    public Address parseAddress(String addressString) {
-        return new MockAddress(addressString);
+    public PlcField prepareField(String fieldString) {
+        return new MockField(fieldString);
     }
 
     @Override
@@ -86,12 +86,12 @@ public class MockConnection extends org.apache.plc4x.java.base.connection.MockCo
             cf.completeExceptionally(new PlcIoException(readExceptionMsg));
             return cf;
         }
-        List<ReadResponseItem<Object>> responseItems = new LinkedList<>();
-        for (ReadRequestItem<?> reqItem : readRequest.getRequestItems()) {
+        List<PlcReadResponseItem<Object>> responseItems = new LinkedList<>();
+        for (PlcReadRequestItem<?> reqItem : readRequest.getRequestItems()) {
             @SuppressWarnings("unchecked")
-            ReadRequestItem<Object> requestItem = (ReadRequestItem<Object>) reqItem;
-            ReadResponseItem<Object> responseItem = new ReadResponseItem<>(requestItem, ResponseCode.OK,
-                Collections.singletonList(getDataValue(requestItem.getAddress())));
+            PlcReadRequestItem<Object> requestItem = (PlcReadRequestItem<Object>) reqItem;
+            PlcReadResponseItem<Object> responseItem = new PlcReadResponseItem<>(requestItem, PlcResponseCode.OK,
+                Collections.singletonList(getDataValue(requestItem.getField())));
             responseItems.add(responseItem);
         }
         PlcReadResponse response;
@@ -115,11 +115,11 @@ public class MockConnection extends org.apache.plc4x.java.base.connection.MockCo
             cf.completeExceptionally(new PlcIoException(writeExceptionMsg));
             return cf;
         }
-        List<WriteResponseItem<Object>> responseItems = new LinkedList<>();
-        for (WriteRequestItem<?> reqItem : writeRequest.getRequestItems()) {
-            WriteRequestItem<Object> requestItem = (WriteRequestItem<Object>) reqItem;
-            setDataValue(requestItem.getAddress(), requestItem.getValues());
-            WriteResponseItem<Object> responseItem = new WriteResponseItem<>(requestItem, ResponseCode.OK);
+        List<PlcWriteResponseItem<Object>> responseItems = new LinkedList<>();
+        for (PlcWriteRequestItem<?> reqItem : writeRequest.getRequestItems()) {
+            PlcWriteRequestItem<Object> requestItem = (PlcWriteRequestItem<Object>) reqItem;
+            setDataValue(requestItem.getField(), requestItem.getValues());
+            PlcWriteResponseItem<Object> responseItem = new PlcWriteResponseItem<>(requestItem, PlcResponseCode.OK);
             responseItems.add(responseItem);
         }
         PlcWriteResponse response;
@@ -133,15 +133,15 @@ public class MockConnection extends org.apache.plc4x.java.base.connection.MockCo
         return CompletableFuture.completedFuture(response);
     }
 
-    public void setDataValue(Address address, Object o) {
-        dataValueMap.put(address, o);
+    public void setDataValue(PlcField field, Object o) {
+        dataValueMap.put(field, o);
     }
 
-    public Object getDataValue(Address address) {
-        return dataValueMap.get(address);
+    public Object getDataValue(PlcField field) {
+        return dataValueMap.get(field);
     }
 
-    public Map<Address, Object> getAllDataValues() {
+    public Map<PlcField, Object> getAllDataValues() {
         return dataValueMap;
     }
 
@@ -160,4 +160,5 @@ public class MockConnection extends org.apache.plc4x.java.base.connection.MockCo
         writeExceptionMsg = msg;
         curWriteCnt = 0;
     }
+
 }
diff --git a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockAddress.java b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockField.java
similarity index 81%
rename from integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockAddress.java
rename to integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockField.java
index 8f335a7..c735c58 100644
--- a/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockAddress.java
+++ b/integrations/apache-edgent/src/test/java/org/apache/plc4x/edgent/mock/MockField.java
@@ -18,12 +18,13 @@ under the License.
 */
 package org.apache.plc4x.edgent.mock;
 
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
+
+public class MockField implements PlcField {
 
-public class MockAddress implements Address {
   private final String address;
   
-  public MockAddress(String address) {
+  public MockField(String address) {
     this.address = address;
   }
   
@@ -33,14 +34,14 @@ public class MockAddress implements Address {
   
   @Override
   public String toString() {
-    return "mock address: "+address;
+    return "mock field: "+address;
   }
   
   @Override
   public boolean equals(Object o) {
     return o != null
-        && o instanceof MockAddress
-        && ((MockAddress)o).address.equals(this.address);
+        && o instanceof MockField
+        && ((MockField)o).address.equals(this.address);
   }
 
   @Override
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcConnection.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcConnection.java
index a3f5561..c09c08a 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcConnection.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcConnection.java
@@ -19,15 +19,15 @@ under the License.
 package org.apache.plc4x.java.api.connection;
 
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.Optional;
 
 /**
  * Interface defining the most basic methods a PLC4X connection should support.
  * This generally handles the connection establishment itself and the parsing of
- * address strings to the platform dependent Address instances.
+ * field address strings to the platform dependent PlcField instances.
  * <p>
  * The individual operations are then defined by other interfaces within this package.
  */
@@ -56,15 +56,13 @@ public interface PlcConnection extends AutoCloseable {
     void close() throws Exception;
 
     /**
-     * Parses a PLC/protocol dependent address string into an Address object.
+     * Parses a PLC/protocol dependent field string into an PlcField object.
      *
-     * @param addressString String representation of an address for the current type of PLC/protocol.
-     * @return Address object identifying an address for the current type of PLC/protocol.
-     * @throws PlcInvalidAddressException an exception if there was a problem parsing the address string.
+     * @param fieldString String representation of an address for the current type of PLC/protocol.
+     * @return PlcField object identifying a field for the current type of PLC/protocol.
+     * @throws PlcInvalidFieldException an exception if there was a problem parsing the address string.
      */
-    Address parseAddress(String addressString) throws PlcInvalidAddressException;
-
-    Optional<PlcLister> getLister();
+    PlcField prepareField(String fieldString) throws PlcInvalidFieldException;
 
     Optional<PlcReader> getReader();
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcLister.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcLister.java
deleted file mode 100644
index 513addb..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcLister.java
+++ /dev/null
@@ -1,25 +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.api.connection;
-
-/**
- * Interface implemented by any PlcConnection that is able to list resources.
- */
-public interface PlcLister {
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcSubscriber.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcSubscriber.java
index cd52d48..656a83e 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcSubscriber.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcSubscriber.java
@@ -19,10 +19,8 @@
 package org.apache.plc4x.java.api.connection;
 
 import org.apache.plc4x.java.api.messages.*;
-import org.apache.plc4x.java.api.model.Address;
 
 import java.util.concurrent.CompletableFuture;
-import java.util.function.Consumer;
 
 /**
  * Interface implemented by all PlcConnections that are able to receive notifications from remote resources.
@@ -30,7 +28,7 @@ import java.util.function.Consumer;
 public interface PlcSubscriber {
 
     /**
-     * Subscribes to addresses on the PLC.
+     * Subscribes to fields on the PLC.
      *
      * @param subscriptionRequest subscription request containing at least one subscription request item.
      * @return subscription response containing a subscription response item for each subscription request item.
@@ -38,7 +36,7 @@ public interface PlcSubscriber {
     CompletableFuture<PlcSubscriptionResponse> subscribe(PlcSubscriptionRequest subscriptionRequest);
 
     /**
-     * Unsubscribes from addresses on the PLC. For unsubscribing the unsubscription request uses the subscription
+     * Unsubscribes from fields on the PLC. For unsubscribing the unsubscription request uses the subscription
      * handle returned as part of the subscription response item.
      *
      * @param unsubscriptionRequest unsubscription request containing at least one unsubscription request item.
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcInvalidAddressException.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcInvalidFieldException.java
similarity index 62%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcInvalidAddressException.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcInvalidFieldException.java
index cdb6dee..ac8439c 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcInvalidAddressException.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcInvalidFieldException.java
@@ -21,21 +21,21 @@ package org.apache.plc4x.java.api.exceptions;
 import java.util.regex.Pattern;
 
 /**
- * Indicates an invalid Address.
+ * Indicates an invalid field address.
  */
-public class PlcInvalidAddressException extends PlcException {
+public class PlcInvalidFieldException extends PlcException {
     private static final long serialVersionUID = 1L;
 
-    public PlcInvalidAddressException(String addressToBeParsed) {
-        super(addressToBeParsed + " invalid");
+    public PlcInvalidFieldException(String fieldToBeParsed) {
+        super(fieldToBeParsed + " invalid");
     }
 
-    public PlcInvalidAddressException(String addressToBeParsed, Pattern pattern) {
-        super(addressToBeParsed + " doesn't match " + pattern);
+    public PlcInvalidFieldException(String fieldToBeParsed, Pattern pattern) {
+        super(fieldToBeParsed + " doesn't match " + pattern);
     }
 
-    public PlcInvalidAddressException(String addressToBeParsed, Pattern pattern, String readablePattern) {
-        super(addressToBeParsed + " doesn't match " + readablePattern + '(' + pattern + ')');
+    public PlcInvalidFieldException(String fieldToBeParsed, Pattern pattern, String readablePattern) {
+        super(fieldToBeParsed + " doesn't match " + readablePattern + '(' + pattern + ')');
     }
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProprietaryRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProprietaryRequest.java
index 1cae2be..28f172f 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProprietaryRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProprietaryRequest.java
@@ -19,7 +19,7 @@
 package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.RequestItem;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.Objects;
 
@@ -43,7 +43,7 @@ public class PlcProprietaryRequest<CUSTOM_REQUEST> extends PlcRequest<PlcProprie
     protected static class DummyRequestItem extends RequestItem<Void> {
 
         public DummyRequestItem() {
-            super(Void.class, new Address() {
+            super(Void.class, new PlcField() {
             });
         }
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProprietaryResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProprietaryResponse.java
index f2868e2..08bb6b1 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProprietaryResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProprietaryResponse.java
@@ -19,7 +19,7 @@
 package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.ResponseItem;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 
 import java.util.Collections;
 import java.util.Objects;
@@ -43,7 +43,7 @@ public class PlcProprietaryResponse<CUSTOM_RESPONSE> extends PlcResponse<PlcProp
     protected static class DummyResponseItem extends ResponseItem<PlcProprietaryRequest.DummyRequestItem> {
 
         public DummyResponseItem() {
-            super(new PlcProprietaryRequest.DummyRequestItem(), ResponseCode.OK);
+            super(new PlcProprietaryRequest.DummyRequestItem(), PlcResponseCode.OK);
         }
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/ProtocolMessage.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProtocolMessage.java
similarity index 91%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/ProtocolMessage.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProtocolMessage.java
index 7e2bf09..b6f51ac 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/ProtocolMessage.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProtocolMessage.java
@@ -17,8 +17,8 @@ specific language governing permissions and limitations
 under the License.
 */
 
-public interface ProtocolMessage {
+public interface PlcProtocolMessage {
 
-    ProtocolMessage getParent();
+    PlcProtocolMessage getParent();
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
index aabcbcc..d0de9e5 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadRequest.java
@@ -18,46 +18,46 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages;
 
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.List;
 import java.util.Objects;
 
 /**
  * Request to read one or more values from a plc.
- * The {@link PlcReadRequest} is a container for one or more {@link ReadRequestItem}s that are contained.
+ * The {@link PlcReadRequest} is a container for one or more {@link PlcReadRequestItem}s that are contained.
  * <p>
- * By default this is NOT typesafe as it can contain {@link ReadRequestItem}s for different types.
- * If there are only {@link ReadRequestItem}s of the same type one can use the {@link TypeSafePlcReadRequest} to enforce
+ * By default this is NOT typesafe as it can contain {@link PlcReadRequestItem}s for different types.
+ * If there are only {@link PlcReadRequestItem}s of the same type one can use the {@link TypeSafePlcReadRequest} to enforce
  * type safety.
  * <p>
  * Provides a builder for object construction through {@link PlcReadRequest#builder()}.
  *
  * @see TypeSafePlcReadRequest
  */
-public class PlcReadRequest extends PlcRequest<ReadRequestItem<?>> {
+public class PlcReadRequest extends PlcRequest<PlcReadRequestItem<?>> {
 
     public PlcReadRequest() {
         // Exists for construction of inherited classes
     }
 
-    public PlcReadRequest(ReadRequestItem<?> requestItem) {
+    public PlcReadRequest(PlcReadRequestItem<?> requestItem) {
         addItem(requestItem);
     }
 
-    public PlcReadRequest(Class<?> dataType, Address address) {
-        addItem(new ReadRequestItem<>(dataType, address));
+    public PlcReadRequest(Class<?> dataType, PlcField field) {
+        addItem(new PlcReadRequestItem<>(dataType, field));
     }
 
-    public PlcReadRequest(Class<?> dataType, Address address, int size) {
+    public PlcReadRequest(Class<?> dataType, PlcField field, int size) {
         Objects.requireNonNull(dataType, "Data type must not be null");
-        Objects.requireNonNull(address, "Address must not be null");
-        addItem(new ReadRequestItem<>(dataType, address, size));
+        Objects.requireNonNull(field, "PlcField must not be null");
+        addItem(new PlcReadRequestItem<>(dataType, field, size));
     }
 
-    public PlcReadRequest(List<ReadRequestItem<?>> requestItems) {
+    public PlcReadRequest(List<PlcReadRequestItem<?>> requestItems) {
         super(requestItems);
     }
 
@@ -65,21 +65,21 @@ public class PlcReadRequest extends PlcRequest<ReadRequestItem<?>> {
         return new Builder();
     }
 
-    public static class Builder extends PlcRequest.Builder<ReadRequestItem<?>> {
+    public static class Builder extends PlcRequest.Builder<PlcReadRequestItem<?>> {
 
-        public final Builder addItem(Class<?> dataType, Address address) {
+        public final Builder addItem(Class<?> dataType, PlcField field) {
             checkType(dataType);
-            requests.add(new ReadRequestItem<>(dataType, address));
+            requests.add(new PlcReadRequestItem<>(dataType, field));
             return this;
         }
 
-        public final Builder addItem(Class<?> dataType, Address address, int size) {
+        public final Builder addItem(Class<?> dataType, PlcField field, int size) {
             checkType(dataType);
-            requests.add(new ReadRequestItem<>(dataType, address, size));
+            requests.add(new PlcReadRequestItem<>(dataType, field, size));
             return this;
         }
 
-        public final Builder addItem(ReadRequestItem readRequestItem) {
+        public final Builder addItem(PlcReadRequestItem readRequestItem) {
             checkType(readRequestItem.getDatatype());
             requests.add(readRequestItem);
             return this;
@@ -95,7 +95,7 @@ public class PlcReadRequest extends PlcRequest<ReadRequestItem<?>> {
             } else {
                 plcReadRequest = new TypeSafePlcReadRequest<>(firstType);
             }
-            for (ReadRequestItem request : requests) {
+            for (PlcReadRequestItem request : requests) {
                 plcReadRequest.addItem(request);
             }
             return plcReadRequest;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
index 8d3d298..d769c0f 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcReadResponse.java
@@ -18,8 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages;
 
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
 
 import java.util.Collections;
 import java.util.List;
@@ -29,24 +29,24 @@ import java.util.Optional;
  * Response to a {@link PlcReadRequest}.
  * Contains the values read from the PLC but untyped.
  * <p>
- * Values are extracted using the {@link ReadRequestItem}s that were send in the read request.
+ * Values are extracted using the {@link PlcReadRequestItem}s that were send in the read request.
  * <p>
  * If only a variables of one type are requested it is better to use
  * {@link org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest} which leads to a
  * {@link org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse}.
  */
-public class PlcReadResponse extends PlcResponse<PlcReadRequest, ReadResponseItem<?>, ReadRequestItem<?>> {
+public class PlcReadResponse extends PlcResponse<PlcReadRequest, PlcReadResponseItem<?>, PlcReadRequestItem<?>> {
 
-    public PlcReadResponse(PlcReadRequest request, ReadResponseItem<?> responseItems) {
+    public PlcReadResponse(PlcReadRequest request, PlcReadResponseItem<?> responseItems) {
         super(request, Collections.singletonList(responseItems));
     }
 
-    public PlcReadResponse(PlcReadRequest request, List<? extends ReadResponseItem<?>> responseItems) {
+    public PlcReadResponse(PlcReadRequest request, List<? extends PlcReadResponseItem<?>> responseItems) {
         super(request, responseItems);
     }
 
     @SuppressWarnings("unchecked")
-    public <T> Optional<ReadResponseItem<T>> getValue(ReadRequestItem<T> item) {
+    public <T> Optional<PlcReadResponseItem<T>> getValue(PlcReadRequestItem<T> item) {
         return (Optional) super.getValue(item);
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcSubscriptionRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcSubscriptionRequest.java
index 67c4894..202f0a7 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcSubscriptionRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcSubscriptionRequest.java
@@ -19,7 +19,7 @@ under the License.
 */
 
 import org.apache.plc4x.java.api.messages.items.*;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
@@ -32,24 +32,24 @@ public class PlcSubscriptionRequest extends PlcRequest<SubscriptionRequestItem<?
 
     public static class Builder extends PlcRequest.Builder<SubscriptionRequestItem> {
 
-        public final <T> Builder addChangeOfStateItem(Class<T> dataType, Address address, Consumer<SubscriptionEventItem<T>> consumer) {
+        public final <T> Builder addChangeOfStateItem(Class<T> dataType, PlcField field, Consumer<SubscriptionEventItem<T>> consumer) {
             // As we don't get a list as response rather we have individual consumers we don't need type checking here.
             //checkType(dataType);
-            requests.add(new SubscriptionRequestChangeOfStateItem<>(dataType, address, consumer));
+            requests.add(new SubscriptionRequestChangeOfStateItem<>(dataType, field, consumer));
             return this;
         }
 
-        public final <T> Builder addCyclicItem(Class<T> dataType, Address address, Consumer<SubscriptionEventItem<T>> consumer, TimeUnit timeUnit, int period) {
+        public final <T> Builder addCyclicItem(Class<T> dataType, PlcField field, Consumer<SubscriptionEventItem<T>> consumer, TimeUnit timeUnit, int period) {
             // As we don't get a list as response rather we have individual consumers we don't need type checking here.
             //checkType(dataType);
-            requests.add(new SubscriptionRequestCyclicItem<>(dataType, address, timeUnit, period, consumer));
+            requests.add(new SubscriptionRequestCyclicItem<>(dataType, field, timeUnit, period, consumer));
             return this;
         }
 
-        public final <T> Builder addEventItem(Class<T> dataType, Address address, Consumer<SubscriptionEventItem<T>> consumer) {
+        public final <T> Builder addEventItem(Class<T> dataType, PlcField field, Consumer<SubscriptionEventItem<T>> consumer) {
             // As we don't get a list as response rather we have individual consumers we don't need type checking here.
             //checkType(dataType);
-            requests.add(new SubscriptionRequestEventItem<>(dataType, address, consumer));
+            requests.add(new SubscriptionRequestEventItem<>(dataType, field, consumer));
             return this;
         }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcUnsubscriptionRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcUnsubscriptionRequest.java
index bc46db7..13198fb 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcUnsubscriptionRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcUnsubscriptionRequest.java
@@ -20,7 +20,7 @@ package org.apache.plc4x.java.api.messages;
 
 import org.apache.plc4x.java.api.messages.items.SubscriptionResponseItem;
 import org.apache.plc4x.java.api.messages.items.UnsubscriptionRequestItem;
-import org.apache.plc4x.java.api.model.SubscriptionHandle;
+import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
 
 import java.util.Arrays;
 import java.util.LinkedList;
@@ -60,17 +60,17 @@ public class PlcUnsubscriptionRequest implements PlcMessage {
 
     public static class Builder extends PlcRequest.Builder<UnsubscriptionRequestItem> {
 
-        public final Builder addHandle(SubscriptionHandle subscriptionHandle) {
+        public final Builder addHandle(PlcSubscriptionHandle subscriptionHandle) {
             requests.add(new UnsubscriptionRequestItem(subscriptionHandle));
             return this;
         }
 
-        public final Builder addHandle(SubscriptionHandle... subscriptionHandles) {
+        public final Builder addHandle(PlcSubscriptionHandle... subscriptionHandles) {
             requests.addAll(Arrays.stream(subscriptionHandles).map(UnsubscriptionRequestItem::new).collect(Collectors.toList()));
             return this;
         }
 
-        public final Builder addHandle(List<SubscriptionHandle> subscriptionHandles) {
+        public final Builder addHandle(List<PlcSubscriptionHandle> subscriptionHandles) {
             requests.addAll(subscriptionHandles.stream().map(UnsubscriptionRequestItem::new).collect(Collectors.toList()));
             return this;
         }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
index ed09dae..5651da9 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteRequest.java
@@ -18,30 +18,30 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages;
 
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.List;
 import java.util.Objects;
 
-public class PlcWriteRequest extends PlcRequest<WriteRequestItem<?>> {
+public class PlcWriteRequest extends PlcRequest<PlcWriteRequestItem<?>> {
 
     public PlcWriteRequest() {
     }
 
-    public PlcWriteRequest(WriteRequestItem<?> requestItem) {
+    public PlcWriteRequest(PlcWriteRequestItem<?> requestItem) {
         addItem(requestItem);
     }
 
     @SafeVarargs
-    public <T> PlcWriteRequest(Class<T> dataType, Address address, T... values) {
+    public <T> PlcWriteRequest(Class<T> dataType, PlcField field, T... values) {
         Objects.requireNonNull(dataType, "Data type must not be null");
-        Objects.requireNonNull(address, "Address must not be null");
-        addItem(new WriteRequestItem<>(dataType, address, values));
+        Objects.requireNonNull(field, "PlcField must not be null");
+        addItem(new PlcWriteRequestItem<>(dataType, field, values));
     }
 
-    public PlcWriteRequest(List<WriteRequestItem<?>> requestItems) {
+    public PlcWriteRequest(List<PlcWriteRequestItem<?>> requestItems) {
         super(requestItems);
     }
 
@@ -49,24 +49,24 @@ public class PlcWriteRequest extends PlcRequest<WriteRequestItem<?>> {
         return new Builder();
     }
 
-    public static class Builder extends PlcRequest.Builder<WriteRequestItem<?>> {
+    public static class Builder extends PlcRequest.Builder<PlcWriteRequestItem<?>> {
 
         @SuppressWarnings("unchecked")
-        public <T> PlcWriteRequest.Builder addItem(Address address, T value) {
+        public <T> PlcWriteRequest.Builder addItem(PlcField field, T value) {
             Objects.requireNonNull(value);
             checkType(value.getClass());
-            requests.add(new WriteRequestItem<>((Class<T>) value.getClass(), address, (T) value));
+            requests.add(new PlcWriteRequestItem<>((Class<T>) value.getClass(), field, (T) value));
             return this;
         }
 
         @SafeVarargs
-        public final <T> PlcWriteRequest.Builder addItem(Class<T> dataType, Address address, T... values) {
+        public final <T> PlcWriteRequest.Builder addItem(Class<T> dataType, PlcField field, T... values) {
             checkType(dataType);
-            requests.add(new WriteRequestItem<>(dataType, address, values));
+            requests.add(new PlcWriteRequestItem<>(dataType, field, values));
             return this;
         }
 
-        public final PlcWriteRequest.Builder addItem(WriteRequestItem<?> writeRequestItem) {
+        public final PlcWriteRequest.Builder addItem(PlcWriteRequestItem<?> writeRequestItem) {
             checkType(writeRequestItem.getDatatype());
             requests.add(writeRequestItem);
             return this;
@@ -82,7 +82,7 @@ public class PlcWriteRequest extends PlcRequest<WriteRequestItem<?>> {
             } else {
                 plcWriteRequest = new TypeSafePlcWriteRequest<>(firstType);
             }
-            for (WriteRequestItem request : requests) {
+            for (PlcWriteRequestItem request : requests) {
                 plcWriteRequest.addItem(request);
             }
             return plcWriteRequest;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
index 6535fca..1950fab 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcWriteResponse.java
@@ -18,25 +18,25 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages;
 
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteResponseItem;
 
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class PlcWriteResponse extends PlcResponse<PlcWriteRequest, WriteResponseItem<?>, WriteRequestItem<?>> {
+public class PlcWriteResponse extends PlcResponse<PlcWriteRequest, PlcWriteResponseItem<?>, PlcWriteRequestItem<?>> {
 
-    public PlcWriteResponse(PlcWriteRequest request, WriteResponseItem<?> responseItem) {
+    public PlcWriteResponse(PlcWriteRequest request, PlcWriteResponseItem<?> responseItem) {
         super(request, Collections.singletonList(responseItem));
     }
 
-    public PlcWriteResponse(PlcWriteRequest request, List<? extends WriteResponseItem<?>> responseItems) {
+    public PlcWriteResponse(PlcWriteRequest request, List<? extends PlcWriteResponseItem<?>> responseItems) {
         super(request, responseItems);
     }
 
     @SuppressWarnings("unchecked")
-    public <T> Optional<WriteResponseItem<T>> getValue(WriteRequestItem<T> item) {
+    public <T> Optional<PlcWriteResponseItem<T>> getValue(PlcWriteRequestItem<T> item) {
         return (Optional) super.getValue(item);
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ReadRequestItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/PlcReadRequestItem.java
similarity index 71%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ReadRequestItem.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/PlcReadRequestItem.java
index d4a7c73..dc49a3f 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ReadRequestItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/PlcReadRequestItem.java
@@ -18,33 +18,33 @@
 */
 package org.apache.plc4x.java.api.messages.items;
 
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.Objects;
 
 /**
- * Encapsulats one {@link RequestItem} that could be read multiple times, i.e., from the given Address on
- * {@link ReadRequestItem#size} number of Items with equal datatype are read.
+ * Encapsulats one {@link RequestItem} that could be read multiple times, i.e., from the given PlcField on
+ * {@link PlcReadRequestItem#size} number of Items with equal datatype are read.
  *
  * Thus,
  * <pre>
- *     new ReadRequestItem(Int.class, adress, 5)
+ *     new PlcReadRequestItem(Int.class, adress, 5)
  * </pre>
- * basically reads 5 consecutive integers starting at the given {@link Address}.
+ * basically reads 5 consecutive integers starting at the given {@link PlcField}.
  *
  * @param <T> Generic Type of expected Datatype.
  */
-public class ReadRequestItem<T> extends RequestItem<T> {
+public class PlcReadRequestItem<T> extends RequestItem<T> {
 
     private final int size;
 
-    public ReadRequestItem(Class<T> datatype, Address address) {
-        super(datatype, address);
+    public PlcReadRequestItem(Class<T> datatype, PlcField field) {
+        super(datatype, field);
         this.size = 1;
     }
 
-    public ReadRequestItem(Class<T> datatype, Address address, int size) {
-        super(datatype, address);
+    public PlcReadRequestItem(Class<T> datatype, PlcField field, int size) {
+        super(datatype, field);
         this.size = size;
     }
 
@@ -54,7 +54,7 @@ public class ReadRequestItem<T> extends RequestItem<T> {
 
     @Override
     public String toString() {
-        return "ReadRequestItem{" +
+        return "PlcReadRequestItem{" +
             "size=" + size +
             "} " + super.toString();
     }
@@ -64,13 +64,13 @@ public class ReadRequestItem<T> extends RequestItem<T> {
         if (this == o) {
             return true;
         }
-        if (!(o instanceof ReadRequestItem)) {
+        if (!(o instanceof PlcReadRequestItem)) {
             return false;
         }
         if (!super.equals(o)) {
             return false;
         }
-        ReadRequestItem<?> that = (ReadRequestItem<?>) o;
+        PlcReadRequestItem<?> that = (PlcReadRequestItem<?>) o;
         return size == that.size;
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ReadResponseItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/PlcReadResponseItem.java
similarity index 75%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ReadResponseItem.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/PlcReadResponseItem.java
index 72dbdb0..4034e7b 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ReadResponseItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/PlcReadResponseItem.java
@@ -18,23 +18,23 @@
 */
 package org.apache.plc4x.java.api.messages.items;
 
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 
 /**
- * Response to a {@link ReadRequestItem}.
- * Can contain a list of values if the size in {@link ReadRequestItem} is larger zero.
+ * Response to a {@link PlcReadRequestItem}.
+ * Can contain a list of values if the size in {@link PlcReadRequestItem} is larger zero.
  *
  * @param <T>
  */
-public class ReadResponseItem<T> extends ResponseItem<ReadRequestItem<T>> {
+public class PlcReadResponseItem<T> extends ResponseItem<PlcReadRequestItem<T>> {
 
     private final List<T> values;
 
-    public ReadResponseItem(ReadRequestItem<T> requestItem, ResponseCode responseCode, List<T> values) {
+    public PlcReadResponseItem(PlcReadRequestItem<T> requestItem, PlcResponseCode responseCode, List<T> values) {
         super(requestItem, responseCode);
         Objects.requireNonNull(values, "Values must not be null");
         for (T value : values) {
@@ -46,7 +46,7 @@ public class ReadResponseItem<T> extends ResponseItem<ReadRequestItem<T>> {
     }
 
     @SafeVarargs
-    public ReadResponseItem(ReadRequestItem<T> requestItem, ResponseCode responseCode, T... values) {
+    public PlcReadResponseItem(PlcReadRequestItem<T> requestItem, PlcResponseCode responseCode, T... values) {
         this(requestItem, responseCode, Arrays.asList(values));
     }
 
@@ -56,7 +56,7 @@ public class ReadResponseItem<T> extends ResponseItem<ReadRequestItem<T>> {
 
     @Override
     public String toString() {
-        return "ReadResponseItem{" +
+        return "PlcReadResponseItem{" +
             "values=" + values +
             "} " + super.toString();
     }
@@ -66,13 +66,13 @@ public class ReadResponseItem<T> extends ResponseItem<ReadRequestItem<T>> {
         if (this == o) {
             return true;
         }
-        if (!(o instanceof ReadResponseItem)) {
+        if (!(o instanceof PlcReadResponseItem)) {
             return false;
         }
         if (!super.equals(o)) {
             return false;
         }
-        ReadResponseItem<?> that = (ReadResponseItem<?>) o;
+        PlcReadResponseItem<?> that = (PlcReadResponseItem<?>) o;
         return Objects.equals(values, that.values);
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/WriteRequestItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/PlcWriteRequestItem.java
similarity index 82%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/WriteRequestItem.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/PlcWriteRequestItem.java
index 086bcea..5a8e35e 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/WriteRequestItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/PlcWriteRequestItem.java
@@ -18,17 +18,17 @@
 */
 package org.apache.plc4x.java.api.messages.items;
 
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.*;
 
-public class WriteRequestItem<T> extends RequestItem<T> {
+public class PlcWriteRequestItem<T> extends RequestItem<T> {
 
     private final List<T> values;
 
     @SafeVarargs
-    public WriteRequestItem(Class<T> dataType, Address address, T... values) {
-        super(dataType, address);
+    public PlcWriteRequestItem(Class<T> dataType, PlcField field, T... values) {
+        super(dataType, field);
         Objects.requireNonNull(values, "Values must not be null");
         List<T> checkedList = Collections.checkedList(new ArrayList<>(), dataType);
         checkedList.addAll(Arrays.asList(values));
@@ -45,7 +45,7 @@ public class WriteRequestItem<T> extends RequestItem<T> {
 
     @Override
     public String toString() {
-        return "WriteRequestItem{" +
+        return "PlcWriteRequestItem{" +
             "values=" + values +
             "} " + super.toString();
     }
@@ -55,13 +55,13 @@ public class WriteRequestItem<T> extends RequestItem<T> {
         if (this == o) {
             return true;
         }
-        if (!(o instanceof WriteRequestItem)) {
+        if (!(o instanceof PlcWriteRequestItem)) {
             return false;
         }
         if (!super.equals(o)) {
             return false;
         }
-        WriteRequestItem<?> that = (WriteRequestItem<?>) o;
+        PlcWriteRequestItem<?> that = (PlcWriteRequestItem<?>) o;
         return Objects.equals(values, that.values);
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/WriteResponseItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/PlcWriteResponseItem.java
similarity index 75%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/WriteResponseItem.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/PlcWriteResponseItem.java
index 2b6aa99..3cf0e9d 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/WriteResponseItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/PlcWriteResponseItem.java
@@ -18,16 +18,16 @@
 */
 package org.apache.plc4x.java.api.messages.items;
 
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 
-public class WriteResponseItem<T> extends ResponseItem<WriteRequestItem<T>> {
+public class PlcWriteResponseItem<T> extends ResponseItem<PlcWriteRequestItem<T>> {
 
-    public WriteResponseItem(WriteRequestItem<T> requestItem, ResponseCode responseCode) {
+    public PlcWriteResponseItem(PlcWriteRequestItem<T> requestItem, PlcResponseCode responseCode) {
         super(requestItem, responseCode);
     }
 
     @Override
     public String toString() {
-        return "WriteResponseItem{} " + super.toString();
+        return "PlcWriteResponseItem{} " + super.toString();
     }
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/RequestItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/RequestItem.java
index 390ef5d..660fa20 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/RequestItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/RequestItem.java
@@ -18,41 +18,41 @@
 */
 package org.apache.plc4x.java.api.messages.items;
 
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.Objects;
 
 /**
- * Wrapper Object to encapsulate an {@link Address} and the expected datatype as {@link Class}.
+ * Wrapper Object to encapsulate an {@link PlcField} and the expected datatype as {@link Class}.
  *
- * @param <DATA_TYPE> Generic Type of data at address
+ * @param <DATA_TYPE> Generic Type of data at field
  */
 public abstract class RequestItem<DATA_TYPE> {
 
     private final Class<DATA_TYPE> datatype;
 
-    private final Address address;
+    private final PlcField field;
 
-    public RequestItem(Class<DATA_TYPE> datatype, Address address) {
+    public RequestItem(Class<DATA_TYPE> datatype, PlcField field) {
         Objects.requireNonNull(datatype, "Data type must not be null");
-        Objects.requireNonNull(address, "Address type must not be null");
+        Objects.requireNonNull(field, "PlcField type must not be null");
         this.datatype = datatype;
-        this.address = address;
+        this.field = field;
     }
 
     public Class<DATA_TYPE> getDatatype() {
         return datatype;
     }
 
-    public Address getAddress() {
-        return address;
+    public PlcField getField() {
+        return field;
     }
 
     @Override
     public String toString() {
         return "RequestItem{" +
             "datatype=" + datatype +
-            ", address=" + address +
+            ", field=" + field +
             '}';
     }
 
@@ -66,12 +66,13 @@ public abstract class RequestItem<DATA_TYPE> {
         }
         RequestItem<?> that = (RequestItem<?>) o;
         return Objects.equals(datatype, that.datatype) &&
-            Objects.equals(address, that.address);
+            Objects.equals(field, that.field);
     }
 
     @Override
     public int hashCode() {
 
-        return Objects.hash(datatype, address);
+        return Objects.hash(datatype, field);
     }
+
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ResponseItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ResponseItem.java
index 5cb6d9b..28d1c96 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ResponseItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/ResponseItem.java
@@ -18,7 +18,7 @@
 */
 package org.apache.plc4x.java.api.messages.items;
 
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 
 import java.util.Objects;
 
@@ -26,9 +26,9 @@ public abstract class ResponseItem<REQUEST_ITEM extends RequestItem> {
 
     private final REQUEST_ITEM requestItem;
 
-    private final ResponseCode responseCode;
+    private final PlcResponseCode responseCode;
 
-    public ResponseItem(REQUEST_ITEM requestItem, ResponseCode responseCode) {
+    public ResponseItem(REQUEST_ITEM requestItem, PlcResponseCode responseCode) {
         Objects.requireNonNull(requestItem,"Request item must not be null");
         Objects.requireNonNull(responseCode,"Response code must not be null");
         this.requestItem = requestItem;
@@ -39,7 +39,7 @@ public abstract class ResponseItem<REQUEST_ITEM extends RequestItem> {
         return requestItem;
     }
 
-    public ResponseCode getResponseCode() {
+    public PlcResponseCode getResponseCode() {
         return responseCode;
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestChangeOfStateItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestChangeOfStateItem.java
index aa46b3a..7cd9050 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestChangeOfStateItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestChangeOfStateItem.java
@@ -18,15 +18,15 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.items;
 
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.api.model.SubscriptionType;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.model.PlcSubscriptionType;
 
 import java.util.function.Consumer;
 
 public class SubscriptionRequestChangeOfStateItem<T> extends SubscriptionRequestItem<T> {
 
-    public SubscriptionRequestChangeOfStateItem(Class<T> datatype, Address address, Consumer<SubscriptionEventItem<T>> consumer) {
-        super(datatype, address, SubscriptionType.CHANGE_OF_STATE, consumer);
+    public SubscriptionRequestChangeOfStateItem(Class<T> datatype, PlcField field, Consumer<SubscriptionEventItem<T>> consumer) {
+        super(datatype, field, PlcSubscriptionType.CHANGE_OF_STATE, consumer);
     }
 
     @Override
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestCyclicItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestCyclicItem.java
index 336d7b4..5926c1c 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestCyclicItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestCyclicItem.java
@@ -18,8 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.items;
 
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.api.model.SubscriptionType;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.model.PlcSubscriptionType;
 
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
@@ -30,8 +30,8 @@ public class SubscriptionRequestCyclicItem<T> extends SubscriptionRequestItem<T>
     private final TimeUnit timeUnit;
     private final int period;
 
-    public SubscriptionRequestCyclicItem(Class<T> dataType, Address address, TimeUnit timeUnit, int period, Consumer<SubscriptionEventItem<T>> consumer) {
-        super(dataType, address, SubscriptionType.CYCLIC, consumer);
+    public SubscriptionRequestCyclicItem(Class<T> dataType, PlcField field, TimeUnit timeUnit, int period, Consumer<SubscriptionEventItem<T>> consumer) {
+        super(dataType, field, PlcSubscriptionType.CYCLIC, consumer);
         this.timeUnit = timeUnit;
         this.period = period;
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestEventItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestEventItem.java
index 1abd1b4..e9278bc 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestEventItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestEventItem.java
@@ -18,15 +18,15 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.items;
 
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.api.model.SubscriptionType;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.model.PlcSubscriptionType;
 
 import java.util.function.Consumer;
 
 public class SubscriptionRequestEventItem<T> extends SubscriptionRequestItem<T> {
 
-    public SubscriptionRequestEventItem(Class<T> dataType, Address address, Consumer<SubscriptionEventItem<T>> consumer) {
-        super(dataType, address, SubscriptionType.EVENT, consumer);
+    public SubscriptionRequestEventItem(Class<T> dataType, PlcField field, Consumer<SubscriptionEventItem<T>> consumer) {
+        super(dataType, field, PlcSubscriptionType.EVENT, consumer);
     }
 
     @Override
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java
index a38d258..7893a30 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionRequestItem.java
@@ -18,24 +18,24 @@
 */
 package org.apache.plc4x.java.api.messages.items;
 
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.api.model.SubscriptionType;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.model.PlcSubscriptionType;
 
 import java.util.Objects;
 import java.util.function.Consumer;
 
 public abstract class SubscriptionRequestItem<T> extends RequestItem<T> {
 
-    private final SubscriptionType subscriptionType;
+    private final PlcSubscriptionType subscriptionType;
     private final Consumer<SubscriptionEventItem<T>> consumer;
 
-    public SubscriptionRequestItem(Class<T> datatype, Address address, SubscriptionType subscriptionType, Consumer<SubscriptionEventItem<T>> consumer) {
-        super(datatype, address);
+    public SubscriptionRequestItem(Class<T> datatype, PlcField field, PlcSubscriptionType subscriptionType, Consumer<SubscriptionEventItem<T>> consumer) {
+        super(datatype, field);
         this.subscriptionType = subscriptionType;
         this.consumer = consumer;
     }
 
-    public SubscriptionType getSubscriptionType() {
+    public PlcSubscriptionType getSubscriptionType() {
         return subscriptionType;
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionResponseItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionResponseItem.java
index 731a9ee..2ca30c2 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionResponseItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/SubscriptionResponseItem.java
@@ -18,21 +18,21 @@
 */
 package org.apache.plc4x.java.api.messages.items;
 
-import org.apache.plc4x.java.api.model.SubscriptionHandle;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 
 import java.util.Objects;
 
 public class SubscriptionResponseItem<T> extends ResponseItem<SubscriptionRequestItem<T>> {
 
-    private SubscriptionHandle subscriptionHandle;
+    private PlcSubscriptionHandle subscriptionHandle;
 
-    public SubscriptionResponseItem(SubscriptionRequestItem<T> requestItem, SubscriptionHandle subscriptionHandle, ResponseCode responseCode) {
+    public SubscriptionResponseItem(SubscriptionRequestItem<T> requestItem, PlcSubscriptionHandle subscriptionHandle, PlcResponseCode responseCode) {
         super(requestItem, responseCode);
         this.subscriptionHandle = subscriptionHandle;
     }
 
-    public SubscriptionHandle getSubscriptionHandle() {
+    public PlcSubscriptionHandle getSubscriptionHandle() {
         return subscriptionHandle;
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/UnsubscriptionRequestItem.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/UnsubscriptionRequestItem.java
index d3312f3..9532a57 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/UnsubscriptionRequestItem.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/items/UnsubscriptionRequestItem.java
@@ -18,20 +18,20 @@
 */
 package org.apache.plc4x.java.api.messages.items;
 
-import org.apache.plc4x.java.api.model.SubscriptionHandle;
+import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
 
 import java.util.Objects;
 
 public class UnsubscriptionRequestItem {
 
-    private SubscriptionHandle subscriptionHandle;
+    private PlcSubscriptionHandle subscriptionHandle;
 
-    public UnsubscriptionRequestItem(SubscriptionHandle subscriptionHandle) {
-        Objects.requireNonNull(subscriptionHandle, "SubscriptionHandle must not be null");
+    public UnsubscriptionRequestItem(PlcSubscriptionHandle subscriptionHandle) {
+        Objects.requireNonNull(subscriptionHandle, "PlcSubscriptionHandle must not be null");
         this.subscriptionHandle = subscriptionHandle;
     }
 
-    public SubscriptionHandle getSubscriptionHandle() {
+    public PlcSubscriptionHandle getSubscriptionHandle() {
         return subscriptionHandle;
     }
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
index ce73974..9dc4c2e 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequest.java
@@ -19,8 +19,8 @@ under the License.
 package org.apache.plc4x.java.api.messages.specific;
 
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.List;
 import java.util.Objects;
@@ -47,34 +47,34 @@ public class TypeSafePlcReadRequest<T> extends PlcReadRequest {
         this(dataType);
         Objects.requireNonNull(plcReadRequest, "plc read request must not be null");
         Objects.requireNonNull(plcReadRequest.getRequestItems(), "plc read request item on " + plcReadRequest + " must not be null");
-        for (ReadRequestItem<?> readRequestItem : plcReadRequest.getRequestItems()) {
+        for (PlcReadRequestItem<?> readRequestItem : plcReadRequest.getRequestItems()) {
             addItem(readRequestItem);
         }
     }
 
-    public TypeSafePlcReadRequest(Class<T> dataType, Address address) {
+    public TypeSafePlcReadRequest(Class<T> dataType, PlcField field) {
         this(dataType);
-        Objects.requireNonNull(address, "Address must not be null");
-        addItem(new ReadRequestItem<>(dataType, address));
+        Objects.requireNonNull(field, "Field must not be null");
+        addItem(new PlcReadRequestItem<>(dataType, field));
     }
 
-    public TypeSafePlcReadRequest(Class<T> dataType, Address address, int size) {
+    public TypeSafePlcReadRequest(Class<T> dataType, PlcField field, int size) {
         this(dataType);
-        Objects.requireNonNull(address, "Address must not be null");
-        addItem(new ReadRequestItem<>(dataType, address, size));
+        Objects.requireNonNull(field, "Field must not be null");
+        addItem(new PlcReadRequestItem<>(dataType, field, size));
     }
 
     @SafeVarargs
-    public TypeSafePlcReadRequest(Class<T> dataType, ReadRequestItem<T>... requestItems) {
+    public TypeSafePlcReadRequest(Class<T> dataType, PlcReadRequestItem<T>... requestItems) {
         this(dataType);
         Objects.requireNonNull(requestItems, "Read request items must not be null");
-        for (ReadRequestItem<T> readRequestItem : requestItems) {
+        for (PlcReadRequestItem<T> readRequestItem : requestItems) {
             addItem(readRequestItem);
         }
     }
 
     @Override
-    public void addItem(ReadRequestItem<?> readRequestItem) {
+    public void addItem(PlcReadRequestItem<?> readRequestItem) {
         Objects.requireNonNull(readRequestItem, "Read request item must not be null");
         if (readRequestItem.getDatatype() != dataType) {
             throw new IllegalArgumentException("Unexpected data type " + readRequestItem.getDatatype() + " on readRequestItem. Expected " + dataType);
@@ -83,14 +83,14 @@ public class TypeSafePlcReadRequest<T> extends PlcReadRequest {
     }
 
     @SuppressWarnings("unchecked")
-    public List<ReadRequestItem<T>> getCheckedReadRequestItems() {
+    public List<PlcReadRequestItem<T>> getCheckedReadRequestItems() {
         return (List) getRequestItems();
     }
 
     @SuppressWarnings("unchecked")
     @Override
-    public Optional<ReadRequestItem<T>> getRequestItem() {
-        return (Optional<ReadRequestItem<T>>) super.getRequestItem();
+    public Optional<PlcReadRequestItem<T>> getRequestItem() {
+        return (Optional<PlcReadRequestItem<T>>) super.getRequestItem();
     }
 
     public Class<T> getDataType() {
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
index 393ac00..346fe41 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponse.java
@@ -19,7 +19,7 @@ under the License.
 package org.apache.plc4x.java.api.messages.specific;
 
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
 
 import java.util.List;
 import java.util.Objects;
@@ -27,16 +27,16 @@ import java.util.Optional;
 
 public class TypeSafePlcReadResponse<T> extends PlcReadResponse {
 
-    public TypeSafePlcReadResponse(TypeSafePlcReadRequest<T> request, ReadResponseItem<T> responseItem) {
+    public TypeSafePlcReadResponse(TypeSafePlcReadRequest<T> request, PlcReadResponseItem<T> responseItem) {
         super(request, responseItem);
         Objects.requireNonNull(request, "Request must not be null");
         checkList(responseItem.getValues(), request.getDataType());
     }
 
-    public TypeSafePlcReadResponse(TypeSafePlcReadRequest<T> request, List<ReadResponseItem<T>> responseItems) {
+    public TypeSafePlcReadResponse(TypeSafePlcReadRequest<T> request, List<PlcReadResponseItem<T>> responseItems) {
         super(request, responseItems);
         Objects.requireNonNull(responseItems, "Request items on " + request + " must not be null");
-        for (ReadResponseItem<T> responseItem : responseItems) {
+        for (PlcReadResponseItem<T> responseItem : responseItems) {
             checkList(responseItem.getValues(), request.getDataType());
         }
     }
@@ -49,14 +49,14 @@ public class TypeSafePlcReadResponse<T> extends PlcReadResponse {
 
     @Override
     @SuppressWarnings("unchecked")
-    public List<? extends ReadResponseItem<T>> getResponseItems() {
-        return (List<? extends ReadResponseItem<T>>) super.getResponseItems();
+    public List<? extends PlcReadResponseItem<T>> getResponseItems() {
+        return (List<? extends PlcReadResponseItem<T>>) super.getResponseItems();
     }
 
     @Override
     @SuppressWarnings("unchecked")
-    public Optional<ReadResponseItem<T>> getResponseItem() {
-        return (Optional<ReadResponseItem<T>>) super.getResponseItem();
+    public Optional<PlcReadResponseItem<T>> getResponseItem() {
+        return (Optional<PlcReadResponseItem<T>>) super.getResponseItem();
     }
 
     public static <T> TypeSafePlcReadResponse<T> of(PlcReadResponse plcReadResponse, Class<T> clazz) {
@@ -72,7 +72,7 @@ public class TypeSafePlcReadResponse<T> extends PlcReadResponse {
             return typeSafePlcReadResponse;
         }
         @SuppressWarnings("unchecked")
-        List<ReadResponseItem<T>> responseItems = (List<ReadResponseItem<T>>) plcReadResponse.getResponseItems();
+        List<PlcReadResponseItem<T>> responseItems = (List<PlcReadResponseItem<T>>) plcReadResponse.getResponseItems();
         Objects.requireNonNull(responseItems, "Response items on " + plcReadResponse + " must not be null");
         if (plcReadResponse.getRequest() instanceof TypeSafePlcReadRequest) {
             @SuppressWarnings("unchecked")
@@ -83,7 +83,7 @@ public class TypeSafePlcReadResponse<T> extends PlcReadResponse {
             }
             return new TypeSafePlcReadResponse<>(typeSafePlcReadRequest, responseItems);
         }
-        for (ReadResponseItem<?> responseItem : responseItems) {
+        for (PlcReadResponseItem<?> responseItem : responseItems) {
             checkList(responseItem.getValues(), clazz);
         }
         TypeSafePlcReadRequest<T> request = new TypeSafePlcReadRequest<>(clazz, plcReadResponse.getRequest());
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
index 24eb1c2..d15006c 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequest.java
@@ -19,8 +19,8 @@ under the License.
 package org.apache.plc4x.java.api.messages.specific;
 
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.List;
 import java.util.Objects;
@@ -39,29 +39,29 @@ public class TypeSafePlcWriteRequest<T> extends PlcWriteRequest {
         this(dataType);
         Objects.requireNonNull(plcWriteRequest, "PLC write request must not be null");
         Objects.requireNonNull(plcWriteRequest.getRequestItems(), "plc write request item on " + plcWriteRequest + " must not be null");
-        for (WriteRequestItem<?> WriteRequestItem : plcWriteRequest.getRequestItems()) {
+        for (PlcWriteRequestItem<?> WriteRequestItem : plcWriteRequest.getRequestItems()) {
             addItem(WriteRequestItem);
         }
     }
 
     @SafeVarargs
-    public TypeSafePlcWriteRequest(Class<T> dataType, Address address, T... values) {
+    public TypeSafePlcWriteRequest(Class<T> dataType, PlcField field, T... values) {
         this(dataType);
-        Objects.requireNonNull(address, "Address must not be null");
-        addItem(new WriteRequestItem<>(dataType, address, values));
+        Objects.requireNonNull(field, "Field must not be null");
+        addItem(new PlcWriteRequestItem<>(dataType, field, values));
     }
 
     @SafeVarargs
-    public TypeSafePlcWriteRequest(Class<T> dataType, WriteRequestItem<T>... requestItems) {
+    public TypeSafePlcWriteRequest(Class<T> dataType, PlcWriteRequestItem<T>... requestItems) {
         this(dataType);
         Objects.requireNonNull(requestItems, "Request item must not be null");
-        for (WriteRequestItem<T> requestItem : requestItems) {
+        for (PlcWriteRequestItem<T> requestItem : requestItems) {
             getRequestItems().add(requestItem);
         }
     }
 
     @Override
-    public void addItem(WriteRequestItem<?> writeRequestItem) {
+    public void addItem(PlcWriteRequestItem<?> writeRequestItem) {
         Objects.requireNonNull(writeRequestItem, "Write request item must not be null");
         if (writeRequestItem.getDatatype() != dataType) {
             throw new IllegalArgumentException("Incompatible dataType " + writeRequestItem.getDatatype());
@@ -70,14 +70,14 @@ public class TypeSafePlcWriteRequest<T> extends PlcWriteRequest {
     }
 
     @SuppressWarnings("unchecked")
-    public List<WriteRequestItem<T>> getCheckedRequestItems() {
+    public List<PlcWriteRequestItem<T>> getCheckedRequestItems() {
         return (List) getRequestItems();
     }
 
     @Override
     @SuppressWarnings("unchecked")
-    public Optional<WriteRequestItem<T>> getRequestItem() {
-        return (Optional<WriteRequestItem<T>>) super.getRequestItem();
+    public Optional<PlcWriteRequestItem<T>> getRequestItem() {
+        return (Optional<PlcWriteRequestItem<T>>) super.getRequestItem();
     }
 
     public Class<T> getDataType() {
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java
index af4ee80..6944b66 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponse.java
@@ -22,15 +22,15 @@ import java.util.List;
 import java.util.Optional;
 
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
-import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteResponseItem;
 
 public class TypeSafePlcWriteResponse<T> extends PlcWriteResponse {
 
-    public TypeSafePlcWriteResponse(TypeSafePlcWriteRequest<T> request, WriteResponseItem<T> responseItem) {
+    public TypeSafePlcWriteResponse(TypeSafePlcWriteRequest<T> request, PlcWriteResponseItem<T> responseItem) {
         super(request, responseItem);
     }
 
-    public TypeSafePlcWriteResponse(TypeSafePlcWriteRequest<T> request, List<WriteResponseItem<T>> responseItems) {
+    public TypeSafePlcWriteResponse(TypeSafePlcWriteRequest<T> request, List<PlcWriteResponseItem<T>> responseItems) {
         super(request, responseItems);
     }
 
@@ -42,14 +42,14 @@ public class TypeSafePlcWriteResponse<T> extends PlcWriteResponse {
 
     @Override
     @SuppressWarnings("unchecked")
-    public List<? extends WriteResponseItem<T>> getResponseItems() {
-        return (List<WriteResponseItem<T>>) super.getResponseItems();
+    public List<? extends PlcWriteResponseItem<T>> getResponseItems() {
+        return (List<PlcWriteResponseItem<T>>) super.getResponseItems();
     }
 
     @Override
     @SuppressWarnings("unchecked")
-    public Optional<WriteResponseItem<T>> getResponseItem() {
-        return (Optional<WriteResponseItem<T>>) super.getResponseItem();
+    public Optional<PlcWriteResponseItem<T>> getResponseItem() {
+        return (Optional<PlcWriteResponseItem<T>>) super.getResponseItem();
     }
 
     @SuppressWarnings("unchecked")
@@ -61,7 +61,7 @@ public class TypeSafePlcWriteResponse<T> extends PlcWriteResponse {
             return new TypeSafePlcWriteResponse((TypeSafePlcWriteRequest) plcWriteResponse.getRequest(), plcWriteResponse.getResponseItems());
         }
         Class<?> referenceType = null;
-        for (WriteResponseItem<?> writeResponseItem : plcWriteResponse.getResponseItems()) {
+        for (PlcWriteResponseItem<?> writeResponseItem : plcWriteResponse.getResponseItems()) {
             Class<?> foundDataType = writeResponseItem.getRequestItem().getDatatype();
             if (referenceType == null) {
                 referenceType = foundDataType;
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/Address.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcField.java
similarity index 80%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/model/Address.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcField.java
index b2b306b..280e244 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/Address.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcField.java
@@ -19,17 +19,17 @@ under the License.
 package org.apache.plc4x.java.api.model;
 
 /**
- * Base type for all address types.
+ * Base type for all field types.
  * Typically every driver provides an implementation of this interface in order
- * to be able to describe the address of a resource. As this is completely tied to
+ * to be able to describe the fields of a resource. As this is completely tied to
  * the implemented protocol, this base interface makes absolutely no assumption to
  * any information it should provide.
  *
  * In order to stay platform and protocol independent every driver connection implementation
- * provides a parseAddress(String) method that is able to parse a string representation of
- * a resource into it's individual address type. Manually constructing Address objects
+ * provides a prepareField(String) method that is able to parse a string representation of
+ * a resource into it's individual field type. Manually constructing PlcField objects
  * manually makes the solution less independent from the protocol, but might be faster.
  */
-public interface Address {
+public interface PlcField {
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/SubscriptionHandle.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcSubscriptionHandle.java
similarity index 90%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/model/SubscriptionHandle.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcSubscriptionHandle.java
index 445d9e9..f2fea40 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/SubscriptionHandle.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcSubscriptionHandle.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.api.model;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.api.model;
 
 /**
  * When subscribing to remote resources, depending on the used protocol
@@ -24,9 +24,9 @@ under the License.
  * to be implemented in the individual Driver implementations to contain
  * all information needed to pull or unsubscribe any form of subscription.
  *
- * For every subscribed item, a separate {@link SubscriptionHandle} object is
+ * For every subscribed item, a separate {@link PlcSubscriptionHandle} object is
  * returned in order to allow fine granular unsubscriptions.
  */
-public interface SubscriptionHandle {
+public interface PlcSubscriptionHandle {
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/SubscriptionType.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcSubscriptionType.java
similarity index 92%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/model/SubscriptionType.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcSubscriptionType.java
index 287420b..fdd1ec1 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/SubscriptionType.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcSubscriptionType.java
@@ -19,10 +19,10 @@ under the License.
 */
 
 /**
- * {@link SubscriptionType} specifies the nature of the subscription.
+ * {@link PlcSubscriptionType} specifies the nature of the subscription.
  * In general PLC4X supports exactly 3 types of subscriptions.
  */
-public enum SubscriptionType {
+public enum PlcSubscriptionType {
 
     /**
      * A cyclic subscription where a value is sent no matter if it's value changed in a given interval.
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/types/ResponseCode.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/types/PlcResponseCode.java
similarity index 96%
rename from plc4j/api/src/main/java/org/apache/plc4x/java/api/types/ResponseCode.java
rename to plc4j/api/src/main/java/org/apache/plc4x/java/api/types/PlcResponseCode.java
index c8c31b7..0bb1364 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/types/ResponseCode.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/types/PlcResponseCode.java
@@ -18,7 +18,7 @@ under the License.
 */
 package org.apache.plc4x.java.api.types;
 
-public enum ResponseCode {
+public enum PlcResponseCode {
     OK,
     NOT_FOUND,
     INVALID_ADDRESS,
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/ImmutabilityTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/ImmutabilityTest.java
index d6d60a8..7ddcd6a 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/ImmutabilityTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/ImmutabilityTest.java
@@ -45,13 +45,13 @@ import static org.mutabilitydetector.unittesting.MutabilityMatchers.areImmutable
 public class ImmutabilityTest {
 
     private static Set<Class<?>> NOT_YET_IMMUTABLE = Stream.of(
-        ReadResponseItem.class,
+        PlcReadResponseItem.class,
         SubscriptionEventItem.class,
         SubscriptionRequestCyclicItem.class,
         SubscriptionRequestItem.class,
         SubscriptionResponseItem.class,
         UnsubscriptionRequestItem.class,
-        WriteRequestItem.class,
+        PlcWriteRequestItem.class,
         PlcProprietaryRequest.class,
         PlcProprietaryResponse.class,
         PlcSubscriptionEvent.class,
@@ -65,8 +65,8 @@ public class ImmutabilityTest {
     public static Collection<Object[]> data() {
         return Stream.of(
             PlcUsernamePasswordAuthentication.class,
-            ReadRequestItem.class,
-            ReadResponseItem.class,
+            PlcReadRequestItem.class,
+            PlcReadResponseItem.class,
             SubscriptionEventItem.class,
             SubscriptionRequestChangeOfStateItem.class,
             SubscriptionRequestCyclicItem.class,
@@ -74,8 +74,8 @@ public class ImmutabilityTest {
             SubscriptionRequestItem.class,
             SubscriptionResponseItem.class,
             UnsubscriptionRequestItem.class,
-            WriteRequestItem.class,
-            WriteResponseItem.class,
+            PlcWriteRequestItem.class,
+            PlcWriteResponseItem.class,
             TypeSafePlcReadRequest.class,
             TypeSafePlcReadResponse.class,
             TypeSafePlcWriteRequest.class,
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcReaderTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcReaderTest.java
index 368286f..9107ccf 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcReaderTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcReaderTest.java
@@ -19,10 +19,10 @@
 package org.apache.plc4x.java.api.connection;
 
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.junit.Test;
 
 import java.util.Collections;
@@ -41,14 +41,14 @@ public class PlcReaderTest {
     @Test
     public void read() throws Exception {
         ((PlcReader) readRequest -> CompletableFuture.completedFuture(new PlcReadResponse(readRequest, Collections.emptyList())))
-            .read(new TypeSafePlcReadRequest<>(String.class, mock(Address.class))).get();
+            .read(new TypeSafePlcReadRequest<>(String.class, mock(PlcField.class))).get();
     }
 
     @Test
     public void readWrongType() throws Exception {
         try {
-            ((PlcReader) readRequest -> CompletableFuture.completedFuture(new PlcReadResponse(readRequest, (List) Collections.singletonList(new ReadResponseItem(readRequest.getRequestItem().get(), ResponseCode.OK, 1)))))
-                .read(new TypeSafePlcReadRequest<>(String.class, mock(Address.class))).get();
+            ((PlcReader) readRequest -> CompletableFuture.completedFuture(new PlcReadResponse(readRequest, (List) Collections.singletonList(new PlcReadResponseItem(readRequest.getRequestItem().get(), PlcResponseCode.OK, 1)))))
+                .read(new TypeSafePlcReadRequest<>(String.class, mock(PlcField.class))).get();
             fail("Should throw an exception");
         } catch (IllegalArgumentException e) {
             assertThat(e.getMessage(), equalTo("Datatype of 1 doesn't match required datatype of class java.lang.String"));
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcWriterTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcWriterTest.java
index d60102e..ec477a5 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcWriterTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/connection/PlcWriterTest.java
@@ -20,7 +20,7 @@ package org.apache.plc4x.java.api.connection;
 
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.junit.Test;
 
 import java.util.Collections;
@@ -33,7 +33,7 @@ public class PlcWriterTest {
     @Test
     public void write() throws Exception {
         PlcWriter dummyImplementation = writeRequest -> CompletableFuture.completedFuture(new TypeSafePlcWriteResponse((TypeSafePlcWriteRequest) writeRequest, Collections.emptyList()));
-        dummyImplementation.write(new TypeSafePlcWriteRequest<>(String.class, mock(Address.class))).get();
+        dummyImplementation.write(new TypeSafePlcWriteRequest<>(String.class, mock(PlcField.class))).get();
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
index afeeef2..87f3aaf 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/APIMessageTests.java
@@ -19,14 +19,14 @@ under the License.
 
 package org.apache.plc4x.java.api.messages;
 
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
-import org.apache.plc4x.java.api.messages.mock.MockAddress;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteResponseItem;
+import org.apache.plc4x.java.api.messages.mock.MockField;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.test.FastTests;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -47,9 +47,9 @@ public class APIMessageTests {
     @Test
     @Category(FastTests.class)
     public void readRequestItemSize() {
-        MockAddress address = new MockAddress("mock:/DATA");
-        ReadRequestItem<Byte> readRequestItem = new ReadRequestItem<>(Byte.class, address, 1);
-        assertThat("Unexpected address", readRequestItem.getAddress(), equalTo(address));
+        MockField field = new MockField("mock:/DATA");
+        PlcReadRequestItem<Byte> readRequestItem = new PlcReadRequestItem<>(Byte.class, field, 1);
+        assertThat("Unexpected field", readRequestItem.getField(), equalTo(field));
         assertThat("Unexpected data type", readRequestItem.getDatatype(), equalTo(Byte.class));
         assertThat("Unexpected size", readRequestItem.getSize(), equalTo(1));
     }
@@ -57,9 +57,9 @@ public class APIMessageTests {
     @Test
     @Category(FastTests.class)
     public void readRequestItem() {
-        MockAddress address = new MockAddress("mock:/DATA");
-        ReadRequestItem<Byte> readRequestItem = new ReadRequestItem<>(Byte.class, address);
-        assertThat("Unexpected address", readRequestItem.getAddress(), equalTo(address));
+        MockField field = new MockField("mock:/DATA");
+        PlcReadRequestItem<Byte> readRequestItem = new PlcReadRequestItem<>(Byte.class, field);
+        assertThat("Unexpected field", readRequestItem.getField(), equalTo(field));
         assertThat("Unexpected data type", readRequestItem.getDatatype(), equalTo(Byte.class));
         assertThat("Unexpected size", readRequestItem.getSize(), equalTo(1));
     }
@@ -67,10 +67,10 @@ public class APIMessageTests {
     @Test
     @Category(FastTests.class)
     public void readResponseItem() {
-        MockAddress address = new MockAddress("mock:/DATA");
-        ReadRequestItem<Byte> readRequestItem = new ReadRequestItem<>(Byte.class, address, 1);
-        ReadResponseItem<Byte> readResponseItem = new ReadResponseItem<>(readRequestItem, ResponseCode.OK);
-        assertThat("Unexpected response code", readResponseItem.getResponseCode(), equalTo(ResponseCode.OK));
+        MockField field = new MockField("mock:/DATA");
+        PlcReadRequestItem<Byte> readRequestItem = new PlcReadRequestItem<>(Byte.class, field, 1);
+        PlcReadResponseItem<Byte> readResponseItem = new PlcReadResponseItem<>(readRequestItem, PlcResponseCode.OK);
+        assertThat("Unexpected response code", readResponseItem.getResponseCode(), equalTo(PlcResponseCode.OK));
         assertThat(readResponseItem.getValues(), empty());
         assertThat("Unexpected read request item", readResponseItem.getRequestItem(), equalTo(readRequestItem));
     }
@@ -78,10 +78,10 @@ public class APIMessageTests {
     @Test
     @Category(FastTests.class)
     public void writeRequestItem() {
-        MockAddress address = new MockAddress("mock:/DATA");
-        WriteRequestItem<Byte> writeRequestItem = new WriteRequestItem<>(Byte.class, address, (byte) 0x45);
+        MockField field = new MockField("mock:/DATA");
+        PlcWriteRequestItem<Byte> writeRequestItem = new PlcWriteRequestItem<>(Byte.class, field, (byte) 0x45);
 
-        assertThat("Unexpected address", writeRequestItem.getAddress(), equalTo(address));
+        assertThat("Unexpected field", writeRequestItem.getField(), equalTo(field));
         assertThat("Unexpected data type", writeRequestItem.getDatatype(), equalTo(Byte.class));
         assertThat("Unexpected value", writeRequestItem.getValues().get(0), equalTo((byte) 0x45));
     }
@@ -89,10 +89,10 @@ public class APIMessageTests {
     @Test
     @Category(FastTests.class)
     public void writeRequestItems() {
-        MockAddress address = new MockAddress("mock:/DATA");
+        MockField field = new MockField("mock:/DATA");
         Byte data[] = {(byte) 0x23, (byte) 0x84};
-        WriteRequestItem<Byte> writeRequestItem = new WriteRequestItem<>(Byte.class, address, data);
-        assertThat("Unexpected address", writeRequestItem.getAddress(), equalTo(address));
+        PlcWriteRequestItem<Byte> writeRequestItem = new PlcWriteRequestItem<>(Byte.class, field, data);
+        assertThat("Unexpected field", writeRequestItem.getField(), equalTo(field));
         assertThat("Unexpected data type", writeRequestItem.getDatatype(), equalTo(Byte.class));
         assertThat("Unexpected value", writeRequestItem.getValues().get(0), equalTo((byte) 0x23));
         assertThat("Unexpected value", writeRequestItem.getValues().get(1), equalTo((byte) 0x84));
@@ -101,10 +101,10 @@ public class APIMessageTests {
     @Test
     @Category(FastTests.class)
     public void writeResponseItem() {
-        MockAddress address = new MockAddress("mock:/DATA");
-        WriteRequestItem<Byte> writeRequestItem = new WriteRequestItem<>(Byte.class, address, (byte) 0x3B);
-        WriteResponseItem<Byte> writeResponseItem = new WriteResponseItem<>(writeRequestItem, ResponseCode.OK);
-        assertThat("Unexpected response code", writeResponseItem.getResponseCode(), equalTo(ResponseCode.OK));
+        MockField field = new MockField("mock:/DATA");
+        PlcWriteRequestItem<Byte> writeRequestItem = new PlcWriteRequestItem<>(Byte.class, field, (byte) 0x3B);
+        PlcWriteResponseItem<Byte> writeResponseItem = new PlcWriteResponseItem<>(writeRequestItem, PlcResponseCode.OK);
+        assertThat("Unexpected response code", writeResponseItem.getResponseCode(), equalTo(PlcResponseCode.OK));
         assertThat("Unexpected response item", writeResponseItem.getRequestItem(), equalTo(writeRequestItem));
     }
 
@@ -133,9 +133,9 @@ public class APIMessageTests {
 
     @Test
     @Category(FastTests.class)
-    public void plcReadRequestAddress() {
-        MockAddress address = new MockAddress("mock:/DATA");
-        PlcReadRequest plcReadRequest = new TypeSafePlcReadRequest<>(Byte.class, address);
+    public void plcReadRequestField() {
+        MockField field = new MockField("mock:/DATA");
+        PlcReadRequest plcReadRequest = new TypeSafePlcReadRequest<>(Byte.class, field);
         assertThat("Expected one request item", plcReadRequest.getRequestItems(), hasSize(1));
         assertThat("Expected one request item", plcReadRequest.getNumberOfItems(), equalTo(1));
     }
@@ -143,8 +143,8 @@ public class APIMessageTests {
     @Test
     @Category(FastTests.class)
     public void plcReadRequestSize() {
-        MockAddress address = new MockAddress("mock:/DATA");
-        PlcReadRequest plcReadRequest = PlcReadRequest.builder().addItem(Byte.class, address, (byte) 1).build(Byte.class);
+        MockField field = new MockField("mock:/DATA");
+        PlcReadRequest plcReadRequest = PlcReadRequest.builder().addItem(Byte.class, field, (byte) 1).build(Byte.class);
         assertThat("Expected one request item", plcReadRequest.getRequestItems(), hasSize(1));
         assertThat("Expected one request item", plcReadRequest.getNumberOfItems(), equalTo(1));
     }
@@ -155,8 +155,8 @@ public class APIMessageTests {
         PlcReadRequest plcReadRequest = new PlcReadRequest();
         assertThat(plcReadRequest.getRequestItems(), empty());
         assertThat("Expected request items to be zero", plcReadRequest.getNumberOfItems(), equalTo(0));
-        MockAddress address = new MockAddress("mock:/DATA");
-        ReadRequestItem<Byte> readRequestItem = new ReadRequestItem<>(Byte.class, address, (byte) 1);
+        MockField field = new MockField("mock:/DATA");
+        PlcReadRequestItem<Byte> readRequestItem = new PlcReadRequestItem<>(Byte.class, field, (byte) 1);
         plcReadRequest.addItem(readRequestItem);
         assertThat("Expected one request item", plcReadRequest.getRequestItems(), hasSize(1));
         assertThat("Expected one request item", plcReadRequest.getNumberOfItems(), equalTo(1));
@@ -166,10 +166,10 @@ public class APIMessageTests {
     @Category(FastTests.class)
     public void plcReadResponse() {
         PlcReadRequest plcReadRequest = new PlcReadRequest();
-        List<ReadResponseItem<?>> responseItems = new ArrayList<>();
-        MockAddress address = new MockAddress("mock:/DATA");
-        ReadRequestItem<Byte> readRequestItem = new ReadRequestItem<>(Byte.class, address, 1);
-        ReadResponseItem<Byte> readResponseItem = new ReadResponseItem<>(readRequestItem, ResponseCode.OK);
+        List<PlcReadResponseItem<?>> responseItems = new ArrayList<>();
+        MockField field = new MockField("mock:/DATA");
+        PlcReadRequestItem<Byte> readRequestItem = new PlcReadRequestItem<>(Byte.class, field, 1);
+        PlcReadResponseItem<Byte> readResponseItem = new PlcReadResponseItem<>(readRequestItem, PlcResponseCode.OK);
         responseItems.add(readResponseItem);
         PlcReadResponse plcReadResponse = new PlcReadResponse(plcReadRequest, responseItems);
         assertThat("Unexpected number of response items", plcReadResponse.getRequest().getNumberOfItems(), equalTo(0));
@@ -189,8 +189,8 @@ public class APIMessageTests {
     @Test
     @Category(FastTests.class)
     public void plcWriteRequestObject() {
-        MockAddress address = new MockAddress("mock:/DATA");
-        PlcWriteRequest plcWriteRequest = new TypeSafePlcWriteRequest<>(Byte.class, address, (byte) 0x33);
+        MockField field = new MockField("mock:/DATA");
+        PlcWriteRequest plcWriteRequest = new TypeSafePlcWriteRequest<>(Byte.class, field, (byte) 0x33);
         assertThat("Expected one request item", plcWriteRequest.getRequestItems(), hasSize(1));
         assertThat("Expected one request item", plcWriteRequest.getNumberOfItems(), equalTo(1));
         List values = plcWriteRequest.getRequestItems().get(0).getValues();
@@ -200,9 +200,9 @@ public class APIMessageTests {
     @Test
     @Category(FastTests.class)
     public void plcWriteRequestObjects() {
-        MockAddress address = new MockAddress("mock:/DATA");
+        MockField field = new MockField("mock:/DATA");
         Byte[] data = {(byte) 0x22, (byte) 0x66};
-        PlcWriteRequest plcWriteRequest = new TypeSafePlcWriteRequest<>(Byte.class, address, data);
+        PlcWriteRequest plcWriteRequest = new TypeSafePlcWriteRequest<>(Byte.class, field, data);
         assertThat("Expected one request item", plcWriteRequest.getRequestItems(), hasSize(1));
         assertThat("Expected one request item", plcWriteRequest.getNumberOfItems(), equalTo(1));
         List values = plcWriteRequest.getRequestItems().get(0).getValues();
@@ -214,10 +214,10 @@ public class APIMessageTests {
     @Category(FastTests.class)
     public void plcWriteResponse() {
         PlcWriteRequest plcWriteRequest = new PlcWriteRequest();
-        List<WriteResponseItem<?>> responseItems = new ArrayList<>();
-        MockAddress address = new MockAddress("mock:/DATA");
-        WriteRequestItem<Byte> writeRequestItem = new WriteRequestItem<>(Byte.class, address, (byte) 1);
-        WriteResponseItem<Byte> writeResponseItem = new WriteResponseItem<>(writeRequestItem, ResponseCode.OK);
+        List<PlcWriteResponseItem<?>> responseItems = new ArrayList<>();
+        MockField field = new MockField("mock:/DATA");
+        PlcWriteRequestItem<Byte> writeRequestItem = new PlcWriteRequestItem<>(Byte.class, field, (byte) 1);
+        PlcWriteResponseItem<Byte> writeResponseItem = new PlcWriteResponseItem<>(writeRequestItem, PlcResponseCode.OK);
         responseItems.add(writeResponseItem);
         PlcWriteResponse plcReadResponse = new PlcWriteResponse(plcWriteRequest, responseItems);
         assertThat("Unexpected number of response items", plcReadResponse.getRequest().getNumberOfItems(), equalTo(0));
@@ -230,17 +230,17 @@ public class APIMessageTests {
     @Category(FastTests.class)
     public void bulkPlcWriteResponseGetValue() {
         PlcWriteRequest plcWriteRequest = new PlcWriteRequest();
-        List<WriteResponseItem<?>> responseItems = new ArrayList<>();
-        MockAddress address = new MockAddress("mock:/DATA");
-        WriteRequestItem<Byte> writeRequestItem1 = new WriteRequestItem<>(Byte.class, address, (byte) 1);
-        WriteRequestItem<Byte> writeRequestItem2 = new WriteRequestItem<>(Byte.class, address, (byte) 1);
-        WriteResponseItem<Byte> writeResponseItem1 = new WriteResponseItem<>(writeRequestItem1, ResponseCode.OK);
-        WriteResponseItem<Byte> writeResponseItem2 = new WriteResponseItem<>(writeRequestItem2, ResponseCode.OK);
+        List<PlcWriteResponseItem<?>> responseItems = new ArrayList<>();
+        MockField field = new MockField("mock:/DATA");
+        PlcWriteRequestItem<Byte> writeRequestItem1 = new PlcWriteRequestItem<>(Byte.class, field, (byte) 1);
+        PlcWriteRequestItem<Byte> writeRequestItem2 = new PlcWriteRequestItem<>(Byte.class, field, (byte) 1);
+        PlcWriteResponseItem<Byte> writeResponseItem1 = new PlcWriteResponseItem<>(writeRequestItem1, PlcResponseCode.OK);
+        PlcWriteResponseItem<Byte> writeResponseItem2 = new PlcWriteResponseItem<>(writeRequestItem2, PlcResponseCode.OK);
         responseItems.add(writeResponseItem1);
         responseItems.add(writeResponseItem2);
         PlcWriteResponse plcWriteResponse = new PlcWriteResponse(plcWriteRequest, responseItems);
-        Optional<WriteResponseItem<Byte>> responseValue1 = plcWriteResponse.getValue(writeRequestItem1);
-        Optional<WriteResponseItem<Byte>> responseValue2 = plcWriteResponse.getValue(writeRequestItem2);
+        Optional<PlcWriteResponseItem<Byte>> responseValue1 = plcWriteResponse.getValue(writeRequestItem1);
+        Optional<PlcWriteResponseItem<Byte>> responseValue2 = plcWriteResponse.getValue(writeRequestItem2);
         assertThat("Unexpected items in response items", responseValue1, equalTo(Optional.of(writeResponseItem1)));
         assertThat("Unexpected items in response items", responseValue2, equalTo(Optional.of(writeResponseItem2)));
     }
@@ -249,11 +249,11 @@ public class APIMessageTests {
     @Category(FastTests.class)
     public void nonExistingItemPlcWriteResponseGetValue() {
         PlcWriteRequest plcWriteRequest = new PlcWriteRequest();
-        List<WriteResponseItem<?>> responseItems = new ArrayList<>();
-        MockAddress address = new MockAddress("mock:/DATA");
-        WriteRequestItem<Byte> nonExistingWriteRequestItem = new WriteRequestItem<>(Byte.class, address, (byte) 1);
+        List<PlcWriteResponseItem<?>> responseItems = new ArrayList<>();
+        MockField field = new MockField("mock:/DATA");
+        PlcWriteRequestItem<Byte> nonExistingWriteRequestItem = new PlcWriteRequestItem<>(Byte.class, field, (byte) 1);
         PlcWriteResponse plcWriteResponse = new PlcWriteResponse(plcWriteRequest, responseItems);
-        Optional<WriteResponseItem<Byte>> responseValue1 = plcWriteResponse.getValue(nonExistingWriteRequestItem);
+        Optional<PlcWriteResponseItem<Byte>> responseValue1 = plcWriteResponse.getValue(nonExistingWriteRequestItem);
         assertThat("Unexpected items in response items", responseValue1, equalTo(Optional.empty()));
     }
 
@@ -261,17 +261,17 @@ public class APIMessageTests {
     @Category(FastTests.class)
     public void bulkPlcReadResponseGetValue() {
         PlcReadRequest plcReadRequest = new PlcReadRequest();
-        List<ReadResponseItem<?>> responseItems = new ArrayList<>();
-        MockAddress address = new MockAddress("mock:/DATA");
-        ReadRequestItem<Byte> readRequestItem1 = new ReadRequestItem<>(Byte.class, address, 1);
-        ReadRequestItem<Byte> readRequestItem2 = new ReadRequestItem<>(Byte.class, address, 1);
-        ReadResponseItem<Byte> readResponseItem1 = new ReadResponseItem<>(readRequestItem1, ResponseCode.OK);
-        ReadResponseItem<Byte> readResponseItem2 = new ReadResponseItem<>(readRequestItem2, ResponseCode.OK);
+        List<PlcReadResponseItem<?>> responseItems = new ArrayList<>();
+        MockField field = new MockField("mock:/DATA");
+        PlcReadRequestItem<Byte> readRequestItem1 = new PlcReadRequestItem<>(Byte.class, field, 1);
+        PlcReadRequestItem<Byte> readRequestItem2 = new PlcReadRequestItem<>(Byte.class, field, 1);
+        PlcReadResponseItem<Byte> readResponseItem1 = new PlcReadResponseItem<>(readRequestItem1, PlcResponseCode.OK);
+        PlcReadResponseItem<Byte> readResponseItem2 = new PlcReadResponseItem<>(readRequestItem2, PlcResponseCode.OK);
         responseItems.add(readResponseItem1);
         responseItems.add(readResponseItem2);
         PlcReadResponse plcReadResponse = new PlcReadResponse(plcReadRequest, responseItems);
-        Optional<ReadResponseItem<Byte>> responseValue1 = plcReadResponse.getValue(readRequestItem1);
-        Optional<ReadResponseItem<Byte>> responseValue2 = plcReadResponse.getValue(readRequestItem2);
+        Optional<PlcReadResponseItem<Byte>> responseValue1 = plcReadResponse.getValue(readRequestItem1);
+        Optional<PlcReadResponseItem<Byte>> responseValue2 = plcReadResponse.getValue(readRequestItem2);
         assertThat("Unexpected items in response items", responseValue1, equalTo(Optional.of(readResponseItem1)));
         assertThat("Unexpected items in response items", responseValue2, equalTo(Optional.of(readResponseItem2)));
     }
@@ -280,11 +280,11 @@ public class APIMessageTests {
     @Category(FastTests.class)
     public void nonExistingItemPlcReadResponseGetValue() {
         PlcReadRequest plcReadRequest = new PlcReadRequest();
-        List<ReadResponseItem<?>> responseItems = new ArrayList<>();
-        MockAddress address = new MockAddress("mock:/DATA");
-        ReadRequestItem<Byte> nonExistingReadRequestItem = new ReadRequestItem<>(Byte.class, address, 1);
+        List<PlcReadResponseItem<?>> responseItems = new ArrayList<>();
+        MockField field = new MockField("mock:/DATA");
+        PlcReadRequestItem<Byte> nonExistingReadRequestItem = new PlcReadRequestItem<>(Byte.class, field, 1);
         PlcReadResponse plcReadResponse = new PlcReadResponse(plcReadRequest, responseItems);
-        Optional<ReadResponseItem<Byte>> responseValue1 = plcReadResponse.getValue(nonExistingReadRequestItem);
+        Optional<PlcReadResponseItem<Byte>> responseValue1 = plcReadResponse.getValue(nonExistingReadRequestItem);
         assertThat("Unexpected items in response items", responseValue1, equalTo(Optional.empty()));
     }
 
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadRequestTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadRequestTest.java
index 9d077b9..527b9a6 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadRequestTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadRequestTest.java
@@ -18,8 +18,8 @@
  */
 package org.apache.plc4x.java.api.messages;
 
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -30,20 +30,20 @@ import static org.mockito.Mockito.mock;
 
 public class PlcReadRequestTest {
 
-    Address dummyAddress;
+    PlcField dummyField;
 
     @Before
     public void setUp() {
-        dummyAddress = mock(Address.class);
+        dummyField = mock(PlcField.class);
     }
 
     @Test
     public void constructor() {
         new PlcReadRequest();
-        new PlcReadRequest(new ReadRequestItem<>(String.class, dummyAddress));
-        new PlcReadRequest(String.class, dummyAddress);
-        new PlcReadRequest(String.class, dummyAddress, 13);
-        new PlcReadRequest(Collections.singletonList(new ReadRequestItem<>(String.class, dummyAddress)));
+        new PlcReadRequest(new PlcReadRequestItem<>(String.class, dummyField));
+        new PlcReadRequest(String.class, dummyField);
+        new PlcReadRequest(String.class, dummyField, 13);
+        new PlcReadRequest(Collections.singletonList(new PlcReadRequestItem<>(String.class, dummyField)));
     }
 
     @Test
@@ -58,30 +58,30 @@ public class PlcReadRequestTest {
         }
         { // one item
             PlcReadRequest.builder()
-                .addItem(String.class, dummyAddress)
+                .addItem(String.class, dummyField)
                 .build();
         }
         { // one item sized
             PlcReadRequest.builder()
-                .addItem(String.class, dummyAddress, 13)
+                .addItem(String.class, dummyField, 13)
                 .build();
         }
         { // one item prebuild
             PlcReadRequest.builder()
-                .addItem(new ReadRequestItem<>(String.class, dummyAddress))
+                .addItem(new PlcReadRequestItem<>(String.class, dummyField))
                 .build();
         }
         { // two different item
             PlcReadRequest.builder()
-                .addItem(String.class, dummyAddress)
-                .addItem(Byte.class, dummyAddress)
+                .addItem(String.class, dummyField)
+                .addItem(Byte.class, dummyField)
                 .build();
         }
         { // two different item typeSafe
             try {
                 PlcReadRequest.builder()
-                    .addItem(String.class, dummyAddress)
-                    .addItem(Byte.class, dummyAddress)
+                    .addItem(String.class, dummyField)
+                    .addItem(Byte.class, dummyField)
                     .build(String.class);
                 fail("Should not succeed in building with mixed types.");
             } catch (IllegalStateException e) {
@@ -91,8 +91,8 @@ public class PlcReadRequestTest {
         { // two different item typeSafe
             try {
                 PlcReadRequest.builder()
-                    .addItem(String.class, dummyAddress)
-                    .addItem(Byte.class, dummyAddress)
+                    .addItem(String.class, dummyField)
+                    .addItem(Byte.class, dummyField)
                     .build(Byte.class);
                 fail("Should not succeed in building with mismatch of types.");
             } catch (ClassCastException e) {
@@ -101,8 +101,8 @@ public class PlcReadRequestTest {
         }
         { // two equal item typeSafe
             PlcReadRequest.builder()
-                .addItem(Byte.class, dummyAddress)
-                .addItem(Byte.class, dummyAddress)
+                .addItem(Byte.class, dummyField)
+                .addItem(Byte.class, dummyField)
                 .build(Byte.class);
         }
     }
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadResponseTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadResponseTest.java
index 244e78c..c13a1c9 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadResponseTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcReadResponseTest.java
@@ -18,8 +18,8 @@
  */
 package org.apache.plc4x.java.api.messages;
 
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
 import org.junit.Test;
 
 import java.util.Collections;
@@ -32,14 +32,14 @@ public class PlcReadResponseTest {
 
     @Test
     public void constructor() {
-        new PlcReadResponse(mock(PlcReadRequest.class), mock(ReadResponseItem.class));
-        new PlcReadResponse(mock(PlcReadRequest.class), (List) Collections.singletonList(mock(ReadResponseItem.class)));
+        new PlcReadResponse(mock(PlcReadRequest.class), mock(PlcReadResponseItem.class));
+        new PlcReadResponse(mock(PlcReadRequest.class), (List) Collections.singletonList(mock(PlcReadResponseItem.class)));
     }
 
     @Test
     public void getValue() {
-        new PlcReadResponse(mock(PlcReadRequest.class), (List) Collections.singletonList(mock(ReadResponseItem.class, RETURNS_DEEP_STUBS)))
-            .getValue(mock(ReadRequestItem.class));
+        new PlcReadResponse(mock(PlcReadRequest.class), (List) Collections.singletonList(mock(PlcReadResponseItem.class, RETURNS_DEEP_STUBS)))
+            .getValue(mock(PlcReadRequestItem.class));
     }
 
 }
\ No newline at end of file
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteRequestTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteRequestTest.java
index ea510d9..113fb92 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteRequestTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteRequestTest.java
@@ -18,8 +18,8 @@
  */
 package org.apache.plc4x.java.api.messages;
 
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -30,19 +30,19 @@ import static org.mockito.Mockito.mock;
 
 public class PlcWriteRequestTest {
 
-    Address dummyAddress;
+    PlcField dummyField;
 
     @Before
     public void setUp() {
-        dummyAddress = mock(Address.class);
+        dummyField = mock(PlcField.class);
     }
 
     @Test
     public void constructor() {
         new PlcWriteRequest();
-        new PlcWriteRequest(new WriteRequestItem<>(String.class, dummyAddress, ""));
-        new PlcWriteRequest(String.class, dummyAddress);
-        new PlcWriteRequest(Collections.singletonList(new WriteRequestItem<>(String.class, dummyAddress)));
+        new PlcWriteRequest(new PlcWriteRequestItem<>(String.class, dummyField, ""));
+        new PlcWriteRequest(String.class, dummyField);
+        new PlcWriteRequest(Collections.singletonList(new PlcWriteRequestItem<>(String.class, dummyField)));
     }
 
     @Test
@@ -57,30 +57,30 @@ public class PlcWriteRequestTest {
         }
         { // one item implicit type
             PlcWriteRequest.builder()
-                .addItem(dummyAddress, "")
+                .addItem(dummyField, "")
                 .build();
         }
         { // one item
             PlcWriteRequest.builder()
-                .addItem(String.class, dummyAddress)
+                .addItem(String.class, dummyField)
                 .build();
         }
         { // one item prebuild
             PlcWriteRequest.builder()
-                .addItem(new WriteRequestItem<>(String.class, dummyAddress))
+                .addItem(new PlcWriteRequestItem<>(String.class, dummyField))
                 .build();
         }
         { // two different item
             PlcWriteRequest.builder()
-                .addItem(String.class, dummyAddress)
-                .addItem(Byte.class, dummyAddress)
+                .addItem(String.class, dummyField)
+                .addItem(Byte.class, dummyField)
                 .build();
         }
         { // two different item typeSafe
             try {
                 PlcWriteRequest.builder()
-                    .addItem(String.class, dummyAddress)
-                    .addItem(Byte.class, dummyAddress)
+                    .addItem(String.class, dummyField)
+                    .addItem(Byte.class, dummyField)
                     .build(String.class);
                 fail("Mixed types build should fail.");
             } catch (IllegalStateException e) {
@@ -90,8 +90,8 @@ public class PlcWriteRequestTest {
         { // two different item typeSafe
             try {
                 PlcWriteRequest.builder()
-                    .addItem(String.class, dummyAddress)
-                    .addItem(Byte.class, dummyAddress)
+                    .addItem(String.class, dummyField)
+                    .addItem(Byte.class, dummyField)
                     .build(Byte.class);
                 fail("Mismatch of types should have failed.");
             } catch (ClassCastException e) {
@@ -100,8 +100,8 @@ public class PlcWriteRequestTest {
         }
         { // two equal item typeSafe
             PlcWriteRequest.builder()
-                .addItem(Byte.class, dummyAddress)
-                .addItem(Byte.class, dummyAddress)
+                .addItem(Byte.class, dummyField)
+                .addItem(Byte.class, dummyField)
                 .build(Byte.class);
         }
     }
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteResponseTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteResponseTest.java
index 04b1ae4..5f97f4d 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteResponseTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/PlcWriteResponseTest.java
@@ -18,8 +18,8 @@
  */
 package org.apache.plc4x.java.api.messages;
 
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteResponseItem;
 import org.junit.Test;
 
 import java.util.Collections;
@@ -32,18 +32,18 @@ public class PlcWriteResponseTest {
 
     @Test
     public void constructor() {
-        new PlcWriteResponse(mock(PlcWriteRequest.class), mock(WriteResponseItem.class));
-        new PlcWriteResponse(mock(PlcWriteRequest.class), (List) Collections.singletonList(mock(WriteResponseItem.class)));
+        new PlcWriteResponse(mock(PlcWriteRequest.class), mock(PlcWriteResponseItem.class));
+        new PlcWriteResponse(mock(PlcWriteRequest.class), (List) Collections.singletonList(mock(PlcWriteResponseItem.class)));
     }
 
     @Test
     public void getValue() {
-        new PlcWriteResponse(mock(PlcWriteRequest.class), (List) Collections.singletonList(mock(WriteResponseItem.class, RETURNS_DEEP_STUBS)))
-            .getValue(mock(WriteRequestItem.class));
+        new PlcWriteResponse(mock(PlcWriteRequest.class), (List) Collections.singletonList(mock(PlcWriteResponseItem.class, RETURNS_DEEP_STUBS)))
+            .getValue(mock(PlcWriteRequestItem.class));
     }
 
     @Test
     public void testToString() {
-        new PlcWriteResponse(mock(PlcWriteRequest.class), mock(WriteResponseItem.class)).toString();
+        new PlcWriteResponse(mock(PlcWriteRequest.class), mock(PlcWriteResponseItem.class)).toString();
     }
 }
\ No newline at end of file
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/mock/MockAddress.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/mock/MockField.java
similarity index 71%
rename from plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/mock/MockAddress.java
rename to plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/mock/MockField.java
index 44ad2c1..a69f9e7 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/mock/MockAddress.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/mock/MockField.java
@@ -18,34 +18,35 @@ under the License.
 */
 package org.apache.plc4x.java.api.messages.mock;
 
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
-public class MockAddress implements Address {
-  private final String address;
+public class MockField implements PlcField {
+
+  private final String field;
   
-  public MockAddress(String address) {
-    this.address = address;
+  public MockField(String field) {
+    this.field = field;
   }
   
-  public String getAddress() {
-    return address;
+  public String getField() {
+    return field;
   }
   
   @Override
   public String toString() {
-    return "mock address: "+address;
+    return "mock field: "+ field;
   }
   
   @Override
   public boolean equals(Object o) {
     return o != null
-        && o instanceof MockAddress
-        && ((MockAddress)o).address.equals(this.address);
+        && o instanceof MockField
+        && ((MockField)o).field.equals(this.field);
   }
 
   @Override
   public int hashCode() {
-    return address.hashCode();
+    return field.hashCode();
   }
 
 }
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequestTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequestTest.java
index 03cf66b..2dc8a1f 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequestTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadRequestTest.java
@@ -19,8 +19,8 @@
 package org.apache.plc4x.java.api.messages.specific;
 
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -33,11 +33,11 @@ import static org.mockito.Mockito.when;
 
 public class TypeSafePlcReadRequestTest {
 
-    ReadRequestItem<String> readRequestItemString;
+    PlcReadRequestItem<String> readRequestItemString;
 
     @Before
     public void setUp() {
-        readRequestItemString = new ReadRequestItem<>(String.class, mock(Address.class));
+        readRequestItemString = new PlcReadRequestItem<>(String.class, mock(PlcField.class));
     }
 
     @Test(expected = IllegalArgumentException.class)
@@ -47,8 +47,8 @@ public class TypeSafePlcReadRequestTest {
         PlcReadRequest request = mock(PlcReadRequest.class);
         when(request.getRequestItems()).thenReturn(Collections.singletonList(readRequestItemString));
         new TypeSafePlcReadRequest<>(String.class, request);
-        new TypeSafePlcReadRequest<>(String.class, mock(Address.class));
-        new TypeSafePlcReadRequest<>(String.class, mock(Address.class), 3);
+        new TypeSafePlcReadRequest<>(String.class, mock(PlcField.class));
+        new TypeSafePlcReadRequest<>(String.class, mock(PlcField.class), 3);
         new TypeSafePlcReadRequest<>(String.class, readRequestItemString);
 
         // expected to fail
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponseTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponseTest.java
index e437307..884240c 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponseTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcReadResponseTest.java
@@ -19,9 +19,9 @@
 package org.apache.plc4x.java.api.messages.specific;
 
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -32,13 +32,13 @@ import static org.mockito.Mockito.*;
 
 public class TypeSafePlcReadResponseTest {
 
-    ReadResponseItem<String> readResponseItemString;
+    PlcReadResponseItem<String> readResponseItemString;
 
     @Before
     public void setUp() {
-        ReadRequestItem<String> mock = mock(ReadRequestItem.class);
+        PlcReadRequestItem<String> mock = mock(PlcReadRequestItem.class);
         when(mock.getDatatype()).thenReturn(String.class);
-        readResponseItemString = new ReadResponseItem<>(mock, ResponseCode.OK, "", "");
+        readResponseItemString = new PlcReadResponseItem<>(mock, PlcResponseCode.OK, "", "");
     }
 
     @Test
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequestTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequestTest.java
index 8d85b51..b0291f8 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequestTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteRequestTest.java
@@ -19,8 +19,8 @@
 package org.apache.plc4x.java.api.messages.specific;
 
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -33,11 +33,11 @@ import static org.mockito.Mockito.when;
 
 public class TypeSafePlcWriteRequestTest {
 
-    WriteRequestItem<String> writeRequestItemString;
+    PlcWriteRequestItem<String> writeRequestItemString;
 
     @Before
     public void setUp() {
-        writeRequestItemString = new WriteRequestItem<>(String.class, mock(Address.class));
+        writeRequestItemString = new PlcWriteRequestItem<>(String.class, mock(PlcField.class));
     }
 
     @Test(expected = IllegalArgumentException.class)
@@ -47,8 +47,8 @@ public class TypeSafePlcWriteRequestTest {
         PlcWriteRequest request = mock(PlcWriteRequest.class);
         when(request.getRequestItems()).thenReturn(Collections.singletonList(writeRequestItemString));
         new TypeSafePlcWriteRequest<>(String.class, request);
-        new TypeSafePlcWriteRequest<>(String.class, mock(Address.class));
-        new TypeSafePlcWriteRequest<>(String.class, mock(Address.class), "");
+        new TypeSafePlcWriteRequest<>(String.class, mock(PlcField.class));
+        new TypeSafePlcWriteRequest<>(String.class, mock(PlcField.class), "");
         new TypeSafePlcWriteRequest<>(String.class, writeRequestItemString);
 
         // expects an exception
diff --git a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponseTest.java b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponseTest.java
index be08ec9..6dc9cda 100644
--- a/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponseTest.java
+++ b/plc4j/api/src/test/java/org/apache/plc4x/java/api/messages/specific/TypeSafePlcWriteResponseTest.java
@@ -19,9 +19,9 @@
 package org.apache.plc4x.java.api.messages.specific;
 
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteResponseItem;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -31,11 +31,12 @@ import java.util.List;
 import static org.mockito.Mockito.*;
 
 public class TypeSafePlcWriteResponseTest {
-    WriteResponseItem<String> writeResponseItemString;
+
+    PlcWriteResponseItem<String> writeResponseItemString;
 
     @Before
     public void setUp() {
-        writeResponseItemString = new WriteResponseItem<>(mock(WriteRequestItem.class), ResponseCode.OK);
+        writeResponseItemString = new PlcWriteResponseItem<>(mock(PlcWriteRequestItem.class), PlcResponseCode.OK);
     }
 
     @Test
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
index 36c56f8..ae60c40 100644
--- 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
@@ -22,7 +22,7 @@ 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.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.base.connection.AbstractPlcConnection;
 import org.apache.plc4x.java.base.connection.TestChannelFactory;
 
@@ -51,7 +51,7 @@ public class MockConnection extends AbstractPlcConnection {
     }
 
     @Override
-    public Address parseAddress(String addressString) {
+    public PlcField prepareField(String fieldString) {
         return null;
     }
 
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnection.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnection.java
index b346a4c..41a8ef9 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnection.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnection.java
@@ -28,17 +28,17 @@ import org.apache.plc4x.java.ads.api.commands.types.*;
 import org.apache.plc4x.java.ads.api.generic.types.AmsNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AmsPort;
 import org.apache.plc4x.java.ads.api.generic.types.Invoke;
-import org.apache.plc4x.java.ads.model.AdsAddress;
-import org.apache.plc4x.java.ads.model.SymbolicAdsAddress;
+import org.apache.plc4x.java.ads.model.AdsField;
+import org.apache.plc4x.java.ads.model.SymbolicAdsField;
 import org.apache.plc4x.java.api.connection.PlcProprietarySender;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
 import org.apache.plc4x.java.api.messages.*;
 import org.apache.plc4x.java.api.messages.items.RequestItem;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.base.connection.AbstractPlcConnection;
 import org.apache.plc4x.java.base.connection.ChannelFactory;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
@@ -62,7 +62,7 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
 
     protected final AmsPort sourceAmsPort;
 
-    protected final ConcurrentMap<SymbolicAdsAddress, AdsAddress> addressMapping;
+    protected final ConcurrentMap<SymbolicAdsField, AdsField> fieldMapping;
 
     protected AdsAbstractPlcConnection(ChannelFactory channelFactory, AmsNetId targetAmsNetId, AmsPort targetAmsPort) {
         this(channelFactory, targetAmsNetId, targetAmsPort, generateAMSNetId(), generateAMSPort());
@@ -74,7 +74,7 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
         this.targetAmsPort = targetAmsPort;
         this.sourceAmsNetId = sourceAmsNetId;
         this.sourceAmsPort = sourceAmsPort;
-        this.addressMapping = new ConcurrentHashMap<>();
+        this.fieldMapping = new ConcurrentHashMap<>();
     }
 
     public AmsNetId getTargetAmsNetId() {
@@ -95,18 +95,18 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
 
 
     @Override
-    public Address parseAddress(String addressString) throws PlcInvalidAddressException {
-        if (AdsAddress.matches(addressString)) {
-            return AdsAddress.of(addressString);
-        } else if (SymbolicAdsAddress.matches(addressString)) {
-            return SymbolicAdsAddress.of(addressString);
+    public PlcField prepareField(String fieldString) throws PlcInvalidFieldException {
+        if (AdsField.matches(fieldString)) {
+            return AdsField.of(fieldString);
+        } else if (SymbolicAdsField.matches(fieldString)) {
+            return SymbolicAdsField.of(fieldString);
         }
-        throw new PlcInvalidAddressException(addressString);
+        throw new PlcInvalidFieldException(fieldString);
     }
 
     @Override
     public CompletableFuture<PlcReadResponse> read(PlcReadRequest readRequest) {
-        mapAddresses(readRequest);
+        mapFields(readRequest);
         CompletableFuture<PlcReadResponse> readFuture = new CompletableFuture<>();
         ChannelFuture channelFuture = channel.writeAndFlush(new PlcRequestContainer<>(readRequest, readFuture));
         channelFuture.addListener(future -> {
@@ -119,7 +119,7 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
 
     @Override
     public CompletableFuture<PlcWriteResponse> write(PlcWriteRequest writeRequest) {
-        mapAddresses(writeRequest);
+        mapFields(writeRequest);
         CompletableFuture<PlcWriteResponse> writeFuture = new CompletableFuture<>();
         ChannelFuture channelFuture = channel.writeAndFlush(new PlcRequestContainer<>(writeRequest, writeFuture));
         channelFuture.addListener(future -> {
@@ -132,7 +132,7 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
 
     @Override
     public <T, R> CompletableFuture<PlcProprietaryResponse<R>> send(PlcProprietaryRequest<T> proprietaryRequest) {
-        mapAddresses(proprietaryRequest);
+        mapFields(proprietaryRequest);
         CompletableFuture<PlcProprietaryResponse<R>> sendFuture = new CompletableFuture<>();
         ChannelFuture channelFuture = channel.writeAndFlush(new PlcRequestContainer<>(proprietaryRequest, sendFuture));
         channelFuture.addListener(future -> {
@@ -143,20 +143,20 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
         return sendFuture;
     }
 
-    protected void mapAddresses(PlcRequest<?> request) {
+    protected void mapFields(PlcRequest<?> request) {
         request.getRequestItems().stream()
             .parallel()
-            .map(RequestItem::getAddress)
-            .filter(SymbolicAdsAddress.class::isInstance)
-            .map(SymbolicAdsAddress.class::cast)
-            .forEach(this::mapAddress);
+            .map(RequestItem::getField)
+            .filter(SymbolicAdsField.class::isInstance)
+            .map(SymbolicAdsField.class::cast)
+            .forEach(this::mapFields);
     }
 
-    protected void mapAddress(SymbolicAdsAddress symbolicAdsAddress) {
-        // If the map doesn't contain an entry for the given symbolicAdsAddress,
+    protected void mapFields(SymbolicAdsField symbolicAdsField) {
+        // If the map doesn't contain an entry for the given symbolicAdsField,
         // resolve it and add it to the map.
-        addressMapping.computeIfAbsent(symbolicAdsAddress, symbolicAdsAddressInternal -> {
-            LOGGER.debug("Resolving {}", symbolicAdsAddressInternal);
+        fieldMapping.computeIfAbsent(symbolicAdsField, symbolicAdsFieldInternal -> {
+            LOGGER.debug("Resolving {}", symbolicAdsFieldInternal);
             AdsReadWriteRequest adsReadWriteRequest = AdsReadWriteRequest.of(
                 targetAmsNetId,
                 targetAmsPort,
@@ -166,7 +166,7 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
                 IndexGroup.ReservedGroups.ADSIGRP_SYM_HNDBYNAME,
                 IndexOffset.NONE,
                 ReadLength.of(IndexOffset.NUM_BYTES),
-                Data.of(symbolicAdsAddressInternal.getSymbolicAddress())
+                Data.of(symbolicAdsFieldInternal.getSymbolicField())
             );
 
             // TODO: This is blocking, should be changed to be async.
@@ -180,7 +180,7 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
             }
 
             IndexOffset symbolHandle = IndexOffset.of(response.getData().getBytes());
-            return AdsAddress.of(IndexGroup.ReservedGroups.ADSIGRP_SYM_VALBYHND.getAsLong(), symbolHandle.getAsLong());
+            return AdsField.of(IndexGroup.ReservedGroups.ADSIGRP_SYM_VALBYHND.getAsLong(), symbolHandle.getAsLong());
         });
     }
 
@@ -194,9 +194,9 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
 
     @Override
     public void close() throws PlcConnectionException {
-        addressMapping.values().stream()
+        fieldMapping.values().stream()
             .parallel()
-            .map(adsAddress -> AdsWriteRequest.of(
+            .map(adsField -> AdsWriteRequest.of(
                 targetAmsNetId,
                 targetAmsPort,
                 sourceAmsNetId,
@@ -204,7 +204,7 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
                 Invoke.NONE,
                 IndexGroup.ReservedGroups.ADSIGRP_SYM_RELEASEHND,
                 IndexOffset.NONE,
-                Data.of(IndexGroup.of(adsAddress.getIndexGroup()).getBytes())
+                Data.of(IndexGroup.of(adsField.getIndexGroup()).getBytes())
             ))
             .map(adsWriteRequest -> new PlcRequestContainer<>(new PlcProprietaryRequest<>(adsWriteRequest), new CompletableFuture<>()))
             // We don't need a response so we just supply a throw away future.
@@ -214,10 +214,10 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
     }
 
     /**
-     * Clears the addressMapping.
+     * Clears the fieldMapping.
      */
     public void clearMapping() {
-        addressMapping.clear();
+        fieldMapping.clear();
     }
 
     protected <T> T getFromFuture(CompletableFuture<T> future, long timeout) {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java
index 82ca6a2..03a0588 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java
@@ -60,7 +60,7 @@ public class AdsSerialPlcConnection extends AdsAbstractPlcConnection {
                 pipeline.addLast(new Payload2SerialProtocol());
                 pipeline.addLast(new SingleMessageRateLimiter());
                 pipeline.addLast(new Ads2PayloadProtocol());
-                pipeline.addLast(new Plc4x2AdsProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, addressMapping));
+                pipeline.addLast(new Plc4x2AdsProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, fieldMapping));
             }
         };
     }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
index d7ecbd7..8de3cb4 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
@@ -27,9 +27,9 @@ import org.apache.plc4x.java.ads.api.commands.types.*;
 import org.apache.plc4x.java.ads.api.generic.types.AmsNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AmsPort;
 import org.apache.plc4x.java.ads.api.generic.types.Invoke;
-import org.apache.plc4x.java.ads.model.AdsAddress;
+import org.apache.plc4x.java.ads.model.AdsField;
 import org.apache.plc4x.java.ads.model.AdsSubscriptionHandle;
-import org.apache.plc4x.java.ads.model.SymbolicAdsAddress;
+import org.apache.plc4x.java.ads.model.SymbolicAdsField;
 import org.apache.plc4x.java.ads.protocol.Ads2PayloadProtocol;
 import org.apache.plc4x.java.ads.protocol.Payload2TcpProtocol;
 import org.apache.plc4x.java.ads.protocol.Plc4x2AdsProtocol;
@@ -43,8 +43,8 @@ import org.apache.plc4x.java.api.messages.items.SubscriptionEventItem;
 import org.apache.plc4x.java.api.messages.items.SubscriptionRequestItem;
 import org.apache.plc4x.java.api.messages.items.SubscriptionResponseItem;
 import org.apache.plc4x.java.api.messages.items.UnsubscriptionRequestItem;
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.java.base.connection.TcpSocketChannelFactory;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
 import org.slf4j.Logger;
@@ -113,7 +113,7 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
                 ChannelPipeline pipeline = channel.pipeline();
                 pipeline.addLast(new Payload2TcpProtocol());
                 pipeline.addLast(new Ads2PayloadProtocol());
-                pipeline.addLast(new Plc4x2AdsProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, addressMapping));
+                pipeline.addLast(new Plc4x2AdsProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, fieldMapping));
             }
         };
     }
@@ -145,33 +145,33 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
         SubscriptionRequestItem<?> subscriptionRequestItem = subscriptionRequest.getRequestItem().orElseThrow(NullPointerException::new);
 
         Objects.requireNonNull(subscriptionRequestItem.getConsumer());
-        Objects.requireNonNull(subscriptionRequestItem.getAddress());
+        Objects.requireNonNull(subscriptionRequestItem.getField());
         Objects.requireNonNull(subscriptionRequestItem.getDatatype());
 
-        Address address = subscriptionRequestItem.getAddress();
+        PlcField field = subscriptionRequestItem.getField();
         Class<?> datatype = subscriptionRequestItem.getDatatype();
 
         IndexGroup indexGroup;
         IndexOffset indexOffset;
-        // If this is a symbolic address, it has to be resolved first.
+        // If this is a symbolic field, it has to be resolved first.
         // TODO: This is blocking, should be changed to be async.
-        if (address instanceof SymbolicAdsAddress) {
-            mapAddress((SymbolicAdsAddress) address);
-            AdsAddress adsAddress = addressMapping.get(address);
-            if (adsAddress == null) {
-                throw new PlcRuntimeException("Unresolvable address" + address);
+        if (field instanceof SymbolicAdsField) {
+            mapFields((SymbolicAdsField) field);
+            AdsField adsField = fieldMapping.get(field);
+            if (adsField == null) {
+                throw new PlcRuntimeException("Unresolvable field " + field);
             }
-            indexGroup = IndexGroup.of(adsAddress.getIndexGroup());
-            indexOffset = IndexOffset.of(adsAddress.getIndexOffset());
+            indexGroup = IndexGroup.of(adsField.getIndexGroup());
+            indexOffset = IndexOffset.of(adsField.getIndexOffset());
         }
-        // If it's no symbolic address, we can continue immediately
+        // If it's no symbolic field, we can continue immediately
         // without having to do any resolving.
-        else if (address instanceof AdsAddress) {
-            AdsAddress adsAddress = (AdsAddress) address;
-            indexGroup = IndexGroup.of(adsAddress.getIndexGroup());
-            indexOffset = IndexOffset.of(adsAddress.getIndexOffset());
+        else if (field instanceof AdsField) {
+            AdsField adsField = (AdsField) field;
+            indexGroup = IndexGroup.of(adsField.getIndexGroup());
+            indexOffset = IndexOffset.of(adsField.getIndexOffset());
         } else {
-            throw new IllegalArgumentException("Unsupported address type " + address.getClass());
+            throw new IllegalArgumentException("Unsupported field type " + field.getClass());
         }
 
         final TransmissionMode transmissionMode;
@@ -215,7 +215,7 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
         }
         AdsSubscriptionHandle adsSubscriptionHandle = new AdsSubscriptionHandle(response.getNotificationHandle());
         future.complete(new PlcSubscriptionResponse(subscriptionRequest, Collections.singletonList(
-            new SubscriptionResponseItem<>(subscriptionRequestItem, adsSubscriptionHandle, ResponseCode.OK))));
+            new SubscriptionResponseItem<>(subscriptionRequestItem, adsSubscriptionHandle, PlcResponseCode.OK))));
 
         Consumer<AdsDeviceNotificationRequest> adsDeviceNotificationRequestConsumer =
             adsDeviceNotificationRequest -> adsDeviceNotificationRequest.getAdsStampHeaders().forEach(adsStampHeader -> {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsAddress.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsField.java
similarity index 81%
rename from plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsAddress.java
rename to plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsField.java
index 905c448..f0400b0 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsAddress.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsField.java
@@ -19,8 +19,8 @@
 package org.apache.plc4x.java.ads.model;
 
 import org.apache.plc4x.java.ads.api.util.ByteValue;
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.Objects;
 import java.util.regex.Matcher;
@@ -30,28 +30,29 @@ import java.util.regex.Pattern;
  * ADS address witch is defined by {@code indexGroup/indexOffset}. These values can be either supplied as int or hex
  * representation.
  */
-public class AdsAddress implements Address {
+public class AdsField implements PlcField {
+
     private static final Pattern RESOURCE_ADDRESS_PATTERN = Pattern.compile("^((0[xX](?<indexGroupHex>[0-9a-fA-F]+))|(?<indexGroup>\\d+))/((0[xX](?<indexOffsetHex>[0-9a-fA-F]+))|(?<indexOffset>\\d+))");
 
     private final long indexGroup;
 
     private final long indexOffset;
 
-    private AdsAddress(long indexGroup, long indexOffset) {
+    private AdsField(long indexGroup, long indexOffset) {
         ByteValue.checkUnsignedBounds(indexGroup, 4);
         this.indexGroup = indexGroup;
         ByteValue.checkUnsignedBounds(indexOffset, 4);
         this.indexOffset = indexOffset;
     }
 
-    public static AdsAddress of(long indexGroup, long indexOffset) {
-        return new AdsAddress(indexGroup, indexOffset);
+    public static AdsField of(long indexGroup, long indexOffset) {
+        return new AdsField(indexGroup, indexOffset);
     }
 
-    public static AdsAddress of(String address) throws PlcInvalidAddressException {
+    public static AdsField of(String address) throws PlcInvalidFieldException {
         Matcher matcher = RESOURCE_ADDRESS_PATTERN.matcher(address);
         if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(address, RESOURCE_ADDRESS_PATTERN, "{indexGroup}/{indexOffset}");
+            throw new PlcInvalidFieldException(address, RESOURCE_ADDRESS_PATTERN, "{indexGroup}/{indexOffset}");
         }
 
         String indexGroupStringHex = matcher.group("indexGroupHex");
@@ -74,7 +75,7 @@ public class AdsAddress implements Address {
             indexOffset = Long.parseLong(indexOffsetString);
         }
 
-        return new AdsAddress(indexGroup, indexOffset);
+        return new AdsField(indexGroup, indexOffset);
     }
 
     public static boolean matches(String address) {
@@ -94,10 +95,10 @@ public class AdsAddress implements Address {
         if (this == o) {
             return true;
         }
-        if (!(o instanceof AdsAddress)) {
+        if (!(o instanceof AdsField)) {
             return false;
         }
-        AdsAddress that = (AdsAddress) o;
+        AdsField that = (AdsField) o;
         return indexGroup == that.indexGroup &&
             indexOffset == that.indexOffset;
     }
@@ -109,7 +110,7 @@ public class AdsAddress implements Address {
 
     @Override
     public String toString() {
-        return "AdsAddress{" +
+        return "AdsField{" +
             "indexGroup=" + indexGroup +
             ", indexOffset=" + indexOffset +
             '}';
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsSubscriptionHandle.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsSubscriptionHandle.java
index 69742cb..2ceb03d 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsSubscriptionHandle.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsSubscriptionHandle.java
@@ -19,11 +19,11 @@ under the License.
 package org.apache.plc4x.java.ads.model;
 
 import org.apache.plc4x.java.ads.api.commands.types.NotificationHandle;
-import org.apache.plc4x.java.api.model.SubscriptionHandle;
+import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
 
 import java.util.Objects;
 
-public class AdsSubscriptionHandle implements SubscriptionHandle {
+public class AdsSubscriptionHandle implements PlcSubscriptionHandle {
 
     private NotificationHandle notificationHandle;
 
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsAddress.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsField.java
similarity index 75%
rename from plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsAddress.java
rename to plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsField.java
index e997690..2437b44 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsAddress.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsField.java
@@ -18,8 +18,8 @@
  */
 package org.apache.plc4x.java.ads.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.Objects;
 import java.util.regex.Matcher;
@@ -28,30 +28,31 @@ import java.util.regex.Pattern;
 /**
  * ADS address witch is defined by symbolic name (e.g. {@code Main.items[0]}).
  */
-public class SymbolicAdsAddress implements Address {
+public class SymbolicAdsField implements PlcField {
+
     private static final Pattern SYMBOLIC_ADDRESS_PATTERN = Pattern.compile("^(?<symbolicAddress>.+)");
 
     private final String symbolicAddress;
 
-    private SymbolicAdsAddress(String symbolicAddress) {
+    private SymbolicAdsField(String symbolicAddress) {
         this.symbolicAddress = Objects.requireNonNull(symbolicAddress);
     }
 
-    public static SymbolicAdsAddress of(String address) throws PlcInvalidAddressException {
+    public static SymbolicAdsField of(String address) throws PlcInvalidFieldException {
         Matcher matcher = SYMBOLIC_ADDRESS_PATTERN.matcher(address);
         if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(address, SYMBOLIC_ADDRESS_PATTERN, "{address}");
+            throw new PlcInvalidFieldException(address, SYMBOLIC_ADDRESS_PATTERN, "{address}");
         }
         String symbolicAddress = matcher.group("symbolicAddress");
 
-        return new SymbolicAdsAddress(symbolicAddress);
+        return new SymbolicAdsField(symbolicAddress);
     }
 
     public static boolean matches(String address) {
         return SYMBOLIC_ADDRESS_PATTERN.matcher(address).matches();
     }
 
-    public String getSymbolicAddress() {
+    public String getSymbolicField() {
         return symbolicAddress;
     }
 
@@ -60,10 +61,10 @@ public class SymbolicAdsAddress implements Address {
         if (this == o) {
             return true;
         }
-        if (!(o instanceof SymbolicAdsAddress)) {
+        if (!(o instanceof SymbolicAdsField)) {
             return false;
         }
-        SymbolicAdsAddress that = (SymbolicAdsAddress) o;
+        SymbolicAdsField that = (SymbolicAdsField) o;
         return Objects.equals(symbolicAddress, that.symbolicAddress);
     }
 
@@ -74,7 +75,7 @@ public class SymbolicAdsAddress implements Address {
 
     @Override
     public String toString() {
-        return "SymbolicAdsAddress{" +
+        return "SymbolicAdsField{" +
             "symbolicAddress='" + symbolicAddress + '\'' +
             '}';
     }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocol.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocol.java
index 78634f8..c3b600b 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocol.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocol.java
@@ -26,24 +26,24 @@ import org.apache.plc4x.java.ads.api.generic.AmsPacket;
 import org.apache.plc4x.java.ads.api.generic.types.AmsNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AmsPort;
 import org.apache.plc4x.java.ads.api.generic.types.Invoke;
-import org.apache.plc4x.java.ads.model.AdsAddress;
-import org.apache.plc4x.java.ads.model.SymbolicAdsAddress;
+import org.apache.plc4x.java.ads.model.AdsField;
+import org.apache.plc4x.java.ads.model.SymbolicAdsField;
 import org.apache.plc4x.java.ads.protocol.exception.AdsException;
 import org.apache.plc4x.java.ads.protocol.util.LittleEndianDecoder;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.api.exceptions.PlcIoException;
 import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
 import org.apache.plc4x.java.api.messages.*;
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -68,7 +68,7 @@ public class Plc4x2AdsProtocol extends MessageToMessageCodec<AmsPacket, PlcReque
 
     private final ConcurrentMap<Long, PlcRequestContainer<PlcRequest, PlcResponse>> requests;
 
-    private final ConcurrentMap<SymbolicAdsAddress, AdsAddress> addressMapping;
+    private final ConcurrentMap<SymbolicAdsField, AdsField> fieldMapping;
 
     private List<Consumer<AdsDeviceNotificationRequest>> deviceNotificationListeners;
 
@@ -77,13 +77,13 @@ public class Plc4x2AdsProtocol extends MessageToMessageCodec<AmsPacket, PlcReque
     private final AmsNetId sourceAmsNetId;
     private final AmsPort sourceAmsPort;
 
-    public Plc4x2AdsProtocol(AmsNetId targetAmsNetId, AmsPort targetAmsPort, AmsNetId sourceAmsNetId, AmsPort sourceAmsPort, ConcurrentMap<SymbolicAdsAddress, AdsAddress> addressMapping) {
+    public Plc4x2AdsProtocol(AmsNetId targetAmsNetId, AmsPort targetAmsPort, AmsNetId sourceAmsNetId, AmsPort sourceAmsPort, ConcurrentMap<SymbolicAdsField, AdsField> fieldMapping) {
         this.targetAmsNetId = targetAmsNetId;
         this.targetAmsPort = targetAmsPort;
         this.sourceAmsNetId = sourceAmsNetId;
         this.sourceAmsPort = sourceAmsPort;
         this.requests = new ConcurrentHashMap<>();
-        this.addressMapping = addressMapping;
+        this.fieldMapping = fieldMapping;
         this.deviceNotificationListeners = new LinkedList<>();
     }
 
@@ -139,20 +139,20 @@ public class Plc4x2AdsProtocol extends MessageToMessageCodec<AmsPacket, PlcReque
         if (writeRequest.getRequestItems().size() != 1) {
             throw new PlcProtocolException("Only one item supported");
         }
-        WriteRequestItem<?> writeRequestItem = writeRequest.getRequestItems().get(0);
-        Address address = writeRequestItem.getAddress();
-        if (address instanceof SymbolicAdsAddress) {
-            AdsAddress mappedAddress = addressMapping.get(address);
-            LOGGER.debug("Replacing {} with {}", address, mappedAddress);
-            address = mappedAddress;
+        PlcWriteRequestItem<?> writeRequestItem = writeRequest.getRequestItems().get(0);
+        PlcField field = writeRequestItem.getField();
+        if (field instanceof SymbolicAdsField) {
+            AdsField mappedField = fieldMapping.get(field);
+            LOGGER.debug("Replacing {} with {}", field, mappedField);
+            field = mappedField;
         }
-        if (!(address instanceof AdsAddress)) {
-            throw new PlcProtocolException("Address not of type AdsAddress: " + address.getClass());
+        if (!(field instanceof AdsField)) {
+            throw new PlcProtocolException("PlcField not of type AdsField: " + field.getClass());
         }
-        AdsAddress adsAddress = (AdsAddress) address;
+        AdsField adsField = (AdsField) field;
         Invoke invokeId = Invoke.of(correlationBuilder.incrementAndGet());
-        IndexGroup indexGroup = IndexGroup.of(adsAddress.getIndexGroup());
-        IndexOffset indexOffset = IndexOffset.of(adsAddress.getIndexOffset());
+        IndexGroup indexGroup = IndexGroup.of(adsField.getIndexGroup());
+        IndexOffset indexOffset = IndexOffset.of(adsField.getIndexOffset());
         byte[] bytes = encodeData(writeRequestItem.getDatatype(), writeRequestItem.getValues().toArray());
         Data data = Data.of(bytes);
         AmsPacket amsPacket = AdsWriteRequest.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, data);
@@ -167,23 +167,23 @@ public class Plc4x2AdsProtocol extends MessageToMessageCodec<AmsPacket, PlcReque
         if (readRequest.getRequestItems().size() != 1) {
             throw new PlcProtocolException("Only one item supported");
         }
-        ReadRequestItem<?> readRequestItem = readRequest.getRequestItems().get(0);
-        Address address = readRequestItem.getAddress();
-        if (address instanceof SymbolicAdsAddress) {
-            AdsAddress mappedAddress = addressMapping.get(address);
-            if (mappedAddress == null) {
-                throw new PlcProtocolException("No address mapping for " + address);
+        PlcReadRequestItem<?> readRequestItem = readRequest.getRequestItems().get(0);
+        PlcField field = readRequestItem.getField();
+        if (field instanceof SymbolicAdsField) {
+            AdsField mappedField = fieldMapping.get(field);
+            if (mappedField == null) {
+                throw new PlcProtocolException("No field mapping for " + field);
             }
-            LOGGER.debug("Replacing {} with {}", address, mappedAddress);
-            address = mappedAddress;
+            LOGGER.debug("Replacing {} with {}", field, mappedField);
+            field = mappedField;
         }
-        if (!(address instanceof AdsAddress)) {
-            throw new PlcProtocolException("Address not of type AdsAddress: " + address.getClass());
+        if (!(field instanceof AdsField)) {
+            throw new PlcProtocolException("PlcField not of type AdsField: " + field.getClass());
         }
-        AdsAddress adsAddress = (AdsAddress) address;
+        AdsField adsField = (AdsField) field;
         Invoke invokeId = Invoke.of(correlationBuilder.incrementAndGet());
-        IndexGroup indexGroup = IndexGroup.of(adsAddress.getIndexGroup());
-        IndexOffset indexOffset = IndexOffset.of(adsAddress.getIndexOffset());
+        IndexGroup indexGroup = IndexGroup.of(adsField.getIndexGroup());
+        IndexOffset indexOffset = IndexOffset.of(adsField.getIndexOffset());
         // TODO: length determination doesn't work here really as this is only known within the plc or by the developer
         Length length = Length.of(calculateLength(readRequestItem.getDatatype(), readRequestItem.getSize()));
         AmsPacket amsPacket = AdsReadRequest.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, length);
@@ -269,30 +269,30 @@ public class Plc4x2AdsProtocol extends MessageToMessageCodec<AmsPacket, PlcReque
     @SuppressWarnings("unchecked")
     private PlcResponse decodeWriteResponse(AdsWriteResponse responseMessage, PlcRequestContainer<PlcRequest, PlcResponse> requestContainer) {
         PlcWriteRequest plcWriteRequest = (PlcWriteRequest) requestContainer.getRequest();
-        WriteRequestItem requestItem = plcWriteRequest.getRequestItems().get(0);
+        PlcWriteRequestItem requestItem = plcWriteRequest.getRequestItems().get(0);
 
-        ResponseCode responseCode = decodeResponseCode(responseMessage.getResult());
+        PlcResponseCode responseCode = decodeResponseCode(responseMessage.getResult());
 
         if (plcWriteRequest instanceof TypeSafePlcWriteRequest) {
-            return new TypeSafePlcWriteResponse((TypeSafePlcWriteRequest) plcWriteRequest, Collections.singletonList(new WriteResponseItem<>(requestItem, responseCode)));
+            return new TypeSafePlcWriteResponse((TypeSafePlcWriteRequest) plcWriteRequest, Collections.singletonList(new PlcWriteResponseItem<>(requestItem, responseCode)));
         } else {
-            return new PlcWriteResponse(plcWriteRequest, Collections.singletonList(new WriteResponseItem<>(requestItem, responseCode)));
+            return new PlcWriteResponse(plcWriteRequest, Collections.singletonList(new PlcWriteResponseItem<>(requestItem, responseCode)));
         }
     }
 
     @SuppressWarnings("unchecked")
     private PlcResponse decodeReadResponse(AdsReadResponse responseMessage, PlcRequestContainer<PlcRequest, PlcResponse> requestContainer) throws PlcProtocolException {
         PlcReadRequest plcReadRequest = (PlcReadRequest) requestContainer.getRequest();
-        ReadRequestItem requestItem = plcReadRequest.getRequestItems().get(0);
+        PlcReadRequestItem requestItem = plcReadRequest.getRequestItems().get(0);
 
-        ResponseCode responseCode = decodeResponseCode(responseMessage.getResult());
+        PlcResponseCode responseCode = decodeResponseCode(responseMessage.getResult());
         byte[] bytes = responseMessage.getData().getBytes();
         List decoded = decodeData(requestItem.getDatatype(), bytes);
 
         if (plcReadRequest instanceof TypeSafePlcReadRequest) {
-            return new TypeSafePlcReadResponse((TypeSafePlcReadRequest) plcReadRequest, Collections.singletonList(new ReadResponseItem<>(requestItem, responseCode, decoded)));
+            return new TypeSafePlcReadResponse((TypeSafePlcReadRequest) plcReadRequest, Collections.singletonList(new PlcReadResponseItem<>(requestItem, responseCode, decoded)));
         } else {
-            return new PlcReadResponse(plcReadRequest, Collections.singletonList(new ReadResponseItem<>(requestItem, responseCode, decoded)));
+            return new PlcReadResponse(plcReadRequest, Collections.singletonList(new PlcReadResponseItem<>(requestItem, responseCode, decoded)));
         }
     }
 
@@ -300,20 +300,20 @@ public class Plc4x2AdsProtocol extends MessageToMessageCodec<AmsPacket, PlcReque
         return new PlcProprietaryResponse<>((PlcProprietaryRequest) plcRequestContainer.getRequest(), amsPacket);
     }
 
-    private ResponseCode decodeResponseCode(Result result) {
+    private PlcResponseCode decodeResponseCode(Result result) {
         switch (result.toAdsReturnCode()) {
             case ADS_CODE_0:
-                return ResponseCode.OK;
+                return PlcResponseCode.OK;
             case ADS_CODE_1:
-                return ResponseCode.INTERNAL_ERROR;
+                return PlcResponseCode.INTERNAL_ERROR;
             case ADS_CODE_2:
             case ADS_CODE_3:
             case ADS_CODE_4:
             case ADS_CODE_5:
-                return ResponseCode.INTERNAL_ERROR;
+                return PlcResponseCode.INTERNAL_ERROR;
             case ADS_CODE_6:
             case ADS_CODE_7:
-                return ResponseCode.INVALID_ADDRESS;
+                return PlcResponseCode.INVALID_ADDRESS;
             case ADS_CODE_8:
             case ADS_CODE_9:
             case ADS_CODE_10:
@@ -426,9 +426,9 @@ public class Plc4x2AdsProtocol extends MessageToMessageCodec<AmsPacket, PlcReque
             case ADS_CODE_10060:
             case ADS_CODE_10061:
             case ADS_CODE_10065:
-                return ResponseCode.INTERNAL_ERROR;
+                return PlcResponseCode.INTERNAL_ERROR;
             case UNKNOWN:
-                return ResponseCode.INTERNAL_ERROR;
+                return PlcResponseCode.INTERNAL_ERROR;
         }
         throw new IllegalStateException(result.toAdsReturnCode() + " not mapped");
     }
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java
index a0e28c8..af65112 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java
@@ -25,11 +25,11 @@ import org.apache.plc4x.java.api.connection.PlcSubscriber;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
 import org.apache.plc4x.java.api.messages.PlcUnsubscriptionRequest;
 import org.apache.plc4x.java.api.messages.PlcUnsubscriptionResponse;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
 import org.apache.plc4x.java.api.messages.items.SubscriptionResponseItem;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
@@ -50,19 +50,19 @@ public class ManualPlc4XAdsTest {
 
             PlcReader reader = plcConnection.getReader().orElseThrow(() -> new RuntimeException("No Reader found"));
 
-            Address address = plcConnection.parseAddress("Allgemein_S2.Station");
+            PlcField field = plcConnection.prepareField("Allgemein_S2.Station");
             CompletableFuture<TypeSafePlcReadResponse<Integer>> response = reader
-                .read(new TypeSafePlcReadRequest<>(Integer.class, address));
+                .read(new TypeSafePlcReadRequest<>(Integer.class, field));
             TypeSafePlcReadResponse<Integer> readResponse = response.get();
             System.out.println("Response " + readResponse);
-            ReadResponseItem<Integer> responseItem = readResponse.getResponseItem().orElseThrow(() -> new RuntimeException("No Item found"));
+            PlcReadResponseItem<Integer> responseItem = readResponse.getResponseItem().orElseThrow(() -> new RuntimeException("No Item found"));
             System.out.println("ResponseItem " + responseItem);
             responseItem.getValues().stream().map(integer -> "Value: " + integer).forEach(System.out::println);
 
             PlcSubscriber plcSubscriber = plcConnection.getSubscriber().orElseThrow(() -> new RuntimeException("Subscribe not available"));
 
             PlcSubscriptionRequest subscriptionRequest = PlcSubscriptionRequest.builder()
-                .addChangeOfStateItem(Integer.class, address, plcNotification -> System.out.println("Received notification " + plcNotification))
+                .addChangeOfStateItem(Integer.class, field, plcNotification -> System.out.println("Received notification " + plcNotification))
                 .build();
 
             SubscriptionResponseItem subscriptionResponseItem = plcSubscriber.subscribe(subscriptionRequest)
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 dccbf4c..6c4b961 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
@@ -29,15 +29,15 @@ import org.apache.plc4x.java.ads.api.commands.types.Data;
 import org.apache.plc4x.java.ads.api.commands.types.Result;
 import org.apache.plc4x.java.ads.api.generic.types.AmsNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AmsPort;
-import org.apache.plc4x.java.ads.model.AdsAddress;
-import org.apache.plc4x.java.ads.model.SymbolicAdsAddress;
+import org.apache.plc4x.java.ads.model.AdsField;
+import org.apache.plc4x.java.ads.model.SymbolicAdsField;
 import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
 import org.apache.plc4x.java.api.messages.*;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.base.connection.ChannelFactory;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
 import org.junit.Before;
@@ -123,11 +123,11 @@ public class AdsAbstractPlcConnectionTest {
     }
 
     @Test
-    public void parseAddress() throws Exception {
-        Address address = SUT.parseAddress("0/0");
-        assertNotNull(address);
-        Address SymbolicAddress = SUT.parseAddress("Main.byByte[0]");
-        assertNotNull(SymbolicAddress);
+    public void prepareField() throws Exception {
+        PlcField field = SUT.prepareField("0/0");
+        assertNotNull(field);
+        PlcField symbolicField = SUT.prepareField("Main.byByte[0]");
+        assertNotNull(symbolicField);
     }
 
     @Test
@@ -187,12 +187,12 @@ public class AdsAbstractPlcConnectionTest {
     }
 
     @Test
-    public void mapAddresses() {
-        SUT.mapAddresses(mock(PlcRequest.class));
+    public void mapFields() {
+        SUT.mapFields(mock(PlcRequest.class));
     }
 
     @Test
-    public void mapAddress() throws Exception {
+    public void mapField() throws Exception {
         // positive
         {
             when(channel.writeAndFlush(any(PlcRequestContainer.class))).then(invocation -> {
@@ -206,8 +206,8 @@ public class AdsAbstractPlcConnectionTest {
                 return mock(ChannelFuture.class);
             });
 
-            SUT.mapAddress(SymbolicAdsAddress.of("Main.byByte[0]"));
-            SUT.mapAddress(SymbolicAdsAddress.of("Main.byByte[0]"));
+            SUT.mapFields(SymbolicAdsField.of("Main.byByte[0]"));
+            SUT.mapFields(SymbolicAdsField.of("Main.byByte[0]"));
             verify(channel, times(1)).writeAndFlush(any(PlcRequestContainer.class));
             SUT.clearMapping();
             reset(channel);
@@ -224,7 +224,7 @@ public class AdsAbstractPlcConnectionTest {
                 return mock(ChannelFuture.class);
             });
 
-            assertThrows(PlcRuntimeException.class, () -> SUT.mapAddress(SymbolicAdsAddress.of("Main.byByte[0]")));
+            assertThrows(PlcRuntimeException.class, () -> SUT.mapFields(SymbolicAdsField.of("Main.byByte[0]")));
             verify(channel, times(1)).writeAndFlush(any(PlcRequestContainer.class));
             SUT.clearMapping();
             reset(channel);
@@ -245,8 +245,8 @@ public class AdsAbstractPlcConnectionTest {
 
     @Test
     public void close() throws Exception {
-        Map addressMapping = (Map) FieldUtils.getDeclaredField(AdsAbstractPlcConnection.class, "addressMapping", true).get(SUT);
-        addressMapping.put(mock(SymbolicAdsAddress.class), mock(AdsAddress.class));
+        Map fieldMapping = (Map) FieldUtils.getDeclaredField(AdsAbstractPlcConnection.class, "fieldMapping", true).get(SUT);
+        fieldMapping.put(mock(SymbolicAdsField.class), mock(AdsField.class));
         SUT.close();
     }
 
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
index 6555d5a..34558c4 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
@@ -28,9 +28,9 @@ import org.apache.plc4x.java.ads.api.generic.types.AmsPort;
 import org.apache.plc4x.java.ads.api.serial.AmsSerialAcknowledgeFrame;
 import org.apache.plc4x.java.ads.api.serial.AmsSerialFrame;
 import org.apache.plc4x.java.ads.api.serial.types.*;
-import org.apache.plc4x.java.ads.model.AdsAddress;
-import org.apache.plc4x.java.ads.model.SymbolicAdsAddress;
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.ads.model.AdsField;
+import org.apache.plc4x.java.ads.model.SymbolicAdsField;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.base.connection.AbstractPlcConnection;
@@ -76,39 +76,39 @@ public class AdsSerialPlcConnectionTest {
     }
 
     @Test
-    public void emptyParseAddress() {
+    public void emptyPrepareField() {
         try {
-            SUT.parseAddress("");
-        } catch (PlcInvalidAddressException exception) {
+            SUT.prepareField("");
+        } catch (PlcInvalidFieldException exception) {
             assertThat(exception.getMessage(), Matchers.startsWith(" invalid"));
         }
     }
 
     @Test
-    public void parseAddress() throws Exception {
+    public void prepareField() throws Exception {
         try {
-            AdsAddress address = (AdsAddress) SUT.parseAddress("0/1");
-            assertEquals(address.getIndexGroup(), 0);
-            assertEquals(address.getIndexOffset(), 1);
+            AdsField field = (AdsField) SUT.prepareField("0/1");
+            assertEquals(field.getIndexGroup(), 0);
+            assertEquals(field.getIndexOffset(), 1);
         } catch (IllegalArgumentException exception) {
-            fail("valid data block address");
+            fail("valid data block field");
         }
     }
 
     @Test
-    public void parseSymbolicAddress() throws Exception {
+    public void prepareSymbolicField() throws Exception {
         try {
-            SymbolicAdsAddress address = (SymbolicAdsAddress) SUT.parseAddress("Main.variable");
-            assertEquals(address.getSymbolicAddress(), "Main.variable");
+            SymbolicAdsField field = (SymbolicAdsField) SUT.prepareField("Main.variable");
+            assertEquals(field.getSymbolicField(), "Main.variable");
         } catch (IllegalArgumentException exception) {
-            fail("valid data block address");
+            fail("valid data block field");
         }
     }
 
     @Test
     public void testRead() throws Exception {
         prepareSerialSimulator();
-        CompletableFuture<PlcReadResponse> read = SUT.read(new PlcReadRequest(String.class, SUT.parseAddress("0/0")));
+        CompletableFuture<PlcReadResponse> read = SUT.read(new PlcReadRequest(String.class, SUT.prepareField("0/0")));
         PlcReadResponse plcReadResponse = read.get(30, TimeUnit.SECONDS);
         assertNotNull(plcReadResponse);
     }
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnectionTests.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnectionTests.java
index cebfc31..02bd164 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnectionTests.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnectionTests.java
@@ -26,10 +26,10 @@ import org.apache.plc4x.java.ads.api.commands.*;
 import org.apache.plc4x.java.ads.api.commands.types.*;
 import org.apache.plc4x.java.ads.api.generic.types.AmsNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AmsPort;
-import org.apache.plc4x.java.ads.model.AdsAddress;
-import org.apache.plc4x.java.ads.model.SymbolicAdsAddress;
+import org.apache.plc4x.java.ads.model.AdsField;
+import org.apache.plc4x.java.ads.model.SymbolicAdsField;
 import org.apache.plc4x.java.ads.protocol.Plc4x2AdsProtocol;
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.messages.PlcProprietaryRequest;
 import org.apache.plc4x.java.api.messages.PlcProprietaryResponse;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
@@ -92,32 +92,32 @@ public class AdsTcpPlcConnectionTests {
     }
 
     @Test
-    public void emptyParseAddress() {
+    public void prepareEmptyField() {
         try {
-            SUT.parseAddress("");
-        } catch (PlcInvalidAddressException exception) {
+            SUT.prepareField("");
+        } catch (PlcInvalidFieldException exception) {
             assertThat(exception.getMessage(), Matchers.startsWith(" invalid"));
         }
     }
 
     @Test
-    public void parseAddress() throws Exception {
+    public void prepareField() throws Exception {
         try {
-            AdsAddress address = (AdsAddress) SUT.parseAddress("1/1");
-            assertEquals(address.getIndexGroup(), 1);
-            assertEquals(address.getIndexOffset(), 1);
+            AdsField field = (AdsField) SUT.prepareField("1/1");
+            assertEquals(field.getIndexGroup(), 1);
+            assertEquals(field.getIndexOffset(), 1);
         } catch (IllegalArgumentException exception) {
-            fail("valid data block address");
+            fail("valid data block field");
         }
     }
 
     @Test
-    public void parseSymbolicAddress() throws Exception {
+    public void prepareSymbolicField() throws Exception {
         try {
-            SymbolicAdsAddress address = (SymbolicAdsAddress) SUT.parseAddress("Main.variable");
-            assertEquals(address.getSymbolicAddress(), "Main.variable");
+            SymbolicAdsField field = (SymbolicAdsField) SUT.prepareField("Main.variable");
+            assertEquals(field.getSymbolicField(), "Main.variable");
         } catch (IllegalArgumentException exception) {
-            fail("valid data block address");
+            fail("valid data block field");
         }
     }
 
@@ -173,9 +173,9 @@ public class AdsTcpPlcConnectionTests {
         };
         PlcSubscriptionRequest subscriptionRequest = new PlcSubscriptionRequest();
         subscriptionRequest.addItem(new SubscriptionRequestChangeOfStateItem(
-            String.class, SUT.parseAddress("0/0"), plcNotificationConsumer));
+            String.class, SUT.prepareField("0/0"), plcNotificationConsumer));
         /*subscriptionRequest.addItem(new SubscriptionRequestItem<>(
-            String.class, SUT.parseAddress("Main.by[0]"), plcNotificationConsumer));*/
+            String.class, SUT.prepareField("Main.by[0]"), plcNotificationConsumer));*/
         CompletableFuture<? extends PlcSubscriptionResponse> subscriptionFuture = SUT.subscribe(subscriptionRequest);
         PlcSubscriptionResponse subscriptionResponse = subscriptionFuture.get(5, TimeUnit.SECONDS);
         //notificationReceived.get(3, TimeUnit.SECONDS);
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/model/AdsAddressTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/model/AdsFieldTest.java
similarity index 53%
rename from plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/model/AdsAddressTest.java
rename to plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/model/AdsFieldTest.java
index e92331c..0f1fc86 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/model/AdsAddressTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/model/AdsFieldTest.java
@@ -18,47 +18,48 @@
  */
 package org.apache.plc4x.java.ads.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
-public class AdsAddressTest {
+public class AdsFieldTest {
 
     @Test
     public void of() throws Exception {
-        AdsAddress address = AdsAddress.of("1/10");
-        assertThat(address.getIndexGroup(), is(1L));
-        assertThat(address.getIndexOffset(), is(10L));
+        AdsField field = AdsField.of("1/10");
+        assertThat(field.getIndexGroup(), is(1L));
+        assertThat(field.getIndexOffset(), is(10L));
     }
 
     @Test
     public void ofHex() throws Exception {
-        AdsAddress address = AdsAddress.of("0x1/0xff");
-        assertThat(address.getIndexGroup(), is(1L));
-        assertThat(address.getIndexOffset(), is(255L));
+        AdsField field = AdsField.of("0x1/0xff");
+        assertThat(field.getIndexGroup(), is(1L));
+        assertThat(field.getIndexOffset(), is(255L));
     }
 
-    @Test(expected = PlcInvalidAddressException.class)
-    public void stringInAddress() throws Exception {
-        AdsAddress address = AdsAddress.of("group/offset");
+    @Test(expected = PlcInvalidFieldException.class)
+    public void stringInField() throws Exception {
+        AdsField field = AdsField.of("group/offset");
     }
 
-    @Test(expected = PlcInvalidAddressException.class)
-    public void singleNumberAddress() throws Exception {
-        AdsAddress address = AdsAddress.of("10");
+    @Test(expected = PlcInvalidFieldException.class)
+    public void singleNumberField() throws Exception {
+        AdsField field = AdsField.of("10");
     }
 
-    @Test(expected = PlcInvalidAddressException.class)
+    @Test(expected = PlcInvalidFieldException.class)
     public void wrongSeperator() throws Exception {
-        AdsAddress address = AdsAddress.of("1:10");
+        AdsField field = AdsField.of("1:10");
     }
 
     @Test
     public void getGroupAndOffset() {
-        AdsAddress address = AdsAddress.of(2L, 20L);
-        assertThat(address.getIndexGroup(), is(2L));
-        assertThat(address.getIndexOffset(), is(20L));
+        AdsField field = AdsField.of(2L, 20L);
+        assertThat(field.getIndexGroup(), is(2L));
+        assertThat(field.getIndexOffset(), is(20L));
     }
+
 }
\ No newline at end of file
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocolTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocolTest.java
index d63fe18..4280e81 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocolTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocolTest.java
@@ -30,12 +30,12 @@ import org.apache.plc4x.java.ads.api.generic.AmsPacket;
 import org.apache.plc4x.java.ads.api.generic.types.AmsNetId;
 import org.apache.plc4x.java.ads.api.generic.types.AmsPort;
 import org.apache.plc4x.java.ads.api.generic.types.Invoke;
-import org.apache.plc4x.java.ads.model.AdsAddress;
+import org.apache.plc4x.java.ads.model.AdsField;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcRequest;
 import org.apache.plc4x.java.api.messages.PlcResponse;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
 import org.apache.plc4x.java.api.messages.items.ResponseItem;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
 import org.junit.Before;
@@ -109,7 +109,7 @@ public class Plc4x2AdsProtocolTest {
                     new PlcRequestContainer<>(
                         PlcWriteRequest
                             .builder()
-                            .addItem(AdsAddress.of(1, 2), pair.getValue())
+                            .addItem(AdsField.of(1, 2), pair.getValue())
                             .build(), new CompletableFuture<>()),
                     AdsWriteResponse.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, Result.of(0))
                 ),
@@ -117,7 +117,7 @@ public class Plc4x2AdsProtocolTest {
                     new PlcRequestContainer<>(
                         PlcReadRequest
                             .builder()
-                            .addItem(pair.getDataTypeClass(), AdsAddress.of(1, 2))
+                            .addItem(pair.getDataTypeClass(), AdsField.of(1, 2))
                             .build(), new CompletableFuture<>()),
                     AdsReadResponse.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, Result.of(0), Data.of(pair.getByteRepresentation()))
                 )
@@ -183,7 +183,7 @@ public class Plc4x2AdsProtocolTest {
         ResponseItem responseItem = (ResponseItem) plcResponse.getResponseItem().get();
         LOGGER.info("ResponseItem {}", responseItem);
         if (amsPacket instanceof AdsReadResponse) {
-            ReadResponseItem readResponseItem = (ReadResponseItem) responseItem;
+            PlcReadResponseItem readResponseItem = (PlcReadResponseItem) responseItem;
             Object value = readResponseItem.getValues().get(0);
             defaultAssert(value);
         }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/PlcMessageToMessageCodec.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/PlcMessageToMessageCodec.java
index 4706085..ef7ff86 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/PlcMessageToMessageCodec.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/PlcMessageToMessageCodec.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.base;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.base;
 
 import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelHandlerContext;
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/AbstractPlcConnection.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/AbstractPlcConnection.java
index c679915..eee3f02 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/AbstractPlcConnection.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/AbstractPlcConnection.java
@@ -101,14 +101,6 @@ public abstract class AbstractPlcConnection implements PlcConnection {
     }
 
     @Override
-    public Optional<PlcLister> getLister() {
-        if (this instanceof PlcLister) {
-            return Optional.of((PlcLister) this);
-        }
-        return Optional.empty();
-    }
-
-    @Override
     public Optional<PlcReader> getReader() {
         if (this instanceof PlcReader) {
             return Optional.of((PlcReader) this);
@@ -131,4 +123,5 @@ public abstract class AbstractPlcConnection implements PlcConnection {
         }
         return Optional.empty();
     }
+
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/events/ConnectEvent.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/events/ConnectEvent.java
index e91a545..6df4aed 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/events/ConnectEvent.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/events/ConnectEvent.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.base.events;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.base.events;
 
 public class ConnectEvent {
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/events/ConnectedEvent.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/events/ConnectedEvent.java
index 2962254..db93765 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/events/ConnectedEvent.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/events/ConnectedEvent.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.base.events;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.base.events;
 
 public class ConnectedEvent {
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/RawMessage.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/PlcRawMessage.java
similarity index 77%
rename from plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/RawMessage.java
rename to plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/PlcRawMessage.java
index 16cb4c9..0e0ca3a 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/RawMessage.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/PlcRawMessage.java
@@ -19,18 +19,18 @@ under the License.
 package org.apache.plc4x.java.base.messages;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.api.messages.ProtocolMessage;
+import org.apache.plc4x.java.api.messages.PlcProtocolMessage;
 
-public class RawMessage implements ProtocolMessage {
+public class PlcRawMessage implements PlcProtocolMessage {
 
     private final ByteBuf userData;
-    private final ProtocolMessage parent;
+    private final PlcProtocolMessage parent;
 
-    public RawMessage(ByteBuf userData) {
+    public PlcRawMessage(ByteBuf userData) {
         this(userData, null);
     }
 
-    public RawMessage(ByteBuf userData, ProtocolMessage parent) {
+    public PlcRawMessage(ByteBuf userData, PlcProtocolMessage parent) {
         this.userData = userData;
         this.parent = parent;
     }
@@ -40,7 +40,7 @@ public class RawMessage implements ProtocolMessage {
     }
 
     @Override
-    public ProtocolMessage getParent() {
+    public PlcProtocolMessage getParent() {
         return parent;
     }
 
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/PlcRequestContainer.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/PlcRequestContainer.java
index 9b8bf0e..6f656fc 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/PlcRequestContainer.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/PlcRequestContainer.java
@@ -20,7 +20,7 @@ package org.apache.plc4x.java.base.messages;
 
 import org.apache.plc4x.java.api.messages.PlcRequest;
 import org.apache.plc4x.java.api.messages.PlcResponse;
-import org.apache.plc4x.java.api.messages.ProtocolMessage;
+import org.apache.plc4x.java.api.messages.PlcProtocolMessage;
 
 import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
@@ -31,7 +31,7 @@ import java.util.concurrent.CompletableFuture;
  * @param <T> type of request.
  * @param <R> type of response.
  */
-public class PlcRequestContainer<T extends PlcRequest, R extends PlcResponse> implements ProtocolMessage {
+public class PlcRequestContainer<T extends PlcRequest, R extends PlcResponse> implements PlcProtocolMessage {
 
     private final T request;
     private final CompletableFuture<R> responseFuture;
@@ -57,7 +57,7 @@ public class PlcRequestContainer<T extends PlcRequest, R extends PlcResponse> im
      * @return null
      */
     @Override
-    public ProtocolMessage getParent() {
+    public PlcProtocolMessage getParent() {
         return null;
     }
 
diff --git a/plc4j/protocols/driver-bases/base/src/test/java/org/apache/plc4x/java/base/messages/PlcRequestContainerTest.java b/plc4j/protocols/driver-bases/base/src/test/java/org/apache/plc4x/java/base/messages/PlcRequestContainerTest.java
index 8cf3161..409702e 100644
--- a/plc4j/protocols/driver-bases/base/src/test/java/org/apache/plc4x/java/base/messages/PlcRequestContainerTest.java
+++ b/plc4j/protocols/driver-bases/base/src/test/java/org/apache/plc4x/java/base/messages/PlcRequestContainerTest.java
@@ -20,7 +20,7 @@ package org.apache.plc4x.java.base.messages;
 
 import org.apache.plc4x.java.api.messages.PlcRequest;
 import org.apache.plc4x.java.api.messages.PlcResponse;
-import org.apache.plc4x.java.api.messages.ProtocolMessage;
+import org.apache.plc4x.java.api.messages.PlcProtocolMessage;
 import org.hamcrest.core.IsEqual;
 import org.junit.Before;
 import org.junit.Test;
@@ -63,7 +63,7 @@ public class PlcRequestContainerTest {
 
     @Test
     public void getParent() {
-        ProtocolMessage parent = SUT.getParent();
+        PlcProtocolMessage parent = SUT.getParent();
         assertNull(parent);
     }
 
diff --git a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/connection/MockConnection.java b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/connection/MockConnection.java
index a5eae3e..f8897f7 100644
--- a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/connection/MockConnection.java
+++ b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/base/connection/MockConnection.java
@@ -19,7 +19,7 @@ under the License.
 package org.apache.plc4x.java.base.connection;
 
 import io.netty.channel.ChannelHandler;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.concurrent.CompletableFuture;
 
@@ -39,7 +39,7 @@ public class MockConnection extends AbstractPlcConnection {
     }
 
     @Override
-    public Address parseAddress(String addressString) {
+    public PlcField prepareField(String fieldString) {
         return null;
     }
 
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/connection/BaseEtherNetIpPlcConnection.java b/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/connection/BaseEtherNetIpPlcConnection.java
index ac76c2b..880b50b 100644
--- a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/connection/BaseEtherNetIpPlcConnection.java
+++ b/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/connection/BaseEtherNetIpPlcConnection.java
@@ -21,13 +21,13 @@ package org.apache.plc4x.java.ethernetip.connection;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.connection.PlcWriter;
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.messages.*;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.base.connection.AbstractPlcConnection;
 import org.apache.plc4x.java.base.connection.ChannelFactory;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
-import org.apache.plc4x.java.ethernetip.model.EtherNetIpAddress;
+import org.apache.plc4x.java.ethernetip.model.EtherNetIpField;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -58,11 +58,11 @@ public abstract class BaseEtherNetIpPlcConnection extends AbstractPlcConnection
     }
 
     @Override
-    public Address parseAddress(String addressString) throws PlcInvalidAddressException {
-        if(EtherNetIpAddress.matches(addressString)) {
-            return EtherNetIpAddress.of(addressString);
+    public PlcField prepareField(String fieldString) throws PlcInvalidFieldException {
+        if(EtherNetIpField.matches(fieldString)) {
+            return EtherNetIpField.of(fieldString);
         }
-        throw new PlcInvalidAddressException(addressString);
+        throw new PlcInvalidFieldException(fieldString);
     }
 
     @Override
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/model/EtherNetIpAddress.java b/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/model/EtherNetIpField.java
similarity index 80%
rename from plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/model/EtherNetIpAddress.java
rename to plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/model/EtherNetIpField.java
index fbcdcdc..93bc7ce 100644
--- a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/model/EtherNetIpAddress.java
+++ b/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/model/EtherNetIpField.java
@@ -18,14 +18,14 @@ under the License.
 */
 package org.apache.plc4x.java.ethernetip.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class EtherNetIpAddress implements Address {
+public class EtherNetIpField implements PlcField {
 
     public static final Pattern ADDRESS_PATTERN = Pattern.compile("^#(?<class>.*?)#(?<instance>\\d{1,4})(?:#(?<attribute>\\d))?");
 
@@ -33,16 +33,16 @@ public class EtherNetIpAddress implements Address {
         return ADDRESS_PATTERN.matcher(addressString).matches();
     }
 
-    public static EtherNetIpAddress of(String addressString) throws PlcInvalidAddressException {
+    public static EtherNetIpField of(String addressString) throws PlcInvalidFieldException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(addressString, ADDRESS_PATTERN);
+            throw new PlcInvalidFieldException(addressString, ADDRESS_PATTERN);
         }
         int classNumber = Integer.parseInt(matcher.group("class"));
         int instanceNumber = Integer.parseInt(matcher.group("instance"));
         int attributeNumber = Integer.parseInt(matcher.group("attribute"));
 
-        return new EtherNetIpAddress(classNumber, instanceNumber, attributeNumber);
+        return new EtherNetIpField(classNumber, instanceNumber, attributeNumber);
     }
 
     private final int objectNumber;
@@ -51,7 +51,7 @@ public class EtherNetIpAddress implements Address {
 
     private int connectionId;
 
-    public EtherNetIpAddress(int objectNumber, int instanceNumber, int attributeNumber) {
+    public EtherNetIpField(int objectNumber, int instanceNumber, int attributeNumber) {
         this.objectNumber = objectNumber;
         this.instanceNumber = instanceNumber;
         this.attributeNumber = attributeNumber;
@@ -76,10 +76,10 @@ public class EtherNetIpAddress implements Address {
         if (this == o) {
             return true;
         }
-        if (!(o instanceof EtherNetIpAddress)) {
+        if (!(o instanceof EtherNetIpField)) {
             return false;
         }
-        EtherNetIpAddress that = (EtherNetIpAddress) o;
+        EtherNetIpField that = (EtherNetIpField) o;
         return objectNumber == that.objectNumber &&
             instanceNumber == that.instanceNumber &&
             attributeNumber == that.attributeNumber;
@@ -93,7 +93,7 @@ public class EtherNetIpAddress implements Address {
 
     @Override
     public String toString() {
-        return "EtherNetIpAddress{" +
+        return "EtherNetIpField{" +
             "object-number=" + objectNumber +
             ", instance-number=" + instanceNumber +
             ", attribute-number=" + attributeNumber +
diff --git a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java b/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java
index 85a0756..fb6347f 100644
--- a/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java
+++ b/plc4j/protocols/ethernetip/src/main/java/org/apache/plc4x/java/ethernetip/netty/Plc4XEtherNetIpProtocol.java
@@ -31,14 +31,14 @@ import io.netty.channel.ChannelHandlerContext;
 import io.netty.handler.codec.MessageToMessageCodec;
 import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
 import org.apache.plc4x.java.api.messages.*;
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.java.base.events.ConnectEvent;
 import org.apache.plc4x.java.base.events.ConnectedEvent;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
-import org.apache.plc4x.java.ethernetip.model.EtherNetIpAddress;
+import org.apache.plc4x.java.ethernetip.model.EtherNetIpField;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -70,7 +70,7 @@ public class Plc4XEtherNetIpProtocol extends MessageToMessageCodec<EnipPacket, P
     // these here.
     // REMARK: Eventually we should add a timeout to these so we unregister them after not being used
     // for quire some time. Hereby freeing resources on both client and server.
-    private Map<Address, Long> addressConnectionMap = new ConcurrentHashMap<>();
+    private Map<PlcField, Long> fieldConnectionMap = new ConcurrentHashMap<>();
 
     private final Map<Long, PlcRequestContainer<PlcRequest, PlcResponse>> requestsMap = new ConcurrentHashMap<>();
 
@@ -178,14 +178,14 @@ public class Plc4XEtherNetIpProtocol extends MessageToMessageCodec<EnipPacket, P
         PlcReadRequest request = (PlcReadRequest) msg.getRequest();
 
         // Here we assume it's only one request item.
-        ReadRequestItem<?> requestItem = request.getRequestItem()
+        PlcReadRequestItem<?> requestItem = request.getRequestItem()
             .orElseThrow(() -> new RuntimeException("Only single item requests allowed"));
 
         // CIP Part
-        EtherNetIpAddress enipAddress = (EtherNetIpAddress) requestItem.getAddress();
-        EPath.PaddedEPath path = new EPath.PaddedEPath(new LogicalSegment.ClassId(enipAddress.getObjectNumber()),
-            new LogicalSegment.InstanceId(enipAddress.getInstanceNumber()),
-            new LogicalSegment.AttributeId(enipAddress.getAttributeNumber()));
+        EtherNetIpField enipField = (EtherNetIpField) requestItem.getField();
+        EPath.PaddedEPath path = new EPath.PaddedEPath(new LogicalSegment.ClassId(enipField.getObjectNumber()),
+            new LogicalSegment.InstanceId(enipField.getInstanceNumber()),
+            new LogicalSegment.AttributeId(enipField.getAttributeNumber()));
         GetAttributeSingleService service = new GetAttributeSingleService(path);
 
         // ENIP Part
@@ -304,7 +304,7 @@ public class Plc4XEtherNetIpProtocol extends MessageToMessageCodec<EnipPacket, P
             supportsCipEncapsulation = false;
             supportsClass0Or1UdpConnections = false;
             nonCipInterfaces = null;
-            addressConnectionMap = null;
+            fieldConnectionMap = null;
         } else {
             ctx.channel().pipeline().fireExceptionCaught(new PlcProtocolException("Got a non-success response."));
         }
@@ -439,11 +439,11 @@ public class Plc4XEtherNetIpProtocol extends MessageToMessageCodec<EnipPacket, P
             ctx.fireExceptionCaught(new PlcProtocolException("Expecting a PlcReadRequest here."));
         }
         PlcReadRequest request = (PlcReadRequest) plcRequestContainer.getRequest();
-        ResponseCode responseCode;
+        PlcResponseCode responseCode;
         if(msg.getStatus() != EnipStatus.EIP_SUCCESS) {
-            responseCode = ResponseCode.NOT_FOUND;
+            responseCode = PlcResponseCode.NOT_FOUND;
         } else {
-            responseCode = ResponseCode.OK;
+            responseCode = PlcResponseCode.OK;
         }
 
         SendRRData sendRRDataCommand = (SendRRData) msg.getCommand();
@@ -462,7 +462,7 @@ public class Plc4XEtherNetIpProtocol extends MessageToMessageCodec<EnipPacket, P
         ByteBuf data = enipResponse.getData();
         if (data.readableBytes() > 0) {
             MessageRouterResponse cipResponse = MessageRouterResponse.decode(data);
-            ReadRequestItem requestItem = request.getRequestItem().orElse(null);
+            PlcReadRequestItem requestItem = request.getRequestItem().orElse(null);
             Short value;
             if(cipResponse.getData().readableBytes() >= 2) {
                 value = cipResponse.getData().readShort();
@@ -470,7 +470,7 @@ public class Plc4XEtherNetIpProtocol extends MessageToMessageCodec<EnipPacket, P
                 value = -1;
             }
             // TODO: This is not quite correct as we assume everything is an integer.
-            ReadResponseItem<Integer> responseItem = new ReadResponseItem<Integer>(requestItem, responseCode, value.intValue());
+            PlcReadResponseItem<Integer> responseItem = new PlcReadResponseItem<Integer>(requestItem, responseCode, value.intValue());
             PlcReadResponse response = new PlcReadResponse(request, responseItem);
 
             plcRequestContainer.getResponseFuture().complete(response);
diff --git a/plc4j/protocols/ethernetip/src/site/asciidoc/index.adoc b/plc4j/protocols/ethernetip/src/site/asciidoc/index.adoc
index 32dee12..a8155f4 100644
--- a/plc4j/protocols/ethernetip/src/site/asciidoc/index.adoc
+++ b/plc4j/protocols/ethernetip/src/site/asciidoc/index.adoc
@@ -66,7 +66,7 @@ When reading values in a request/response type of communication (explicit), ther
 We will concentrate on explicit connected access.
 
 In order to read/write values using connected access, first we have to get a connectionId for the resource we want to access.
-In subsequent read/write operations, we don't have to provide the address, but just provide the connection id and the server will already know what we want to access.
+In subsequent read/write operations, we don't have to provide the field, but just provide the connection id and the server will already know what we want to access.
 
 Getting the connection id, is performed by sending an unconnected request to the server referencing the `Forward Open Service`.
 This will register the connection in the Server and this will stay alive until the session is terminated.
diff --git a/plc4j/protocols/ethernetip/src/test/java/org/apache/plc4x/java/ethernetip/ManualPlc4XEtherNetIpTest.java b/plc4j/protocols/ethernetip/src/test/java/org/apache/plc4x/java/ethernetip/ManualPlc4XEtherNetIpTest.java
index ec8ed1f..6fe9c7f 100644
--- a/plc4j/protocols/ethernetip/src/test/java/org/apache/plc4x/java/ethernetip/ManualPlc4XEtherNetIpTest.java
+++ b/plc4j/protocols/ethernetip/src/test/java/org/apache/plc4x/java/ethernetip/ManualPlc4XEtherNetIpTest.java
@@ -23,9 +23,9 @@ import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.concurrent.CompletableFuture;
 
@@ -41,17 +41,17 @@ public class ManualPlc4XEtherNetIpTest {
             PlcReader reader = plcConnection.getReader().orElseThrow(() -> new RuntimeException("No Reader found"));
 
             // Parse the address.
-            Address address = plcConnection.parseAddress("#4#105#3");
+            PlcField field = plcConnection.prepareField("#4#105#3");
 
             // Create a new read request.
-            PlcReadRequest readRequest = new PlcReadRequest(new ReadRequestItem<>(Integer.class, address));
+            PlcReadRequest readRequest = new PlcReadRequest(new PlcReadRequestItem<>(Integer.class, field));
 
             // Execute the read operation.
             CompletableFuture<? extends PlcReadResponse> response = reader.read(readRequest);
             PlcReadResponse readResponse = response.get();
 
             // Output the response.
-            ReadResponseItem responseItem = readResponse.getResponseItem()
+            PlcReadResponseItem responseItem = readResponse.getResponseItem()
                 .orElseThrow(() -> new RuntimeException("No Item found"));
             System.out.println("ResponseItem " + responseItem);
             responseItem.getValues().stream().map(value -> "Value: " + value.toString()).forEach(System.out::println);
diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnection.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnection.java
index 1d59692..88a80d6 100644
--- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnection.java
+++ b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnection.java
@@ -22,12 +22,12 @@ import io.netty.channel.ChannelFuture;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.connection.PlcWriter;
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 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.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.base.connection.AbstractPlcConnection;
 import org.apache.plc4x.java.base.connection.ChannelFactory;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
@@ -62,21 +62,21 @@ public abstract class BaseModbusPlcConnection extends AbstractPlcConnection impl
     }
 
     @Override
-    public Address parseAddress(String addressString) throws PlcInvalidAddressException {
-        if (MaskWriteRegisterModbusAddress.ADDRESS_PATTERN.matcher(addressString).matches()) {
-            return MaskWriteRegisterModbusAddress.of(addressString);
-        } else if (ReadDiscreteInputsModbusAddress.ADDRESS_PATTERN.matcher(addressString).matches()) {
-            return ReadDiscreteInputsModbusAddress.of(addressString);
-        } else if (ReadHoldingRegistersModbusAddress.ADDRESS_PATTERN.matcher(addressString).matches()) {
-            return ReadHoldingRegistersModbusAddress.of(addressString);
-        } else if (ReadInputRegistersModbusAddress.ADDRESS_PATTERN.matcher(addressString).matches()) {
-            return ReadInputRegistersModbusAddress.of(addressString);
-        } else if (CoilModbusAddress.ADDRESS_PATTERN.matcher(addressString).matches()) {
-            return CoilModbusAddress.of(addressString);
-        } else if (RegisterModbusAddress.ADDRESS_PATTERN.matcher(addressString).matches()) {
-            return RegisterModbusAddress.of(addressString);
+    public PlcField prepareField(String fieldString) throws PlcInvalidFieldException {
+        if (MaskWriteRegisterModbusField.ADDRESS_PATTERN.matcher(fieldString).matches()) {
+            return MaskWriteRegisterModbusField.of(fieldString);
+        } else if (ReadDiscreteInputsModbusField.ADDRESS_PATTERN.matcher(fieldString).matches()) {
+            return ReadDiscreteInputsModbusField.of(fieldString);
+        } else if (ReadHoldingRegistersModbusField.ADDRESS_PATTERN.matcher(fieldString).matches()) {
+            return ReadHoldingRegistersModbusField.of(fieldString);
+        } else if (ReadInputRegistersModbusField.ADDRESS_PATTERN.matcher(fieldString).matches()) {
+            return ReadInputRegistersModbusField.of(fieldString);
+        } else if (CoilModbusField.ADDRESS_PATTERN.matcher(fieldString).matches()) {
+            return CoilModbusField.of(fieldString);
+        } else if (RegisterModbusField.ADDRESS_PATTERN.matcher(fieldString).matches()) {
+            return RegisterModbusField.of(fieldString);
         }
-        throw new PlcInvalidAddressException(addressString);
+        throw new PlcInvalidFieldException(fieldString);
     }
 
     @Override
diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusAddress.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusField.java
similarity index 72%
copy from plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusAddress.java
copy to plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusField.java
index 0a71f1d..731e699 100644
--- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusAddress.java
+++ b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusField.java
@@ -18,25 +18,25 @@
  */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class CoilModbusAddress extends ModbusAddress {
+public class CoilModbusField extends ModbusField {
 
-    public static final Pattern ADDRESS_PATTERN = Pattern.compile("coil:" + ModbusAddress.ADDRESS_PATTERN);
+    public static final Pattern ADDRESS_PATTERN = Pattern.compile("coil:" + ModbusField.ADDRESS_PATTERN);
 
-    protected CoilModbusAddress(int address) {
+    protected CoilModbusField(int address) {
         super(address);
     }
 
-    public static CoilModbusAddress of(String addressString) throws PlcInvalidAddressException {
+    public static CoilModbusField of(String addressString) throws PlcInvalidFieldException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(addressString, ADDRESS_PATTERN);
+            throw new PlcInvalidFieldException(addressString, ADDRESS_PATTERN);
         }
         int address = Integer.parseInt(matcher.group("address"));
-        return new CoilModbusAddress(address);
+        return new CoilModbusField(address);
     }
 }
diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/MaskWriteRegisterModbusAddress.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/MaskWriteRegisterModbusField.java
similarity index 73%
rename from plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/MaskWriteRegisterModbusAddress.java
rename to plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/MaskWriteRegisterModbusField.java
index 87f1587..4f33f8b 100644
--- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/MaskWriteRegisterModbusAddress.java
+++ b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/MaskWriteRegisterModbusField.java
@@ -18,34 +18,34 @@
  */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
 import java.util.Objects;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class MaskWriteRegisterModbusAddress extends ModbusAddress {
+public class MaskWriteRegisterModbusField extends ModbusField {
 
-    public static final Pattern ADDRESS_PATTERN = Pattern.compile("maskwrite:" + ModbusAddress.ADDRESS_PATTERN + "/" + "(?<andMask>\\d+)/(?<orMask>\\d+)");
+    public static final Pattern ADDRESS_PATTERN = Pattern.compile("maskwrite:" + ModbusField.ADDRESS_PATTERN + "/" + "(?<andMask>\\d+)/(?<orMask>\\d+)");
 
     private final int andMask;
     private final int orMask;
 
-    protected MaskWriteRegisterModbusAddress(int address, int andMask, int orMask) {
+    protected MaskWriteRegisterModbusField(int address, int andMask, int orMask) {
         super(address);
         this.andMask = andMask;
         this.orMask = orMask;
     }
 
-    public static MaskWriteRegisterModbusAddress of(String addressString) throws PlcInvalidAddressException {
+    public static MaskWriteRegisterModbusField of(String addressString) throws PlcInvalidFieldException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(addressString, ADDRESS_PATTERN);
+            throw new PlcInvalidFieldException(addressString, ADDRESS_PATTERN);
         }
         int address = Integer.parseInt(matcher.group("address"));
         int andMask = Integer.parseInt(matcher.group("andMask"));
         int orMask = Integer.parseInt(matcher.group("orMask"));
-        return new MaskWriteRegisterModbusAddress(address, andMask, orMask);
+        return new MaskWriteRegisterModbusField(address, andMask, orMask);
     }
 
     public int getAndMask() {
@@ -61,13 +61,13 @@ public class MaskWriteRegisterModbusAddress extends ModbusAddress {
         if (this == o) {
             return true;
         }
-        if (!(o instanceof MaskWriteRegisterModbusAddress)) {
+        if (!(o instanceof MaskWriteRegisterModbusField)) {
             return false;
         }
         if (!super.equals(o)) {
             return false;
         }
-        MaskWriteRegisterModbusAddress that = (MaskWriteRegisterModbusAddress) o;
+        MaskWriteRegisterModbusField that = (MaskWriteRegisterModbusField) o;
         return andMask == that.andMask &&
             orMask == that.orMask;
     }
@@ -80,7 +80,7 @@ public class MaskWriteRegisterModbusAddress extends ModbusAddress {
 
     @Override
     public String toString() {
-        return "MaskWriteRegisterModbusAddress{" +
+        return "MaskWriteRegisterModbusField{" +
             "andMask=" + andMask +
             ", orMask=" + orMask +
             "} " + super.toString();
diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ModbusAddress.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ModbusField.java
similarity index 84%
rename from plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ModbusAddress.java
rename to plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ModbusField.java
index ade19c7..b3ad29a 100644
--- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ModbusAddress.java
+++ b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ModbusField.java
@@ -18,18 +18,18 @@ under the License.
 */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.Objects;
 import java.util.regex.Pattern;
 
-public abstract class ModbusAddress implements Address {
+public abstract class ModbusField implements PlcField {
 
     public static final Pattern ADDRESS_PATTERN = Pattern.compile("(?<address>\\d+)");
 
     private final int address;
 
-    protected ModbusAddress(int address) {
+    protected ModbusField(int address) {
         this.address = address;
     }
 
@@ -42,10 +42,10 @@ public abstract class ModbusAddress implements Address {
         if (this == o) {
             return true;
         }
-        if (!(o instanceof ModbusAddress)) {
+        if (!(o instanceof ModbusField)) {
             return false;
         }
-        ModbusAddress that = (ModbusAddress) o;
+        ModbusField that = (ModbusField) o;
         return address == that.address;
     }
 
@@ -57,7 +57,7 @@ public abstract class ModbusAddress implements Address {
 
     @Override
     public String toString() {
-        return "ModbusAddress{" +
+        return "ModbusField{" +
             "address=" + address +
             '}';
     }
diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadInputRegistersModbusAddress.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadDiscreteInputsModbusField.java
similarity index 69%
rename from plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadInputRegistersModbusAddress.java
rename to plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadDiscreteInputsModbusField.java
index 27434e3..1c518d2 100644
--- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadInputRegistersModbusAddress.java
+++ b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadDiscreteInputsModbusField.java
@@ -18,25 +18,25 @@
  */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class ReadInputRegistersModbusAddress extends ModbusAddress {
+public class ReadDiscreteInputsModbusField extends ModbusField {
 
-    public static final Pattern ADDRESS_PATTERN = Pattern.compile("readinputregisters:" + ModbusAddress.ADDRESS_PATTERN);
+    public static final Pattern ADDRESS_PATTERN = Pattern.compile("readdiscreteinputs:" + ModbusField.ADDRESS_PATTERN);
 
-    protected ReadInputRegistersModbusAddress(int address) {
+    protected ReadDiscreteInputsModbusField(int address) {
         super(address);
     }
 
-    public static ReadInputRegistersModbusAddress of(String addressString) throws PlcInvalidAddressException {
+    public static ReadDiscreteInputsModbusField of(String addressString) throws PlcInvalidFieldException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(addressString, ADDRESS_PATTERN);
+            throw new PlcInvalidFieldException(addressString, ADDRESS_PATTERN);
         }
         int address = Integer.parseInt(matcher.group("address"));
-        return new ReadInputRegistersModbusAddress(address);
+        return new ReadDiscreteInputsModbusField(address);
     }
 }
diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadDiscreteInputsModbusAddress.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadHoldingRegistersModbusField.java
similarity index 69%
rename from plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadDiscreteInputsModbusAddress.java
rename to plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadHoldingRegistersModbusField.java
index 0e521b6..e00a510 100644
--- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadDiscreteInputsModbusAddress.java
+++ b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadHoldingRegistersModbusField.java
@@ -18,25 +18,25 @@
  */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class ReadDiscreteInputsModbusAddress extends ModbusAddress {
+public class ReadHoldingRegistersModbusField extends ModbusField {
 
-    public static final Pattern ADDRESS_PATTERN = Pattern.compile("readdiscreteinputs:" + ModbusAddress.ADDRESS_PATTERN);
+    public static final Pattern ADDRESS_PATTERN = Pattern.compile("readholdingregisters:" + ModbusField.ADDRESS_PATTERN);
 
-    protected ReadDiscreteInputsModbusAddress(int address) {
+    protected ReadHoldingRegistersModbusField(int address) {
         super(address);
     }
 
-    public static ReadDiscreteInputsModbusAddress of(String addressString) throws PlcInvalidAddressException {
+    public static ReadHoldingRegistersModbusField of(String addressString) throws PlcInvalidFieldException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(addressString, ADDRESS_PATTERN);
+            throw new PlcInvalidFieldException(addressString, ADDRESS_PATTERN);
         }
         int address = Integer.parseInt(matcher.group("address"));
-        return new ReadDiscreteInputsModbusAddress(address);
+        return new ReadHoldingRegistersModbusField(address);
     }
 }
diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadHoldingRegistersModbusAddress.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadInputRegistersModbusField.java
similarity index 69%
rename from plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadHoldingRegistersModbusAddress.java
rename to plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadInputRegistersModbusField.java
index 5a6c952..c42e3ae 100644
--- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadHoldingRegistersModbusAddress.java
+++ b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadInputRegistersModbusField.java
@@ -18,25 +18,25 @@
  */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class ReadHoldingRegistersModbusAddress extends ModbusAddress {
+public class ReadInputRegistersModbusField extends ModbusField {
 
-    public static final Pattern ADDRESS_PATTERN = Pattern.compile("readholdingregisters:" + ModbusAddress.ADDRESS_PATTERN);
+    public static final Pattern ADDRESS_PATTERN = Pattern.compile("readinputregisters:" + ModbusField.ADDRESS_PATTERN);
 
-    protected ReadHoldingRegistersModbusAddress(int address) {
+    protected ReadInputRegistersModbusField(int address) {
         super(address);
     }
 
-    public static ReadHoldingRegistersModbusAddress of(String addressString) throws PlcInvalidAddressException {
+    public static ReadInputRegistersModbusField of(String addressString) throws PlcInvalidFieldException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(addressString, ADDRESS_PATTERN);
+            throw new PlcInvalidFieldException(addressString, ADDRESS_PATTERN);
         }
         int address = Integer.parseInt(matcher.group("address"));
-        return new ReadHoldingRegistersModbusAddress(address);
+        return new ReadInputRegistersModbusField(address);
     }
 }
diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/RegisterModbusAddress.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/RegisterModbusAddress.java
deleted file mode 100644
index 7aa6c7b..0000000
--- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/RegisterModbusAddress.java
+++ /dev/null
@@ -1,43 +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.modbus.model;
-
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-// TODO: Default to {@link ReadHoldingRegistersModbusAddress}
-public class RegisterModbusAddress extends ModbusAddress {
-
-    public static final Pattern ADDRESS_PATTERN = Pattern.compile("register:" + ModbusAddress.ADDRESS_PATTERN);
-
-    protected RegisterModbusAddress(int address) {
-        super(address);
-    }
-
-    public static RegisterModbusAddress of(String addressString) throws PlcInvalidAddressException {
-        Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
-        if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(addressString, ADDRESS_PATTERN);
-        }
-        int address = Integer.parseInt(matcher.group("address"));
-        return new RegisterModbusAddress(address);
-    }
-}
diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusAddress.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/RegisterModbusField.java
similarity index 69%
rename from plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusAddress.java
rename to plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/RegisterModbusField.java
index 0a71f1d..8b5db79 100644
--- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusAddress.java
+++ b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/RegisterModbusField.java
@@ -18,25 +18,26 @@
  */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class CoilModbusAddress extends ModbusAddress {
+// TODO: Default to {@link ReadHoldingRegistersModbusField}
+public class RegisterModbusField extends ModbusField {
 
-    public static final Pattern ADDRESS_PATTERN = Pattern.compile("coil:" + ModbusAddress.ADDRESS_PATTERN);
+    public static final Pattern ADDRESS_PATTERN = Pattern.compile("register:" + ModbusField.ADDRESS_PATTERN);
 
-    protected CoilModbusAddress(int address) {
+    protected RegisterModbusField(int address) {
         super(address);
     }
 
-    public static CoilModbusAddress of(String addressString) throws PlcInvalidAddressException {
+    public static RegisterModbusField of(String addressString) throws PlcInvalidFieldException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(addressString, ADDRESS_PATTERN);
+            throw new PlcInvalidFieldException(addressString, ADDRESS_PATTERN);
         }
         int address = Integer.parseInt(matcher.group("address"));
-        return new CoilModbusAddress(address);
+        return new RegisterModbusField(address);
     }
 }
diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java
index 880fa5c..a14ed98 100644
--- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java
+++ b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java
@@ -33,7 +33,7 @@ import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
 import org.apache.plc4x.java.api.exceptions.PlcUnsupportedDataTypeException;
 import org.apache.plc4x.java.api.messages.*;
 import org.apache.plc4x.java.api.messages.items.*;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
 import org.apache.plc4x.java.modbus.model.*;
 import org.slf4j.Logger;
@@ -72,53 +72,53 @@ public class Plc4XModbusProtocol extends MessageToMessageCodec<ModbusTcpPayload,
     private void encodeWriteRequest(PlcRequestContainer<PlcRequest, PlcResponse> msg, List<Object> out) throws PlcException {
         PlcWriteRequest request = (PlcWriteRequest) msg.getRequest();
         // TODO: support multiple requests
-        WriteRequestItem<?> writeRequestItem = request.getRequestItem().orElseThrow(() -> new PlcNotImplementedException("Only single message supported for now"));
+        PlcWriteRequestItem<?> writeRequestItem = request.getRequestItem().orElseThrow(() -> new PlcNotImplementedException("Only single message supported for now"));
         // TODO: check if we can map like this. Implication is that we can only work with int, short, byte and boolean
         // TODO: for higher datatypes float, double etc we might need to split the bytes into chunks
         int quantity = writeRequestItem.getSize();
         short unitId = 0;
 
-        ModbusAddress address = (ModbusAddress) writeRequestItem.getAddress();
+        ModbusField field = (ModbusField) writeRequestItem.getField();
         ModbusPdu modbusRequest;
-        if (address instanceof RegisterModbusAddress) {
-            RegisterModbusAddress registerModbusAddress = (RegisterModbusAddress) address;
+        if (field instanceof RegisterModbusField) {
+            RegisterModbusField registerModbusField = (RegisterModbusField) field;
             if (quantity > 1) {
                 byte[] bytesToWrite = produceRegisterValue(writeRequestItem.getValues());
                 int requiredLength = 2 * quantity;
                 if (bytesToWrite.length != requiredLength) {
                     throw new PlcProtocolException("Invalid register values created. Should be at least quantity * 2 = N bytes. Was " + bytesToWrite.length + ", expected " + requiredLength);
                 }
-                modbusRequest = new WriteMultipleRegistersRequest(registerModbusAddress.getAddress(), quantity, bytesToWrite);
+                modbusRequest = new WriteMultipleRegistersRequest(registerModbusField.getAddress(), quantity, bytesToWrite);
             } else {
                 byte[] register = produceRegisterValue(writeRequestItem.getValues());
                 int intToWrite = register[0] << 8 | register[1] & 0xff;
-                modbusRequest = new WriteSingleRegisterRequest(registerModbusAddress.getAddress(), intToWrite);
+                modbusRequest = new WriteSingleRegisterRequest(registerModbusField.getAddress(), intToWrite);
             }
-        } else if (address instanceof CoilModbusAddress) {
-            CoilModbusAddress coilModbusAddress = (CoilModbusAddress) address;
+        } else if (field instanceof CoilModbusField) {
+            CoilModbusField coilModbusField = (CoilModbusField) field;
             if (quantity > 1) {
                 byte[] bytesToWrite = produceCoilValues(writeRequestItem.getValues());
                 int requiredLength = (quantity + 7) / 8;
                 if (bytesToWrite.length != requiredLength) {
                     throw new PlcProtocolException("Invalid coil values created. Should be at least (quantity + 7) / 8 = N bytes. Was " + bytesToWrite.length + ", expected " + requiredLength);
                 }
-                modbusRequest = new WriteMultipleCoilsRequest(coilModbusAddress.getAddress(), quantity, bytesToWrite);
+                modbusRequest = new WriteMultipleCoilsRequest(coilModbusField.getAddress(), quantity, bytesToWrite);
             } else {
                 boolean booleanToWrite = produceCoilValue(writeRequestItem.getValues());
-                modbusRequest = new WriteSingleCoilRequest(coilModbusAddress.getAddress(), booleanToWrite);
+                modbusRequest = new WriteSingleCoilRequest(coilModbusField.getAddress(), booleanToWrite);
             }
-        } else if (address instanceof MaskWriteRegisterModbusAddress) {
-            MaskWriteRegisterModbusAddress maskWriteRegisterModbusAddress = (MaskWriteRegisterModbusAddress) address;
+        } else if (field instanceof MaskWriteRegisterModbusField) {
+            MaskWriteRegisterModbusField maskWriteRegisterModbusField = (MaskWriteRegisterModbusField) field;
             if (quantity > 1) {
                 throw new PlcProtocolException("Mask write request can only write one value");
             } else {
                 // TODO: this should be better part of the payload not the addressing.
-                int andMask = maskWriteRegisterModbusAddress.getAndMask();
-                int orMask = maskWriteRegisterModbusAddress.getOrMask();
-                modbusRequest = new MaskWriteRegisterRequest(maskWriteRegisterModbusAddress.getAddress(), andMask, orMask);
+                int andMask = maskWriteRegisterModbusField.getAndMask();
+                int orMask = maskWriteRegisterModbusField.getOrMask();
+                modbusRequest = new MaskWriteRegisterRequest(maskWriteRegisterModbusField.getAddress(), andMask, orMask);
             }
         } else {
-            throw new PlcProtocolException("Unsupported address type " + address.getClass() + " for a write request.");
+            throw new PlcProtocolException("Unsupported field type " + field.getClass() + " for a write request.");
         }
         short transactionId = (short) this.transactionId.getAndIncrement();
         requestsMap.put(transactionId, msg);
@@ -128,32 +128,32 @@ public class Plc4XModbusProtocol extends MessageToMessageCodec<ModbusTcpPayload,
     private void encodeReadRequest(PlcRequestContainer<PlcRequest, PlcResponse> msg, List<Object> out) throws PlcException {
         PlcReadRequest request = (PlcReadRequest) msg.getRequest();
         // TODO: support multiple requests
-        ReadRequestItem<?> readRequestItem = request.getRequestItem().orElseThrow(() -> new PlcNotImplementedException("Only single message supported for now"));
+        PlcReadRequestItem<?> readRequestItem = request.getRequestItem().orElseThrow(() -> new PlcNotImplementedException("Only single message supported for now"));
         // TODO: check if we can map like this. Implication is that we can only work with int, short, byte and boolean
         // TODO: for higher datatypes float, double etc we might need to split the bytes into chunks
         int quantity = readRequestItem.getSize();
         // TODO: the unit the should be used for multiple Requests
         short unitId = 0;
 
-        ModbusAddress address = (ModbusAddress) readRequestItem.getAddress();
+        ModbusField field = (ModbusField) readRequestItem.getField();
         ModbusPdu modbusRequest;
-        if (address instanceof CoilModbusAddress) {
-            CoilModbusAddress coilModbusAddress = (CoilModbusAddress) address;
-            modbusRequest = new ReadCoilsRequest(coilModbusAddress.getAddress(), quantity);
-        } else if (address instanceof RegisterModbusAddress) {
-            RegisterModbusAddress registerModbusAddress = (RegisterModbusAddress) address;
-            modbusRequest = new ReadHoldingRegistersRequest(registerModbusAddress.getAddress(), quantity);
-        } else if (address instanceof ReadDiscreteInputsModbusAddress) {
-            ReadDiscreteInputsModbusAddress readDiscreteInputsModbusAddress = (ReadDiscreteInputsModbusAddress) address;
-            modbusRequest = new ReadDiscreteInputsRequest(readDiscreteInputsModbusAddress.getAddress(), quantity);
-        } else if (address instanceof ReadHoldingRegistersModbusAddress) {
-            ReadHoldingRegistersModbusAddress readHoldingRegistersModbusAddress = (ReadHoldingRegistersModbusAddress) address;
-            modbusRequest = new ReadHoldingRegistersRequest(readHoldingRegistersModbusAddress.getAddress(), quantity);
-        } else if (address instanceof ReadInputRegistersModbusAddress) {
-            ReadInputRegistersModbusAddress readInputRegistersModbusAddress = (ReadInputRegistersModbusAddress) address;
-            modbusRequest = new ReadInputRegistersRequest(readInputRegistersModbusAddress.getAddress(), quantity);
+        if (field instanceof CoilModbusField) {
+            CoilModbusField coilModbusField = (CoilModbusField) field;
+            modbusRequest = new ReadCoilsRequest(coilModbusField.getAddress(), quantity);
+        } else if (field instanceof RegisterModbusField) {
+            RegisterModbusField registerModbusField = (RegisterModbusField) field;
+            modbusRequest = new ReadHoldingRegistersRequest(registerModbusField.getAddress(), quantity);
+        } else if (field instanceof ReadDiscreteInputsModbusField) {
+            ReadDiscreteInputsModbusField readDiscreteInputsModbusField = (ReadDiscreteInputsModbusField) field;
+            modbusRequest = new ReadDiscreteInputsRequest(readDiscreteInputsModbusField.getAddress(), quantity);
+        } else if (field instanceof ReadHoldingRegistersModbusField) {
+            ReadHoldingRegistersModbusField readHoldingRegistersModbusField = (ReadHoldingRegistersModbusField) field;
+            modbusRequest = new ReadHoldingRegistersRequest(readHoldingRegistersModbusField.getAddress(), quantity);
+        } else if (field instanceof ReadInputRegistersModbusField) {
+            ReadInputRegistersModbusField readInputRegistersModbusField = (ReadInputRegistersModbusField) field;
+            modbusRequest = new ReadInputRegistersRequest(readInputRegistersModbusField.getAddress(), quantity);
         } else {
-            throw new PlcProtocolException("Unsupported address type " + address.getClass() + " for a read request.");
+            throw new PlcProtocolException("Unsupported field type " + field.getClass() + " for a read request.");
         }
         short transactionId = (short) this.transactionId.getAndIncrement();
         requestsMap.put(transactionId, msg);
@@ -184,36 +184,36 @@ public class Plc4XModbusProtocol extends MessageToMessageCodec<ModbusTcpPayload,
             // TODO: finish implementation
             WriteMultipleCoilsResponse writeMultipleCoilsResponse = (WriteMultipleCoilsResponse) modbusPdu;
             LOGGER.debug("{}: address:{}, quantity:{}", writeMultipleCoilsResponse, writeMultipleCoilsResponse.getAddress(), writeMultipleCoilsResponse.getQuantity());
-            plcRequestContainer.getResponseFuture().complete(new PlcWriteResponse((PlcWriteRequest) request, new WriteResponseItem<>((WriteRequestItem) requestItem, ResponseCode.OK)));
+            plcRequestContainer.getResponseFuture().complete(new PlcWriteResponse((PlcWriteRequest) request, new PlcWriteResponseItem<>((PlcWriteRequestItem) requestItem, PlcResponseCode.OK)));
         } else if (modbusPdu instanceof WriteMultipleRegistersResponse) {
             // TODO: finish implementation
             WriteMultipleRegistersResponse writeMultipleRegistersResponse = (WriteMultipleRegistersResponse) modbusPdu;
             LOGGER.debug("{}: address:{}, quantity:{}", writeMultipleRegistersResponse, writeMultipleRegistersResponse.getAddress(), writeMultipleRegistersResponse.getQuantity());
-            plcRequestContainer.getResponseFuture().complete(new PlcWriteResponse((PlcWriteRequest) request, new WriteResponseItem<>((WriteRequestItem) requestItem, ResponseCode.OK)));
+            plcRequestContainer.getResponseFuture().complete(new PlcWriteResponse((PlcWriteRequest) request, new PlcWriteResponseItem<>((PlcWriteRequestItem) requestItem, PlcResponseCode.OK)));
         } else if (modbusPdu instanceof WriteSingleCoilResponse) {
             // TODO: finish implementation
             WriteSingleCoilResponse writeSingleCoilResponse = (WriteSingleCoilResponse) modbusPdu;
             LOGGER.debug("{}: address:{}, value:{}", writeSingleCoilResponse, writeSingleCoilResponse.getAddress(), writeSingleCoilResponse.getValue());
-            plcRequestContainer.getResponseFuture().complete(new PlcWriteResponse((PlcWriteRequest) request, new WriteResponseItem<>((WriteRequestItem) requestItem, ResponseCode.OK)));
+            plcRequestContainer.getResponseFuture().complete(new PlcWriteResponse((PlcWriteRequest) request, new PlcWriteResponseItem<>((PlcWriteRequestItem) requestItem, PlcResponseCode.OK)));
         } else if (modbusPdu instanceof WriteSingleRegisterResponse) {
             // TODO: finish implementation
             WriteSingleRegisterResponse writeSingleRegisterResponse = (WriteSingleRegisterResponse) modbusPdu;
             LOGGER.debug("{}: address:{}, value:{}", writeSingleRegisterResponse, writeSingleRegisterResponse.getAddress(), writeSingleRegisterResponse.getValue());
-            plcRequestContainer.getResponseFuture().complete(new PlcWriteResponse((PlcWriteRequest) request, new WriteResponseItem<>((WriteRequestItem) requestItem, ResponseCode.OK)));
+            plcRequestContainer.getResponseFuture().complete(new PlcWriteResponse((PlcWriteRequest) request, new PlcWriteResponseItem<>((PlcWriteRequestItem) requestItem, PlcResponseCode.OK)));
         } else if (modbusPdu instanceof ReadCoilsResponse) {
             // TODO: finish implementation
             ReadCoilsResponse readCoilsResponse = (ReadCoilsResponse) modbusPdu;
             LOGGER.debug("{}: Nothing", readCoilsResponse);
             ByteBuf byteBuf = readCoilsResponse.getCoilStatus();
             List<?> data = produceCoilValueList(requestItem, dataType, byteBuf);
-            plcRequestContainer.getResponseFuture().complete(new PlcReadResponse((PlcReadRequest) request, new ReadResponseItem((ReadRequestItem) requestItem, ResponseCode.OK, data)));
+            plcRequestContainer.getResponseFuture().complete(new PlcReadResponse((PlcReadRequest) request, new PlcReadResponseItem((PlcReadRequestItem) requestItem, PlcResponseCode.OK, data)));
         } else if (modbusPdu instanceof ReadDiscreteInputsResponse) {
             // TODO: finish implementation
             ReadDiscreteInputsResponse readDiscreteInputsResponse = (ReadDiscreteInputsResponse) modbusPdu;
             LOGGER.debug("{}: Nothing", readDiscreteInputsResponse);
             ByteBuf byteBuf = readDiscreteInputsResponse.getInputStatus();
             List<?> data = produceCoilValueList(requestItem, dataType, byteBuf);
-            plcRequestContainer.getResponseFuture().complete(new PlcReadResponse((PlcReadRequest) request, new ReadResponseItem((ReadRequestItem) requestItem, ResponseCode.OK, data)));
+            plcRequestContainer.getResponseFuture().complete(new PlcReadResponse((PlcReadRequest) request, new PlcReadResponseItem((PlcReadRequestItem) requestItem, PlcResponseCode.OK, data)));
         } else if (modbusPdu instanceof ReadHoldingRegistersResponse) {
             // TODO: finish implementation
             ReadHoldingRegistersResponse readHoldingRegistersResponse = (ReadHoldingRegistersResponse) modbusPdu;
@@ -221,7 +221,7 @@ public class Plc4XModbusProtocol extends MessageToMessageCodec<ModbusTcpPayload,
             ByteBuf byteBuf = readHoldingRegistersResponse.getRegisters();
             // TODO: use register method
             List<?> data = produceRegisterValueList(requestItem, dataType, byteBuf);
-            plcRequestContainer.getResponseFuture().complete(new PlcReadResponse((PlcReadRequest) request, new ReadResponseItem((ReadRequestItem) requestItem, ResponseCode.OK, data)));
+            plcRequestContainer.getResponseFuture().complete(new PlcReadResponse((PlcReadRequest) request, new PlcReadResponseItem((PlcReadRequestItem) requestItem, PlcResponseCode.OK, data)));
         } else if (modbusPdu instanceof ReadInputRegistersResponse) {
             // TODO: finish implementation
             ReadInputRegistersResponse readInputRegistersResponse = (ReadInputRegistersResponse) modbusPdu;
@@ -229,12 +229,12 @@ public class Plc4XModbusProtocol extends MessageToMessageCodec<ModbusTcpPayload,
             ByteBuf byteBuf = readInputRegistersResponse.getRegisters();
             // TODO: use register method
             List<?> data = produceRegisterValueList(requestItem, dataType, byteBuf);
-            plcRequestContainer.getResponseFuture().complete(new PlcReadResponse((PlcReadRequest) request, new ReadResponseItem((ReadRequestItem) requestItem, ResponseCode.OK, data)));
+            plcRequestContainer.getResponseFuture().complete(new PlcReadResponse((PlcReadRequest) request, new PlcReadResponseItem((PlcReadRequestItem) requestItem, PlcResponseCode.OK, data)));
         } else if (modbusPdu instanceof MaskWriteRegisterResponse) {
             // TODO: finish implementation
             MaskWriteRegisterResponse maskWriteRegisterResponse = (MaskWriteRegisterResponse) modbusPdu;
             LOGGER.debug("{}: Nothing", maskWriteRegisterResponse);
-            plcRequestContainer.getResponseFuture().complete(new PlcWriteResponse((PlcWriteRequest) request, new WriteResponseItem<>((WriteRequestItem) requestItem, ResponseCode.OK)));
+            plcRequestContainer.getResponseFuture().complete(new PlcWriteResponse((PlcWriteRequest) request, new PlcWriteResponseItem<>((PlcWriteRequestItem) requestItem, PlcResponseCode.OK)));
         } else if (modbusPdu instanceof ExceptionResponse) {
             ExceptionResponse exceptionResponse = (ExceptionResponse) modbusPdu;
             throw new PlcProtocolException("Error received " + exceptionResponse.getExceptionCode());
@@ -416,7 +416,7 @@ public class Plc4XModbusProtocol extends MessageToMessageCodec<ModbusTcpPayload,
     // Decoding helpers.
     ////////////////////////////////////////////////////////////////////////////////
     private <T> List<T> produceCoilValueList(RequestItem requestItem, Class<T> dataType, ByteBuf byteBuf) {
-        ReadRequestItem readRequestItem = (ReadRequestItem) requestItem;
+        PlcReadRequestItem readRequestItem = (PlcReadRequestItem) requestItem;
         byte[] bytes = new byte[byteBuf.readableBytes()];
         if (bytes.length < 1) {
             return Collections.emptyList();
@@ -476,7 +476,7 @@ public class Plc4XModbusProtocol extends MessageToMessageCodec<ModbusTcpPayload,
     }
 
     private <T> List<T> produceRegisterValueList(RequestItem requestItem, Class<T> dataType, ByteBuf byteBuf) throws PlcProtocolException {
-        ReadRequestItem readRequestItem = (ReadRequestItem) requestItem;
+        PlcReadRequestItem readRequestItem = (PlcReadRequestItem) requestItem;
         int readableBytes = byteBuf.readableBytes();
         if (readableBytes % 2 != 0) {
             throw new PlcProtocolException("Readables bytes should even: " + readableBytes);
diff --git a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java
index a37a702..1a4b125 100644
--- a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java
+++ b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java
@@ -22,12 +22,12 @@ import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.connection.PlcWriter;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 
 import java.util.concurrent.CompletableFuture;
 
@@ -48,12 +48,12 @@ public class ManualPlc4XModbusTest {
             {
                 PlcReader reader = plcConnection.getReader().orElseThrow(() -> new RuntimeException("No Reader found"));
 
-                Address address = plcConnection.parseAddress("register:7");
+                PlcField field = plcConnection.prepareField("register:7");
                 CompletableFuture<TypeSafePlcReadResponse<Integer>> response = reader
-                    .read(new TypeSafePlcReadRequest<>(Integer.class, address));
+                    .read(new TypeSafePlcReadRequest<>(Integer.class, field));
                 TypeSafePlcReadResponse<Integer> readResponse = response.get();
                 System.out.println("Response " + readResponse);
-                ReadResponseItem<Integer> responseItem = readResponse.getResponseItem().orElseThrow(() -> new RuntimeException("No Item found"));
+                PlcReadResponseItem<Integer> responseItem = readResponse.getResponseItem().orElseThrow(() -> new RuntimeException("No Item found"));
                 System.out.println("ResponseItem " + responseItem);
                 responseItem.getValues().stream().map(integer -> "Value: " + integer).forEach(System.out::println);
             }
@@ -61,20 +61,20 @@ public class ManualPlc4XModbusTest {
             {
                 PlcReader reader = plcConnection.getReader().orElseThrow(() -> new RuntimeException("No Reader found"));
 
-                Address address = plcConnection.parseAddress("coil:1");
+                PlcField field = plcConnection.prepareField("coil:1");
                 CompletableFuture<TypeSafePlcReadResponse<Integer>> response = reader
-                    .read(new TypeSafePlcReadRequest<>(Integer.class, address));
+                    .read(new TypeSafePlcReadRequest<>(Integer.class, field));
                 TypeSafePlcReadResponse<Integer> readResponse = response.get();
                 System.out.println("Response " + readResponse);
-                ReadResponseItem<Integer> responseItem = readResponse.getResponseItem().orElseThrow(() -> new RuntimeException("No Item found"));
+                PlcReadResponseItem<Integer> responseItem = readResponse.getResponseItem().orElseThrow(() -> new RuntimeException("No Item found"));
                 System.out.println("ResponseItem " + responseItem);
                 responseItem.getValues().stream().map(integer -> "Value: " + integer).forEach(System.out::println);
             }
 
             {
                 PlcWriter writer = plcConnection.getWriter().orElseThrow(() -> new RuntimeException("No Writer found"));
-                Address address = plcConnection.parseAddress("coil:1");
-                CompletableFuture<TypeSafePlcWriteResponse<Integer>> write = writer.write(new TypeSafePlcWriteRequest<>(Integer.class, address, 1));
+                PlcField field = plcConnection.prepareField("coil:1");
+                CompletableFuture<TypeSafePlcWriteResponse<Integer>> write = writer.write(new TypeSafePlcWriteRequest<>(Integer.class, field, 1));
                 TypeSafePlcWriteResponse<Integer> writeResponse = write.get();
                 System.out.println("Response " + writeResponse);
             }
diff --git a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java
index 8ce248a..52b06e1 100644
--- a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java
+++ b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java
@@ -65,69 +65,69 @@ public class ModbusSerialPlcConnectionTest {
     }
 
     @Test
-    public void emptyParseAddress() throws Exception {
+    public void prepareEmptyField() throws Exception {
         try {
-            SUT.parseAddress("");
+            SUT.prepareField("");
         } catch (IllegalArgumentException exception) {
-            assertTrue("Unexpected exception", exception.getMessage().startsWith("address  doesn't match "));
+            assertTrue("Unexpected exception", exception.getMessage().startsWith("address doesn't match "));
         }
     }
 
     @Test
-    public void parseCoilModbusAddress() throws Exception {
+    public void prepareField() throws Exception {
         try {
-            CoilModbusAddress address = (CoilModbusAddress) SUT.parseAddress("0/1");
-            assertEquals(address.getAddress(), 0);
+            CoilModbusField field = (CoilModbusField) SUT.prepareField("0/1");
+            assertEquals(field.getAddress(), 0);
         } catch (IllegalArgumentException exception) {
             fail("valid data block address");
         }
     }
 
     @Test
-    public void parseMaskWriteRegisterModbusAddress() throws Exception {
+    public void prepareMaskWriteRegisterModbusField() throws Exception {
         try {
-            MaskWriteRegisterModbusAddress address = (MaskWriteRegisterModbusAddress) SUT.parseAddress("0/1");
-            assertEquals(address.getAddress(), 0);
+            MaskWriteRegisterModbusField field = (MaskWriteRegisterModbusField) SUT.prepareField("0/1");
+            assertEquals(field.getAddress(), 0);
         } catch (IllegalArgumentException exception) {
             fail("valid data block address");
         }
     }
 
     @Test
-    public void parseReadDiscreteInputsModbusAddress() throws Exception {
+    public void prepareReadDiscreteInputsModbusField() throws Exception {
         try {
-            ReadDiscreteInputsModbusAddress address = (ReadDiscreteInputsModbusAddress) SUT.parseAddress("0/1");
-            assertEquals(address.getAddress(), 0);
+            ReadDiscreteInputsModbusField field = (ReadDiscreteInputsModbusField) SUT.prepareField("0/1");
+            assertEquals(field.getAddress(), 0);
         } catch (IllegalArgumentException exception) {
             fail("valid data block address");
         }
     }
 
     @Test
-    public void parseReadHoldingRegistersModbusAddress() throws Exception {
+    public void prepareReadHoldingRegistersModbusField() throws Exception {
         try {
-            ReadHoldingRegistersModbusAddress address = (ReadHoldingRegistersModbusAddress) SUT.parseAddress("0/1");
-            assertEquals(address.getAddress(), 0);
+            ReadHoldingRegistersModbusField field = (ReadHoldingRegistersModbusField) SUT.prepareField("0/1");
+            assertEquals(field.getAddress(), 0);
         } catch (IllegalArgumentException exception) {
             fail("valid data block address");
         }
     }
 
     @Test
-    public void parseReadInputRegistersModbusAddress() throws Exception {
+    public void prepareReadInputRegistersModbusField() throws Exception {
         try {
-            ReadInputRegistersModbusAddress address = (ReadInputRegistersModbusAddress) SUT.parseAddress("0/1");
-            assertEquals(address.getAddress(), 0);
+            ReadInputRegistersModbusField field = (ReadInputRegistersModbusField) SUT.prepareField("0/1");
+            assertEquals(field.getAddress(), 0);
         } catch (IllegalArgumentException exception) {
             fail("valid data block address");
         }
     }
 
     @Test
-    public void parseRegisterAddress() throws Exception {
+    public void prepareRegisterField() throws Exception {
         try {
-            RegisterModbusAddress address = (RegisterModbusAddress) SUT.parseAddress("0/1");
-            assertEquals(address.getAddress(), 0);
+            RegisterModbusField field = (RegisterModbusField) SUT.prepareField("0/1");
+            assertEquals(field.getAddress(), 0);
         } catch (IllegalArgumentException exception) {
             fail("valid data block address");
         }
@@ -136,7 +136,7 @@ public class ModbusSerialPlcConnectionTest {
     @Test
     public void testRead() throws Exception {
         prepareSerialSimulator();
-        CompletableFuture<PlcReadResponse> read = SUT.read(new PlcReadRequest(String.class, SUT.parseAddress("0/0")));
+        CompletableFuture<PlcReadResponse> read = SUT.read(new PlcReadRequest(String.class, SUT.prepareField("0/0")));
         PlcReadResponse plcReadResponse = read.get(30, TimeUnit.SECONDS);
         assertNotNull(plcReadResponse);
     }
diff --git a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnectionTests.java b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnectionTests.java
index 3334cfe..1a093bb 100644
--- a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnectionTests.java
+++ b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnectionTests.java
@@ -21,7 +21,7 @@ package org.apache.plc4x.java.modbus.connection;
 
 import io.netty.channel.Channel;
 import org.apache.commons.lang3.reflect.FieldUtils;
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.modbus.model.*;
 import org.hamcrest.Matchers;
 import org.junit.After;
@@ -63,71 +63,71 @@ public class ModbusTcpPlcConnectionTests {
     }
 
     @Test
-    public void emptyParseAddress() {
+    public void prepareEmptyField() {
         try {
-            SUT.parseAddress("");
-        } catch (PlcInvalidAddressException exception) {
+            SUT.prepareField("");
+        } catch (PlcInvalidFieldException exception) {
             assertThat(exception.getMessage(), Matchers.startsWith(" invalid"));
         }
     }
 
     @Test
-    public void parseCoilModbusAddress() throws Exception {
+    public void prepareCoilModbusField() throws Exception {
         try {
-            CoilModbusAddress address = (CoilModbusAddress) SUT.parseAddress("coil:0");
-            assertEquals(address.getAddress(), 0);
+            CoilModbusField field = (CoilModbusField) SUT.prepareField("coil:0");
+            assertEquals(field.getAddress(), 0);
         } catch (IllegalArgumentException exception) {
             fail("valid data block address");
         }
     }
 
     @Test
-    public void parseMaskWriteRegisterModbusAddress() throws Exception {
+    public void prepareMaskWriteRegisterModbusField() throws Exception {
         try {
-            MaskWriteRegisterModbusAddress address = (MaskWriteRegisterModbusAddress) SUT.parseAddress("maskwrite:1/2/3");
-            assertEquals(address.getAddress(), 1);
-            assertEquals(address.getAndMask(), 2);
-            assertEquals(address.getOrMask(), 3);
+            MaskWriteRegisterModbusField field = (MaskWriteRegisterModbusField) SUT.prepareField("maskwrite:1/2/3");
+            assertEquals(field.getAddress(), 1);
+            assertEquals(field.getAndMask(), 2);
+            assertEquals(field.getOrMask(), 3);
         } catch (IllegalArgumentException exception) {
             fail("valid data block address");
         }
     }
 
     @Test
-    public void parseReadDiscreteInputsModbusAddress() throws Exception {
+    public void prepareReadDiscreteInputsModbusField() throws Exception {
         try {
-            ReadDiscreteInputsModbusAddress address = (ReadDiscreteInputsModbusAddress) SUT.parseAddress("readdiscreteinputs:0");
-            assertEquals(address.getAddress(), 0);
+            ReadDiscreteInputsModbusField field = (ReadDiscreteInputsModbusField) SUT.prepareField("readdiscreteinputs:0");
+            assertEquals(field.getAddress(), 0);
         } catch (IllegalArgumentException exception) {
             fail("valid data block address");
         }
     }
 
     @Test
-    public void parseReadHoldingRegistersModbusAddress() throws Exception {
+    public void prepareReadHoldingRegistersModbusField() throws Exception {
         try {
-            ReadHoldingRegistersModbusAddress address = (ReadHoldingRegistersModbusAddress) SUT.parseAddress("readholdingregisters:0");
-            assertEquals(address.getAddress(), 0);
+            ReadHoldingRegistersModbusField field = (ReadHoldingRegistersModbusField) SUT.prepareField("readholdingregisters:0");
+            assertEquals(field.getAddress(), 0);
         } catch (IllegalArgumentException exception) {
             fail("valid data block address");
         }
     }
 
     @Test
-    public void parseReadInputRegistersModbusAddress() throws Exception {
+    public void prepareReadInputRegistersModbusField() throws Exception {
         try {
-            ReadInputRegistersModbusAddress address = (ReadInputRegistersModbusAddress) SUT.parseAddress("readinputregisters:0");
-            assertEquals(address.getAddress(), 0);
+            ReadInputRegistersModbusField field = (ReadInputRegistersModbusField) SUT.prepareField("readinputregisters:0");
+            assertEquals(field.getAddress(), 0);
         } catch (IllegalArgumentException exception) {
             fail("valid data block address");
         }
     }
 
     @Test
-    public void parseRegisterAddress() throws Exception {
+    public void prepareRegisterField() throws Exception {
         try {
-            RegisterModbusAddress address = (RegisterModbusAddress) SUT.parseAddress("register:0");
-            assertEquals(address.getAddress(), 0);
+            RegisterModbusField field = (RegisterModbusField) SUT.prepareField("register:0");
+            assertEquals(field.getAddress(), 0);
         } catch (IllegalArgumentException exception) {
             fail("valid data block address");
         }
diff --git a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java
index 867d368..52a40fe 100644
--- a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java
+++ b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java
@@ -25,16 +25,16 @@ import com.digitalpetri.modbus.responses.*;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import org.apache.commons.lang3.tuple.ImmutablePair;
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcRequest;
 import org.apache.plc4x.java.api.messages.PlcResponse;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteResponseItem;
 import org.apache.plc4x.java.api.messages.items.ResponseItem;
-import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
 import org.apache.plc4x.java.base.protocol.Plc4XSupportedDataTypes;
 import org.apache.plc4x.java.modbus.model.*;
@@ -111,49 +111,49 @@ public class Plc4XModbusProtocolTest {
                 }
             })
             .map(dataTypePair -> Stream.of(
-                producePair(dataTypePair.getDataTypeClass(), st(() -> CoilModbusAddress.of("coil:1")), new ReadCoilsResponse(Unpooled.wrappedBuffer(new byte[]{(byte) 0x1}))),
-                producePair(st(() -> CoilModbusAddress.of("coil:1")), new WriteSingleCoilResponse(1, 1), mapDataTypePairForCoil(dataTypePair).getValue()),
+                producePair(dataTypePair.getDataTypeClass(), st(() -> CoilModbusField.of("coil:1")), new ReadCoilsResponse(Unpooled.wrappedBuffer(new byte[]{(byte) 0x1}))),
+                producePair(st(() -> CoilModbusField.of("coil:1")), new WriteSingleCoilResponse(1, 1), mapDataTypePairForCoil(dataTypePair).getValue()),
                 /* Read request no supported on maskwrite so how to handle?
-                producePair(pair.getDataTypeClass(), MaskWriteRegisterModbusAddress.of("maskwrite:1/1/2"), new MaskWriteRegisterResponse(1, 1, 2)),
+                producePair(pair.getDataTypeClass(), MaskWriteRegisterModbusField.of("maskwrite:1/1/2"), new MaskWriteRegisterResponse(1, 1, 2)),
                 */
-                producePair(st(() -> MaskWriteRegisterModbusAddress.of("maskwrite:1/1/2")), new MaskWriteRegisterResponse(1, 1, 2), mapDataTypePairForRegister(dataTypePair).getValue()),
-                producePair(dataTypePair.getDataTypeClass(), st(() -> ReadDiscreteInputsModbusAddress.of("readdiscreteinputs:1")), new ReadDiscreteInputsResponse(Unpooled.wrappedBuffer(new byte[]{(byte) 0x01}))),
-                producePair(dataTypePair.getDataTypeClass(), st(() -> ReadHoldingRegistersModbusAddress.of("readholdingregisters:1")), new ReadHoldingRegistersResponse(Unpooled.wrappedBuffer(cutRegister(mapDataTypePairForRegister(dataTypePair).getByteRepresentation())))),
-                producePair(dataTypePair.getDataTypeClass(), st(() -> ReadInputRegistersModbusAddress.of("readinputregisters:1")), new ReadInputRegistersResponse(Unpooled.wrappedBuffer(cutRegister(mapDataTypePairForRegister(dataTypePair).getByteRepresentation())))),
-                producePair(st(() -> CoilModbusAddress.of("coil:1")), new WriteMultipleCoilsResponse(1, 3), mapDataTypePairForCoil(dataTypePair).getValue(), mapDataTypePairForCoil(dataTypePair).getValue(), mapDataTypePairForCoil(dataTypePair).getValue()),
-                producePair(st(() -> RegisterModbusAddress.of("register:1")), new WriteMultipleRegistersResponse(1, 3), mapDataTypePairForRegister(dataTypePair).getValue(), mapDataTypePairForRegister(dataTypePair).getValue(), mapDataTypePairForRegister(dataTypePair).getValue()),
-                producePair(st(() -> RegisterModbusAddress.of("register:1")), new WriteSingleRegisterResponse(1, cutRegister(mapDataTypePairForRegister(dataTypePair).getByteRepresentation())[0]), mapDataTypePairForRegister(dataTypePair).getValue())
+                producePair(st(() -> MaskWriteRegisterModbusField.of("maskwrite:1/1/2")), new MaskWriteRegisterResponse(1, 1, 2), mapDataTypePairForRegister(dataTypePair).getValue()),
+                producePair(dataTypePair.getDataTypeClass(), st(() -> ReadDiscreteInputsModbusField.of("readdiscreteinputs:1")), new ReadDiscreteInputsResponse(Unpooled.wrappedBuffer(new byte[]{(byte) 0x01}))),
+                producePair(dataTypePair.getDataTypeClass(), st(() -> ReadHoldingRegistersModbusField.of("readholdingregisters:1")), new ReadHoldingRegistersResponse(Unpooled.wrappedBuffer(cutRegister(mapDataTypePairForRegister(dataTypePair).getByteRepresentation())))),
+                producePair(dataTypePair.getDataTypeClass(), st(() -> ReadInputRegistersModbusField.of("readinputregisters:1")), new ReadInputRegistersResponse(Unpooled.wrappedBuffer(cutRegister(mapDataTypePairForRegister(dataTypePair).getByteRepresentation())))),
+                producePair(st(() -> CoilModbusField.of("coil:1")), new WriteMultipleCoilsResponse(1, 3), mapDataTypePairForCoil(dataTypePair).getValue(), mapDataTypePairForCoil(dataTypePair).getValue(), mapDataTypePairForCoil(dataTypePair).getValue()),
+                producePair(st(() -> RegisterModbusField.of("register:1")), new WriteMultipleRegistersResponse(1, 3), mapDataTypePairForRegister(dataTypePair).getValue(), mapDataTypePairForRegister(dataTypePair).getValue(), mapDataTypePairForRegister(dataTypePair).getValue()),
+                producePair(st(() -> RegisterModbusField.of("register:1")), new WriteSingleRegisterResponse(1, cutRegister(mapDataTypePairForRegister(dataTypePair).getByteRepresentation())[0]), mapDataTypePairForRegister(dataTypePair).getValue())
             ))
             .flatMap(stream -> stream)
             .map(pair -> new Object[]{pair.left.getRequest().getRequestItem().orElseThrow(IllegalStateException::new).getDatatype().getSimpleName(), pair.left, pair.left.getResponseFuture(), pair.left.getRequest().getClass().getSimpleName(), pair.right, pair.right.getModbusPdu().getClass().getSimpleName()}).collect(Collectors.toList());
     }
 
     @FunctionalInterface
-    public interface AddressSupplier<T> {
-        T getAddress() throws PlcInvalidAddressException;
+    public interface FieldSupplier<T> {
+        T getField() throws PlcInvalidFieldException;
     }
 
-    public static <T> T st(AddressSupplier<T> supplier) {
+    public static <T> T st(FieldSupplier<T> supplier) {
         try {
-            return supplier.getAddress();
-        } catch (PlcInvalidAddressException e) {
+            return supplier.getField();
+        } catch (PlcInvalidFieldException e) {
             throw new RuntimeException(e);
         }
     }
 
-    private static ImmutablePair<PlcRequestContainer<PlcReadRequest, PlcResponse>, ModbusTcpPayload> producePair(Class type, Address address, ModbusPdu modbusPdu) {
+    private static ImmutablePair<PlcRequestContainer<PlcReadRequest, PlcResponse>, ModbusTcpPayload> producePair(Class type, PlcField field, ModbusPdu modbusPdu) {
         return ImmutablePair.of(
             new PlcRequestContainer<>(
                 PlcReadRequest
                     .builder()
-                    .addItem(type, address)
+                    .addItem(type, field)
                     .build(), new CompletableFuture<>()),
             new ModbusTcpPayload((short) 0, (short) 0, modbusPdu)
         );
     }
 
     @SuppressWarnings("unchecked")
-    private static ImmutablePair<PlcRequestContainer<PlcWriteRequest, PlcResponse>, ModbusTcpPayload> producePair(Address address, ModbusPdu modbusPdu, Object... values) {
+    private static ImmutablePair<PlcRequestContainer<PlcWriteRequest, PlcResponse>, ModbusTcpPayload> producePair(PlcField field, ModbusPdu modbusPdu, Object... values) {
         if (values.length == 0) {
             throw new IllegalArgumentException("At least one value ist required");
         }
@@ -162,7 +162,7 @@ public class Plc4XModbusProtocolTest {
                 new PlcRequestContainer<>(
                     PlcWriteRequest
                         .builder()
-                        .addItem(address, values[0])
+                        .addItem(field, values[0])
                         .build(), new CompletableFuture<>()),
                 new ModbusTcpPayload((short) 0, (short) 0, modbusPdu)
             );
@@ -171,7 +171,7 @@ public class Plc4XModbusProtocolTest {
                 new PlcRequestContainer<>(
                     PlcWriteRequest
                         .builder()
-                        .addItem((Class<Object>) values[0].getClass(), address, values)
+                        .addItem((Class<Object>) values[0].getClass(), field, values)
                         .build(), new CompletableFuture<>()),
                 new ModbusTcpPayload((short) 0, (short) 0, modbusPdu)
             );
@@ -367,36 +367,36 @@ public class Plc4XModbusProtocolTest {
         LOGGER.info("ResponseItem {}", responseItem);
         ModbusPdu modbusPdu = modbusTcpPayload.getModbusPdu();
         if (modbusPdu instanceof MaskWriteRegisterResponse) {
-            WriteResponseItem writeResponseItem = (WriteResponseItem) responseItem;
-            assertEquals(ResponseCode.OK, writeResponseItem.getResponseCode());
+            PlcWriteResponseItem writeResponseItem = (PlcWriteResponseItem) responseItem;
+            assertEquals(PlcResponseCode.OK, writeResponseItem.getResponseCode());
         } else if (modbusPdu instanceof ReadCoilsResponse) {
-            ReadResponseItem readResponseItem = (ReadResponseItem) responseItem;
+            PlcReadResponseItem readResponseItem = (PlcReadResponseItem) responseItem;
             Object value = readResponseItem.getValues().get(0);
             defaultAssert(value, Plc4XModbusProtocolTest::mapDataTypePairForCoil);
         } else if (modbusPdu instanceof ReadDiscreteInputsResponse) {
-            ReadResponseItem readResponseItem = (ReadResponseItem) responseItem;
+            PlcReadResponseItem readResponseItem = (PlcReadResponseItem) responseItem;
             Object value = readResponseItem.getValues().get(0);
             defaultAssert(value, Plc4XModbusProtocolTest::mapDataTypePairForCoil);
         } else if (modbusPdu instanceof ReadHoldingRegistersResponse) {
-            ReadResponseItem readResponseItem = (ReadResponseItem) responseItem;
+            PlcReadResponseItem readResponseItem = (PlcReadResponseItem) responseItem;
             Object value = readResponseItem.getValues().get(0);
             defaultAssert(value, Plc4XModbusProtocolTest::mapDataTypePairForRegister);
         } else if (modbusPdu instanceof ReadInputRegistersResponse) {
-            ReadResponseItem readResponseItem = (ReadResponseItem) responseItem;
+            PlcReadResponseItem readResponseItem = (PlcReadResponseItem) responseItem;
             Object value = readResponseItem.getValues().get(0);
             defaultAssert(value, Plc4XModbusProtocolTest::mapDataTypePairForRegister);
         } else if (modbusPdu instanceof WriteMultipleCoilsResponse) {
-            WriteResponseItem writeResponseItem = (WriteResponseItem) responseItem;
-            assertEquals(ResponseCode.OK, writeResponseItem.getResponseCode());
+            PlcWriteResponseItem writeResponseItem = (PlcWriteResponseItem) responseItem;
+            assertEquals(PlcResponseCode.OK, writeResponseItem.getResponseCode());
         } else if (modbusPdu instanceof WriteMultipleRegistersResponse) {
-            WriteResponseItem writeResponseItem = (WriteResponseItem) responseItem;
-            assertEquals(ResponseCode.OK, writeResponseItem.getResponseCode());
+            PlcWriteResponseItem writeResponseItem = (PlcWriteResponseItem) responseItem;
+            assertEquals(PlcResponseCode.OK, writeResponseItem.getResponseCode());
         } else if (modbusPdu instanceof WriteSingleCoilResponse) {
-            WriteResponseItem writeResponseItem = (WriteResponseItem) responseItem;
-            assertEquals(ResponseCode.OK, writeResponseItem.getResponseCode());
+            PlcWriteResponseItem writeResponseItem = (PlcWriteResponseItem) responseItem;
+            assertEquals(PlcResponseCode.OK, writeResponseItem.getResponseCode());
         } else if (modbusPdu instanceof WriteSingleRegisterResponse) {
-            WriteResponseItem writeResponseItem = (WriteResponseItem) responseItem;
-            assertEquals(ResponseCode.OK, writeResponseItem.getResponseCode());
+            PlcWriteResponseItem writeResponseItem = (PlcWriteResponseItem) responseItem;
+            assertEquals(PlcResponseCode.OK, writeResponseItem.getResponseCode());
         }
     }
 
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
index 58e1847..c21bbd8 100644
--- 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
@@ -19,9 +19,9 @@ under the License.
 package org.apache.plc4x.java.isoontcp.netty.model;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.base.messages.RawMessage;
+import org.apache.plc4x.java.base.messages.PlcRawMessage;
 
-public class IsoOnTcpMessage extends RawMessage {
+public class IsoOnTcpMessage extends PlcRawMessage {
 
     public IsoOnTcpMessage(ByteBuf userData) {
         super(userData);
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/events/IsoTPConnectedEvent.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/events/IsoTPConnectedEvent.java
index 71c0e48..96a6d1a 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/events/IsoTPConnectedEvent.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/events/IsoTPConnectedEvent.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.isotp.netty.events;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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;
 
 public class IsoTPConnectedEvent {
 }
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessage.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessage.java
index 858a0fe..13b554f 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessage.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/IsoTPMessage.java
@@ -19,10 +19,10 @@ under the License.
 package org.apache.plc4x.java.isotp.netty.model;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.base.messages.RawMessage;
+import org.apache.plc4x.java.base.messages.PlcRawMessage;
 import org.apache.plc4x.java.isotp.netty.model.tpdus.Tpdu;
 
-public class IsoTPMessage extends RawMessage {
+public class IsoTPMessage extends PlcRawMessage {
 
     private final Tpdu tpdu;
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DataTpdu.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DataTpdu.java
index 6680331..49dab91 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DataTpdu.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/DataTpdu.java
@@ -19,7 +19,7 @@ under the License.
 package org.apache.plc4x.java.isotp.netty.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.api.messages.ProtocolMessage;
+import org.apache.plc4x.java.api.messages.PlcProtocolMessage;
 import org.apache.plc4x.java.isotp.netty.model.params.Parameter;
 import org.apache.plc4x.java.isotp.netty.model.types.TpduCode;
 
@@ -34,7 +34,7 @@ public class DataTpdu extends Tpdu {
         this(eot, tpduRef, parameters, userData, null);
     }
 
-    public DataTpdu(boolean eot, byte tpduRef, List<Parameter> parameters, ByteBuf userData, ProtocolMessage parent) {
+    public DataTpdu(boolean eot, byte tpduRef, List<Parameter> parameters, ByteBuf userData, PlcProtocolMessage parent) {
         super(TpduCode.DATA, parameters, userData, parent);
         this.eot = eot;
         this.tpduRef = tpduRef;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/Tpdu.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/Tpdu.java
index 75d8aa5..af5b116 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/Tpdu.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/isotp/netty/model/tpdus/Tpdu.java
@@ -19,15 +19,15 @@ under the License.
 package org.apache.plc4x.java.isotp.netty.model.tpdus;
 
 import io.netty.buffer.ByteBuf;
-import org.apache.plc4x.java.api.messages.ProtocolMessage;
-import org.apache.plc4x.java.base.messages.RawMessage;
+import org.apache.plc4x.java.api.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 java.util.List;
 import java.util.Optional;
 
-public abstract class Tpdu extends RawMessage {
+public abstract class Tpdu extends PlcRawMessage {
 
     private final TpduCode tpduCode;
     private final List<Parameter> parameters;
@@ -36,7 +36,7 @@ public abstract class Tpdu extends RawMessage {
         this(tpduCode, parameters, userData, null);
     }
 
-    public Tpdu(TpduCode tpduCode, List<Parameter> parameters, ByteBuf userData, ProtocolMessage parent) {
+    public Tpdu(TpduCode tpduCode, List<Parameter> parameters, ByteBuf userData, PlcProtocolMessage parent) {
         super(userData, parent);
         this.tpduCode = tpduCode;
         this.parameters = parameters;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/connection/S7PlcConnection.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/connection/S7PlcConnection.java
index f1474b3..13ff259 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/connection/S7PlcConnection.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/connection/S7PlcConnection.java
@@ -25,12 +25,12 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 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.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.base.connection.AbstractPlcConnection;
 import org.apache.plc4x.java.base.connection.ChannelFactory;
 import org.apache.plc4x.java.base.connection.TcpSocketChannelFactory;
@@ -43,9 +43,9 @@ 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.s7.model.S7Address;
-import org.apache.plc4x.java.s7.model.S7BitAddress;
-import org.apache.plc4x.java.s7.model.S7DataBlockAddress;
+import org.apache.plc4x.java.s7.model.S7BitField;
+import org.apache.plc4x.java.s7.model.S7DataBlockField;
+import org.apache.plc4x.java.s7.model.S7Field;
 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;
@@ -241,17 +241,17 @@ public class S7PlcConnection extends AbstractPlcConnection implements PlcReader,
     }
 
     @Override
-    public Address parseAddress(String addressString) throws PlcInvalidAddressException {
-        if(S7DataBlockAddress.matches(addressString)) {
-            return S7DataBlockAddress.of(addressString);
+    public PlcField prepareField(String fieldString) throws PlcInvalidFieldException {
+        if(S7DataBlockField.matches(fieldString)) {
+            return S7DataBlockField.of(fieldString);
         }
-        if(S7BitAddress.matches(addressString)) {
-            return S7BitAddress.of(addressString);
+        if(S7BitField.matches(fieldString)) {
+            return S7BitField.of(fieldString);
         }
-        if(S7Address.matches(addressString)) {
-            return S7Address.of(addressString);
+        if(S7Field.matches(fieldString)) {
+            return S7Field.of(fieldString);
         }
-        throw new PlcInvalidAddressException(addressString);
+        throw new PlcInvalidFieldException(fieldString);
     }
 
     @Override
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7BitAddress.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7BitField.java
similarity index 76%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7BitAddress.java
rename to plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7BitField.java
index 19883e6..27a9d5e 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7BitAddress.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7BitField.java
@@ -18,13 +18,13 @@ under the License.
 */
 package org.apache.plc4x.java.s7.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class S7BitAddress extends S7Address {
+public class S7BitField extends S7Field {
 
     private static final Pattern ADDRESS_PATTERN =
         Pattern.compile("^(?<memoryArea>.*?)/(?<byteOffset>\\d{1,4})/(?<bitOffset>\\d)");
@@ -33,20 +33,20 @@ public class S7BitAddress extends S7Address {
         return ADDRESS_PATTERN.matcher(addressString).matches();
     }
 
-    public static S7BitAddress of(String addressString) throws PlcInvalidAddressException {
-        Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
+    public static S7BitField of(String fieldString) throws PlcInvalidFieldException {
+        Matcher matcher = ADDRESS_PATTERN.matcher(fieldString);
         if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(addressString, ADDRESS_PATTERN);
+            throw new PlcInvalidFieldException(fieldString, ADDRESS_PATTERN);
         }
         MemoryArea memoryArea = MemoryArea.valueOf(matcher.group("memoryArea"));
         short byteOffset = Short.parseShort(matcher.group("byteOffset"));
         byte bitOffset = Byte.valueOf(matcher.group("bitOffset"));
-        return new S7BitAddress(memoryArea, byteOffset, bitOffset);
+        return new S7BitField(memoryArea, byteOffset, bitOffset);
     }
 
     private final byte bitOffset;
 
-    public S7BitAddress(MemoryArea memoryArea, short byteOffset, byte bitOffset) {
+    public S7BitField(MemoryArea memoryArea, short byteOffset, byte bitOffset) {
         super(memoryArea, byteOffset);
         this.bitOffset = bitOffset;
     }
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7DataBlockAddress.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7DataBlockField.java
similarity index 69%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7DataBlockAddress.java
rename to plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7DataBlockField.java
index 0494cf9..12526ab 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7DataBlockAddress.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7DataBlockField.java
@@ -18,34 +18,34 @@ under the License.
 */
 package org.apache.plc4x.java.s7.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class S7DataBlockAddress extends S7Address {
+public class S7DataBlockField extends S7Field {
 
     private static final Pattern ADDRESS_PATTERN =
         Pattern.compile("^DATA_BLOCKS/(?<blockNumber>\\d{1,4})/(?<byteOffset>\\d{1,4})");
 
-    public static boolean matches(String addressString) {
-        return ADDRESS_PATTERN.matcher(addressString).matches();
+    public static boolean matches(String fieldString) {
+        return ADDRESS_PATTERN.matcher(fieldString).matches();
     }
 
-    public static S7DataBlockAddress of(String addressString) throws PlcInvalidAddressException {
-        Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
+    public static S7DataBlockField of(String fieldString) throws PlcInvalidFieldException {
+        Matcher matcher = ADDRESS_PATTERN.matcher(fieldString);
         if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(addressString, ADDRESS_PATTERN);
+            throw new PlcInvalidFieldException(fieldString, ADDRESS_PATTERN);
         }
         int datablockNumber = Integer.parseInt(matcher.group("blockNumber"));
         int datablockByteOffset = Integer.parseInt(matcher.group("byteOffset"));
-        return new S7DataBlockAddress((short) datablockNumber, (short) datablockByteOffset);
+        return new S7DataBlockField((short) datablockNumber, (short) datablockByteOffset);
     }
 
     private final short dataBlockNumber;
 
-    public S7DataBlockAddress(short dataBlockNumber, short byteOffset) {
+    public S7DataBlockField(short dataBlockNumber, short byteOffset) {
         super(MemoryArea.DATA_BLOCKS, byteOffset);
         this.dataBlockNumber = dataBlockNumber;
     }
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7Address.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7Field.java
similarity index 71%
rename from plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7Address.java
rename to plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7Field.java
index 623a362..620c057 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7Address.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/model/S7Field.java
@@ -18,36 +18,36 @@ under the License.
 */
 package org.apache.plc4x.java.s7.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class S7Address implements Address {
+public class S7Field implements PlcField {
 
     private static final Pattern ADDRESS_PATTERN =
         Pattern.compile("^(?<memoryArea>.*?)/(?<byteOffset>\\d{1,4})?");
 
-    public static boolean matches(String addressString) {
-        return ADDRESS_PATTERN.matcher(addressString).matches();
+    public static boolean matches(String fieldString) {
+        return ADDRESS_PATTERN.matcher(fieldString).matches();
     }
 
-    public static S7Address of(String addressString) throws PlcInvalidAddressException {
-        Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
+    public static S7Field of(String fieldString) throws PlcInvalidFieldException {
+        Matcher matcher = ADDRESS_PATTERN.matcher(fieldString);
         if (!matcher.matches()) {
-            throw new PlcInvalidAddressException(addressString, ADDRESS_PATTERN);
+            throw new PlcInvalidFieldException(fieldString, ADDRESS_PATTERN);
         }
         MemoryArea memoryArea = MemoryArea.valueOf(matcher.group("memoryArea"));
         short byteOffset = Short.parseShort(matcher.group("byteOffset"));
-        return new S7Address(memoryArea, byteOffset);
+        return new S7Field(memoryArea, byteOffset);
     }
 
     private final MemoryArea memoryArea;
     private final short byteOffset;
 
-    public S7Address(MemoryArea memoryArea, short byteOffset) {
+    public S7Field(MemoryArea memoryArea, short byteOffset) {
         this.memoryArea = memoryArea;
         this.byteOffset = byteOffset;
     }
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java
index cc2b0f0..b4a3a8b 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/Plc4XS7Protocol.java
@@ -21,22 +21,22 @@ package org.apache.plc4x.java.s7.netty;
 import io.netty.channel.ChannelHandlerContext;
 import org.apache.plc4x.java.api.exceptions.*;
 import org.apache.plc4x.java.api.messages.*;
-import org.apache.plc4x.java.api.messages.items.ReadRequestItem;
-import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
-import org.apache.plc4x.java.api.messages.items.WriteRequestItem;
-import org.apache.plc4x.java.api.messages.items.WriteResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteRequestItem;
+import org.apache.plc4x.java.api.messages.items.PlcWriteResponseItem;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
-import org.apache.plc4x.java.api.model.Address;
-import org.apache.plc4x.java.api.types.ResponseCode;
+import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.java.base.PlcMessageToMessageCodec;
 import org.apache.plc4x.java.base.events.ConnectedEvent;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
-import org.apache.plc4x.java.s7.model.S7Address;
-import org.apache.plc4x.java.s7.model.S7BitAddress;
-import org.apache.plc4x.java.s7.model.S7DataBlockAddress;
+import org.apache.plc4x.java.s7.model.S7DataBlockField;
+import org.apache.plc4x.java.s7.model.S7Field;
+import org.apache.plc4x.java.s7.model.S7BitField;
 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;
@@ -168,7 +168,7 @@ public class Plc4XS7Protocol extends PlcMessageToMessageCodec<S7Message, PlcRequ
         List<VarPayloadItem> payloadItems = new LinkedList<>();
 
         PlcWriteRequest writeRequest = (PlcWriteRequest) msg.getRequest();
-        for (WriteRequestItem requestItem : writeRequest.getRequestItems()) {
+        for (PlcWriteRequestItem requestItem : writeRequest.getRequestItems()) {
             // Try to get the correct S7 transport size for the given data type.
             // (Map PLC4X data type to S7 data type)
             TransportSize transportSize = encodeTransportSize(requestItem.getDatatype());
@@ -176,9 +176,9 @@ public class Plc4XS7Protocol extends PlcMessageToMessageCodec<S7Message, PlcRequ
                 throw new PlcException("Unknown transport size for datatype " + requestItem.getDatatype());
             }
 
-            // Depending on the address type, generate the corresponding type of request item.
+            // Depending on the field type, generate the corresponding type of request item.
             VarParameterItem varParameterItem = encodeVarParameterItem(
-                requestItem.getAddress(), transportSize, requestItem.getValues().size());
+                requestItem.getField(), transportSize, requestItem.getValues().size());
             parameterItems.add(varParameterItem);
 
             DataTransportSize dataTransportSize = encodeDataTransportSize(requestItem.getDatatype());
@@ -205,7 +205,7 @@ public class Plc4XS7Protocol extends PlcMessageToMessageCodec<S7Message, PlcRequ
     }
 
     private void encodeParameterItems(List<VarParameterItem> parameterItems, PlcReadRequest readRequest) throws PlcException {
-        for (ReadRequestItem requestItem : readRequest.getRequestItems()) {
+        for (PlcReadRequestItem requestItem : readRequest.getRequestItems()) {
             // Try to get the correct S7 transport size for the given data type.
             // (Map PLC4X data type to S7 data type)
             TransportSize transportSize = encodeTransportSize(requestItem.getDatatype());
@@ -213,35 +213,35 @@ public class Plc4XS7Protocol extends PlcMessageToMessageCodec<S7Message, PlcRequ
                 throw new PlcException("Unknown transport size for datatype " + requestItem.getDatatype());
             }
 
-            // Depending on the address type, generate the corresponding type of request item.
-            VarParameterItem varParameterItem = encodeVarParameterItem(requestItem.getAddress(), transportSize, requestItem.getSize());
+            // Depending on the field type, generate the corresponding type of request item.
+            VarParameterItem varParameterItem = encodeVarParameterItem(requestItem.getField(), transportSize, requestItem.getSize());
             parameterItems.add(varParameterItem);
         }
     }
 
-    private VarParameterItem encodeVarParameterItem(Address address, TransportSize transportSize, int size) throws PlcProtocolException {
-        // Depending on the address type, generate the corresponding type of request item.
-        if (!(address instanceof S7Address)) {
-            throw new PlcProtocolException("Can only use S7Address types on S7 connection");
+    private VarParameterItem encodeVarParameterItem(PlcField field, TransportSize transportSize, int size) throws PlcProtocolException {
+        // Depending on the field type, generate the corresponding type of request item.
+        if (!(field instanceof S7Field)) {
+            throw new PlcProtocolException("Can only use S7Field types on S7 connection");
         }
-        S7Address s7Address = (S7Address) address;
-        if (s7Address instanceof S7DataBlockAddress) {
-            S7DataBlockAddress s7DataBlockAddress = (S7DataBlockAddress) s7Address;
+        S7Field s7Field = (S7Field) field;
+        if (s7Field instanceof S7DataBlockField) {
+            S7DataBlockField s7DataBlockField = (S7DataBlockField) s7Field;
             return new S7AnyVarParameterItem(
-                SpecificationType.VARIABLE_SPECIFICATION, s7Address.getMemoryArea(),
+                SpecificationType.VARIABLE_SPECIFICATION, s7Field.getMemoryArea(),
                 transportSize, (short) size,
-                s7DataBlockAddress.getDataBlockNumber(), s7DataBlockAddress.getByteOffset(), (byte) 0);
-        } else if (s7Address instanceof S7BitAddress) {
-            S7BitAddress s7BitAddress = (S7BitAddress) s7Address;
+                s7DataBlockField.getDataBlockNumber(), s7DataBlockField.getByteOffset(), (byte) 0);
+        } else if (s7Field instanceof S7BitField) {
+            S7BitField s7BitField = (S7BitField) s7Field;
             return new S7AnyVarParameterItem(
-                SpecificationType.VARIABLE_SPECIFICATION, s7Address.getMemoryArea(),
+                SpecificationType.VARIABLE_SPECIFICATION, s7Field.getMemoryArea(),
                 transportSize, (short) size, (short) 0,
-                s7Address.getByteOffset(), s7BitAddress.getBitOffset());
+                s7Field.getByteOffset(), s7BitField.getBitOffset());
         } else {
             return new S7AnyVarParameterItem(
-                SpecificationType.VARIABLE_SPECIFICATION, s7Address.getMemoryArea(),
+                SpecificationType.VARIABLE_SPECIFICATION, s7Field.getMemoryArea(),
                 transportSize, (short) size, (short) 0,
-                s7Address.getByteOffset(), (byte) 0);
+                s7Field.getByteOffset(), (byte) 0);
         }
     }
 
@@ -324,7 +324,7 @@ public class Plc4XS7Protocol extends PlcMessageToMessageCodec<S7Message, PlcRequ
         PlcResponse response;
         PlcReadRequest plcReadRequest = (PlcReadRequest) requestContainer.getRequest();
 
-        List<ReadResponseItem<?>> responseItems = new LinkedList<>();
+        List<PlcReadResponseItem<?>> responseItems = new LinkedList<>();
         VarPayload payload = responseMessage.getPayload(VarPayload.class)
             .orElseThrow(() -> new PlcProtocolException("No VarPayload supplied"));
 
@@ -342,21 +342,21 @@ public class Plc4XS7Protocol extends PlcMessageToMessageCodec<S7Message, PlcRequ
             VarPayloadItem payloadItem = payloadItems.get(i);
 
             // Get the request item for this payload item
-            ReadRequestItem requestItem = plcReadRequest.getRequestItems().get(i);
+            PlcReadRequestItem requestItem = plcReadRequest.getRequestItems().get(i);
 
-            ResponseCode responseCode = decodeResponseCode(payloadItem.getReturnCode());
+            PlcResponseCode responseCode = decodeResponseCode(payloadItem.getReturnCode());
 
-            ReadResponseItem responseItem;
+            PlcReadResponseItem responseItem;
             // Something went wrong.
-            if (responseCode != ResponseCode.OK) {
-                responseItem = new ReadResponseItem<>(requestItem, responseCode);
+            if (responseCode != PlcResponseCode.OK) {
+                responseItem = new PlcReadResponseItem<>(requestItem, responseCode);
             }
             // All Ok.
             else {
                 byte[] data = payloadItem.getData();
                 Class<?> datatype = requestItem.getDatatype();
                 List<?> value = decodeData(datatype, data);
-                responseItem = new ReadResponseItem(requestItem, responseCode, value);
+                responseItem = new PlcReadResponseItem(requestItem, responseCode, value);
             }
             responseItems.add(responseItem);
         }
@@ -372,7 +372,7 @@ public class Plc4XS7Protocol extends PlcMessageToMessageCodec<S7Message, PlcRequ
     private PlcResponse decodeWriteResponse(S7ResponseMessage responseMessage, PlcRequestContainer requestContainer) throws PlcProtocolException {
         PlcResponse response;
         PlcWriteRequest plcWriteRequest = (PlcWriteRequest) requestContainer.getRequest();
-        List<WriteResponseItem<?>> responseItems = new LinkedList<>();
+        List<PlcWriteResponseItem<?>> responseItems = new LinkedList<>();
         VarPayload payload = responseMessage.getPayload(VarPayload.class)
             .orElseThrow(() -> new PlcProtocolException("No VarPayload supplied"));
         // If the numbers of items don't match, we're in big trouble as the only
@@ -388,12 +388,12 @@ public class Plc4XS7Protocol extends PlcMessageToMessageCodec<S7Message, PlcRequ
             VarPayloadItem payloadItem = payloadItems.get(i);
 
             // Get the request item for this payload item
-            WriteRequestItem requestItem = plcWriteRequest.getRequestItems().get(i);
+            PlcWriteRequestItem requestItem = plcWriteRequest.getRequestItems().get(i);
 
             // A write response contains only the return code for every item.
-            ResponseCode responseCode = decodeResponseCode(payloadItem.getReturnCode());
+            PlcResponseCode responseCode = decodeResponseCode(payloadItem.getReturnCode());
 
-            WriteResponseItem responseItem = new WriteResponseItem(requestItem, responseCode);
+            PlcWriteResponseItem responseItem = new PlcWriteResponseItem(requestItem, responseCode);
             responseItems.add(responseItem);
         }
 
@@ -405,19 +405,19 @@ public class Plc4XS7Protocol extends PlcMessageToMessageCodec<S7Message, PlcRequ
         return response;
     }
 
-    private ResponseCode decodeResponseCode(DataTransportErrorCode dataTransportErrorCode) {
+    private PlcResponseCode decodeResponseCode(DataTransportErrorCode dataTransportErrorCode) {
         if (dataTransportErrorCode == null) {
-            return ResponseCode.INTERNAL_ERROR;
+            return PlcResponseCode.INTERNAL_ERROR;
         }
         switch (dataTransportErrorCode) {
             case OK:
-                return ResponseCode.OK;
+                return PlcResponseCode.OK;
             case NOT_FOUND:
-                return ResponseCode.NOT_FOUND;
+                return PlcResponseCode.NOT_FOUND;
             case INVALID_ADDRESS:
-                return ResponseCode.INVALID_ADDRESS;
+                return PlcResponseCode.INVALID_ADDRESS;
             default:
-                return ResponseCode.INTERNAL_ERROR;
+                return PlcResponseCode.INTERNAL_ERROR;
         }
     }
 
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 0195633..40e212c 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
@@ -320,7 +320,7 @@ public class S7Protocol extends ChannelDuplexHandler {
 
     private void encodeParameterReadWriteVar(ByteBuf buf, VarParameter s7Parameter) {
         List<VarParameterItem> items = s7Parameter.getItems();
-        // ReadRequestItem count (Read one variable at a time)
+        // PlcReadRequestItem count (Read one variable at a time)
         buf.writeByte((byte) items.size());
         for (VarParameterItem item : items) {
             VariableAddressingMode addressMode = item.getAddressingMode();
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/events/S7ConnectedEvent.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/events/S7ConnectedEvent.java
index 091e433..254dbee 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/events/S7ConnectedEvent.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/events/S7ConnectedEvent.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.s7.netty.events;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.s7.netty.events;
 
 public class S7ConnectedEvent {
 }
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/events/S7IdentifiedEvent.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/events/S7IdentifiedEvent.java
index 60b1a2b..8ec15eb 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/events/S7IdentifiedEvent.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/events/S7IdentifiedEvent.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.s7.netty.events;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.s7.netty.events;
 
 public class S7IdentifiedEvent {
 }
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/messages/S7Message.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/messages/S7Message.java
index af39df6..75a7df9 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/messages/S7Message.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/messages/S7Message.java
@@ -18,8 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.s7.netty.model.messages;
 
-import org.apache.plc4x.java.api.messages.ProtocolMessage;
-import org.apache.plc4x.java.base.messages.RawMessage;
+import org.apache.plc4x.java.api.messages.PlcProtocolMessage;
+import org.apache.plc4x.java.base.messages.PlcRawMessage;
 import org.apache.plc4x.java.s7.netty.model.params.S7Parameter;
 import org.apache.plc4x.java.s7.netty.model.payloads.S7Payload;
 import org.apache.plc4x.java.s7.netty.model.types.MessageType;
@@ -37,7 +37,7 @@ import java.util.Optional;
  *     <li>payloads - possible payload (for writes)</li>
  * </ul>
  */
-public abstract class S7Message extends RawMessage {
+public abstract class S7Message extends PlcRawMessage {
 
     private final MessageType messageType;
     private final short tpduReference;
@@ -50,7 +50,7 @@ public abstract class S7Message extends RawMessage {
     }
 
     protected S7Message(MessageType messageType, short tpduReference, List<S7Parameter> parameters,
-                        List<S7Payload> payloads, ProtocolMessage parent) {
+                        List<S7Payload> payloads, PlcProtocolMessage parent) {
         super(null, parent);
         this.messageType = messageType;
         this.tpduReference = tpduReference;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/messages/S7RequestMessage.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/messages/S7RequestMessage.java
index b3f567c..5d03568 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/messages/S7RequestMessage.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/messages/S7RequestMessage.java
@@ -18,7 +18,7 @@ under the License.
 */
 package org.apache.plc4x.java.s7.netty.model.messages;
 
-import org.apache.plc4x.java.api.messages.ProtocolMessage;
+import org.apache.plc4x.java.api.messages.PlcProtocolMessage;
 import org.apache.plc4x.java.s7.netty.model.params.S7Parameter;
 import org.apache.plc4x.java.s7.netty.model.payloads.S7Payload;
 import org.apache.plc4x.java.s7.netty.model.types.MessageType;
@@ -35,7 +35,7 @@ public class S7RequestMessage extends S7Message {
     private boolean acknowledged;
 
     public S7RequestMessage(MessageType messageType, short tpduReference, List<S7Parameter> s7Parameters,
-                            List<S7Payload> s7Payloads, ProtocolMessage parent) {
+                            List<S7Payload> s7Payloads, PlcProtocolMessage parent) {
         super(messageType, tpduReference, s7Parameters, s7Payloads, parent);
         acknowledged = false;
     }
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/messages/SetupCommunicationRequestMessage.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/messages/SetupCommunicationRequestMessage.java
index 0171422..244ac87 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/messages/SetupCommunicationRequestMessage.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/messages/SetupCommunicationRequestMessage.java
@@ -18,7 +18,7 @@ under the License.
 */
 package org.apache.plc4x.java.s7.netty.model.messages;
 
-import org.apache.plc4x.java.api.messages.ProtocolMessage;
+import org.apache.plc4x.java.api.messages.PlcProtocolMessage;
 import org.apache.plc4x.java.s7.netty.model.params.SetupCommunicationParameter;
 import org.apache.plc4x.java.s7.netty.model.types.MessageType;
 
@@ -27,7 +27,7 @@ import java.util.Collections;
 public class SetupCommunicationRequestMessage extends S7RequestMessage {
 
     public SetupCommunicationRequestMessage(short tpduReference, short maxAmqCaller, short maxAmqCallee,
-                                            short pduLength, ProtocolMessage parent) {
+                                            short pduLength, PlcProtocolMessage parent) {
         super(MessageType.JOB, tpduReference, Collections.singletonList(
             new SetupCommunicationParameter(maxAmqCaller, maxAmqCallee, pduLength)), Collections.emptyList(), parent);
     }
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/types/SslId.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/types/SslId.java
index 382b354..3464b9a 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/types/SslId.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/types/SslId.java
@@ -18,7 +18,6 @@ under the License.
 */
 package org.apache.plc4x.java.s7.netty.model.types;
 
-import org.apache.plc4x.java.s7.types.S7DataType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/strategies/DefaultS7MessageProcessor.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/strategies/DefaultS7MessageProcessor.java
index 48c5fa2..e6eb4ad 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/strategies/DefaultS7MessageProcessor.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/strategies/DefaultS7MessageProcessor.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.s7.netty.strategies;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,11 +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.s7.netty.strategies;
 
 import org.apache.commons.lang3.NotImplementedException;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
-import org.apache.plc4x.java.api.messages.ProtocolMessage;
+import org.apache.plc4x.java.api.messages.PlcProtocolMessage;
 import org.apache.plc4x.java.s7.netty.model.messages.S7RequestMessage;
 import org.apache.plc4x.java.s7.netty.model.messages.S7ResponseMessage;
 import org.apache.plc4x.java.s7.netty.model.params.S7Parameter;
@@ -355,7 +355,7 @@ public class DefaultS7MessageProcessor implements S7MessageProcessor {
         return null;
     }
 
-    static class S7CompositeRequestMessage implements ProtocolMessage {
+    static class S7CompositeRequestMessage implements PlcProtocolMessage {
 
         private S7RequestMessage originalRequest;
         private Collection<S7RequestMessage> requestMessages;
@@ -368,7 +368,7 @@ public class DefaultS7MessageProcessor implements S7MessageProcessor {
         }
 
         @Override
-        public ProtocolMessage getParent() {
+        public PlcProtocolMessage getParent() {
             return originalRequest;
         }
 
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/strategies/S7MessageProcessor.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/strategies/S7MessageProcessor.java
index bc82e67..cd307b6 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/strategies/S7MessageProcessor.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/strategies/S7MessageProcessor.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.s7.netty.strategies;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.s7.netty.strategies;
 
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.s7.netty.model.messages.S7RequestMessage;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7RequestSizeCalculator.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7RequestSizeCalculator.java
index 1e9792b..bfebfd6 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7RequestSizeCalculator.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7RequestSizeCalculator.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.s7.netty.util;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.s7.netty.util;
 
 import org.apache.commons.lang3.NotImplementedException;
 import org.apache.plc4x.java.s7.netty.model.messages.S7RequestMessage;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7ResponseSizeEstimator.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7ResponseSizeEstimator.java
index 179018a..b2bdf6b 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7ResponseSizeEstimator.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7ResponseSizeEstimator.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.s7.netty.util;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.s7.netty.util;
 
 import org.apache.commons.lang3.NotImplementedException;
 import org.apache.plc4x.java.s7.netty.model.messages.S7RequestMessage;
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7SizeHelper.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7SizeHelper.java
index afd4951..3908c44 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7SizeHelper.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7SizeHelper.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.s7.netty.util;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.s7.netty.util;
 
 import org.apache.plc4x.java.s7.netty.model.params.CpuServicesRequestParameter;
 import org.apache.plc4x.java.s7.netty.model.params.S7Parameter;
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 3980c4c..2d7782d 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
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.s7.utils;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.s7.utils;
 
 import org.apache.plc4x.java.isotp.netty.model.types.DeviceGroup;
 
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocolTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocolTest.java
index ea3e719..a79df5f 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocolTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/IsoTPProtocolTest.java
@@ -75,7 +75,7 @@ public class IsoTPProtocolTest {
 
         isoTPProtocol.encode(ctx, tpdu, out);
 
-        assertThat("RawMessage not decoded", out, hasSize(1));
+        assertThat("PlcRawMessage not decoded", out, hasSize(1));
 
         ByteBuf userData = ((IsoOnTcpMessage) out.get(0)).getUserData();
 
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/ParameterTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/ParameterTests.java
index ff6dcc5..5161593 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/ParameterTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/ParameterTests.java
@@ -32,7 +32,7 @@ public class ParameterTests {
 
     @Test
     @Category(FastTests.class)
-    public void checksumPartameter() {
+    public void checksumParameter() {
         ChecksumParameter checksumParameter = new ChecksumParameter((byte) 1);
 
         assertThat("Checksum incorrect", checksumParameter.getChecksum(), equalTo((byte) 1));
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameterTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameterTests.java
index 705010c..46498d1 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameterTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/params/TsapParameterTests.java
@@ -39,7 +39,7 @@ public class TsapParameterTests {
 
     @Test
     @Category(FastTests.class)
-    public void calledPartameter() {
+    public void calledParameter() {
         short calledTsapId = 0x1234;
         tsapParameter = new CalledTsapParameter(calledTsapId);
 
@@ -49,7 +49,7 @@ public class TsapParameterTests {
 
     @Test
     @Category(FastTests.class)
-    public void callingPartameter() {
+    public void callingParameter() {
         short callingTsapId = 0x4321;
         tsapParameter = new CallingTsapParameter(callingTsapId);
 
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/types/IsotpTypeTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/types/IsotpTypeTests.java
index d2fe7f0..73676b1 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/types/IsotpTypeTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/isotp/netty/model/types/IsotpTypeTests.java
@@ -65,7 +65,7 @@ public class IsotpTypeTests {
 
     @Test
     @Category(FastTests.class)
-    public void diosconectReasonUnknown() {
+    public void disconnectReasonUnknown() {
         DisconnectReason disconnectReason = DisconnectReason.valueOf((byte) 4);
 
         assertThat(disconnectReason, nullValue());
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/PcapGenerator.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/PcapGenerator.java
index cc98209..7c4a4e2 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/PcapGenerator.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/PcapGenerator.java
@@ -142,7 +142,7 @@ public class PcapGenerator {
         (byte) 0x02, (byte) 0xF0, (byte) 0x80,
         // S7 packet
         // Job header
-        (byte) 0x32, (byte) 0x01 /* RawMessage Type [102] */,
+        (byte) 0x32, (byte) 0x01 /* Raw Message Type [102] */,
         //  Timezone
         (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
         (byte) 0x00, (byte) 0x0E, (byte) 0x00, (byte) 0x00,
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcReaderSample.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcReaderSample.java
index 660d6af..50966f0 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcReaderSample.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcReaderSample.java
@@ -23,7 +23,7 @@ import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,8 +50,8 @@ public class S7PlcReaderSample {
             if (reader.isPresent()) {
                 PlcReader plcReader = reader.get();
 
-                // Parse an address string.
-                Address inputs = plcConnection.parseAddress(args[1]);
+                // Parse an field string.
+                PlcField inputs = plcConnection.prepareField(args[1]);
 
                 //////////////////////////////////////////////////////////
                 // Read synchronously ...
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
index 2650274..f6dbdfd 100644
--- 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
@@ -23,7 +23,7 @@ import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -38,9 +38,8 @@ public class S7PlcScanner {
      * Example code do demonstrate using the S7 Plc Driver.
      *
      * @param args ignored.
-     * @throws Exception something went wrong.
      */
-    public static void main(String[] args) throws Exception {
+    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")) {
@@ -56,14 +55,14 @@ public class S7PlcScanner {
                     System.out.println("------------------------------------------");
                     for (int i = 0; i < 8959; i++) {
                         try {
-                            Address address;
+                            PlcField field;
                             if (memoryArea == MemoryArea.DATA_BLOCKS) {
-                                address = plcConnection.parseAddress("DATA_BLOCKS/1/" + i);
+                                field = plcConnection.prepareField("DATA_BLOCKS/1/" + i);
                             } else {
-                                address = plcConnection.parseAddress(memoryArea.name() + "/" + i);
+                                field = plcConnection.prepareField(memoryArea.name() + "/" + i);
                             }
                             TypeSafePlcReadResponse<Byte> plcReadResponse = plcReader.read(
-                                new TypeSafePlcReadRequest<>(Byte.class, address)).get();
+                                new TypeSafePlcReadRequest<>(Byte.class, field)).get();
                             Byte data = plcReadResponse.getResponseItem()
                                 .orElseThrow(() -> new IllegalStateException("No response available"))
                                 .getValues().get(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
index 5ca77b6..9065704 100644
--- 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
@@ -27,7 +27,7 @@ import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadResponse;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -39,9 +39,8 @@ public class S7PlcTestConsole {
      * Example code do demonstrate using the S7 Plc Driver.
      *
      * @param args ignored.
-     * @throws Exception something went wrong.
      */
-    public static void main(String[] args) throws Exception {
+    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")) {
@@ -56,8 +55,8 @@ public class S7PlcTestConsole {
                 String line;
                 while (!"exit".equalsIgnoreCase(line = scanner.next())) {
                     try {
-                        Address address = plcConnection.parseAddress(line);
-                        TypeSafePlcReadResponse<Byte> plcReadResponse = plcReader.read(new TypeSafePlcReadRequest<>(Byte.class, address)).get();
+                        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();
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
index 339cb19..9c36b75 100644
--- 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
@@ -23,7 +23,7 @@ import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteResponse;
-import org.apache.plc4x.java.api.model.Address;
+import org.apache.plc4x.java.api.model.PlcField;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -37,9 +37,8 @@ public class S7PlcWriterSample {
      * Example code do demonstrate using the S7 Plc Driver.
      *
      * @param args ignored.
-     * @throws Exception something went wrong.
      */
-    public static void main(String[] args) throws Exception {
+    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")) {
@@ -49,7 +48,7 @@ public class S7PlcWriterSample {
             // Check if this connection support reading of data.
             if (writer.isPresent()) {
                 PlcWriter plcWriter = writer.get();
-                Address inputs = plcConnection.parseAddress("DATA_BLOCKS/1/2");
+                PlcField inputs = plcConnection.prepareField("DATA_BLOCKS/1/2");
                 //////////////////////////////////////////////////////////
                 // Write synchronously ...
                 // NOTICE: the ".get()" immediately lets this thread pause till
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java
index 5939648..883001b 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/connection/S7PlcConnectionTests.java
@@ -20,11 +20,11 @@ under the License.
 package org.apache.plc4x.java.s7.connection;
 
 import org.apache.plc4x.java.api.exceptions.PlcException;
-import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.isotp.netty.model.types.TpduSize;
-import org.apache.plc4x.java.s7.model.S7Address;
-import org.apache.plc4x.java.s7.model.S7BitAddress;
-import org.apache.plc4x.java.s7.model.S7DataBlockAddress;
+import org.apache.plc4x.java.s7.model.S7DataBlockField;
+import org.apache.plc4x.java.s7.model.S7Field;
+import org.apache.plc4x.java.s7.model.S7BitField;
 import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
 import org.junit.After;
 import org.junit.Before;
@@ -34,7 +34,6 @@ import java.net.InetAddress;
 
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.hamcrest.core.IsInstanceOf.instanceOf;
-import static org.hamcrest.core.StringStartsWith.startsWith;
 import static org.hamcrest.core.StringContains.containsString;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
@@ -65,54 +64,54 @@ public class S7PlcConnectionTests {
     }
 
     @Test
-    public void emptyParseAddress() {
+    public void prepareEmptyField() {
         try {
-            s7PlcConnection.parseAddress("");
+            s7PlcConnection.prepareField("");
         }
         catch (PlcException exception) {
-            assertThat(exception, instanceOf(PlcInvalidAddressException.class));
+            assertThat(exception, instanceOf(PlcInvalidFieldException.class));
             assertThat(exception.getMessage(), containsString("invalid") );
         }
     }
 
     @Test
-    public void parseDatablockAddress() {
+    public void prepareDatablockField() {
         try {
-            S7DataBlockAddress address = (S7DataBlockAddress)
-                s7PlcConnection.parseAddress("DATA_BLOCKS/20/100");
+            S7DataBlockField field = (S7DataBlockField)
+                s7PlcConnection.prepareField("DATA_BLOCKS/20/100");
 
-            assertThat("unexpected data block", address.getDataBlockNumber(), equalTo((short) 20) );
-            assertThat("unexpected byte offset", address.getByteOffset(), equalTo((short) 100) );
+            assertThat("unexpected data block", field.getDataBlockNumber(), equalTo((short) 20) );
+            assertThat("unexpected byte offset", field.getByteOffset(), equalTo((short) 100) );
         }
         catch (PlcException exception) {
-            fail("valid data block address");
+            fail("valid data block field");
         }
     }
 
     @Test
-    public void parseAddressAddress() {
+    public void prepareField() {
         try {
-            S7Address address = (S7Address) s7PlcConnection.parseAddress("TIMERS/10");
+            S7Field field = (S7Field) s7PlcConnection.prepareField("TIMERS/10");
 
-            assertThat("unexpected memory area", address.getMemoryArea(), equalTo(MemoryArea.TIMERS) );
-            assertThat("unexpected byte offset", address.getByteOffset(), equalTo((short) 10) );
+            assertThat("unexpected memory area", field.getMemoryArea(), equalTo(MemoryArea.TIMERS) );
+            assertThat("unexpected byte offset", field.getByteOffset(), equalTo((short) 10) );
         }
         catch (PlcException exception) {
-            fail("valid timer block address");
+            fail("valid timer block field");
         }
     }
 
     @Test
-    public void parseAddressBitAddress() {
+    public void prepareBitField() {
         try {
-            S7BitAddress address = (S7BitAddress) s7PlcConnection.parseAddress("TIMERS/10/4");
+            S7BitField field = (S7BitField) s7PlcConnection.prepareField("TIMERS/10/4");
 
-            assertThat("unexpected memory area", address.getMemoryArea(), equalTo(MemoryArea.TIMERS) );
-            assertThat("unexpected byte offset", address.getByteOffset(), equalTo((short) 10) );
-            assertThat("unexpected but offset", address.getBitOffset(), equalTo((byte) 4) );
+            assertThat("unexpected memory area", field.getMemoryArea(), equalTo(MemoryArea.TIMERS) );
+            assertThat("unexpected byte offset", field.getByteOffset(), equalTo((short) 10) );
+            assertThat("unexpected but offset", field.getBitOffset(), equalTo((byte) 4) );
         }
         catch (PlcException exception) {
-            fail("valid timer block bit address");
+            fail("valid timer block bit field");
         }
     }
 
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/model/S7AddressTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/model/S7FieldTests.java
similarity index 57%
rename from plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/model/S7AddressTests.java
rename to plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/model/S7FieldTests.java
index c3b9ad3..d7738dd 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/model/S7AddressTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/model/S7FieldTests.java
@@ -27,37 +27,37 @@ import org.junit.experimental.categories.Category;
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertThat;
 
-public class S7AddressTests {
+public class S7FieldTests {
 
     @Test
     @Category(FastTests.class)
-    public void testS7Address() {
+    public void testS7Field() {
         MemoryArea memoryArea = MemoryArea.DATA_BLOCKS;
-        S7Address s7Address = new S7Address(memoryArea, (short) 0x100);
+        S7Field s7Field = new S7Field(memoryArea, (short) 0x100);
 
-        assertThat(s7Address.getMemoryArea(), equalTo(MemoryArea.DATA_BLOCKS));
-        assertThat(s7Address.getByteOffset(), equalTo((short) 0x100));
+        assertThat(s7Field.getMemoryArea(), equalTo(MemoryArea.DATA_BLOCKS));
+        assertThat(s7Field.getByteOffset(), equalTo((short) 0x100));
     }
 
     @Test
     @Category(FastTests.class)
-    public void testS7BitAddress() {
+    public void testS7BitField() {
         MemoryArea memoryArea = MemoryArea.DATA_BLOCKS;
-        S7BitAddress s7Address = new S7BitAddress(memoryArea, (short) 0x50, (byte) 0x4);
+        S7BitField s7Field = new S7BitField(memoryArea, (short) 0x50, (byte) 0x4);
 
-        assertThat(s7Address.getMemoryArea(), equalTo(MemoryArea.DATA_BLOCKS));
-        assertThat(s7Address.getByteOffset(), equalTo((short) 0x50));
-        assertThat(s7Address.getBitOffset(), equalTo((byte) 0x4));
+        assertThat(s7Field.getMemoryArea(), equalTo(MemoryArea.DATA_BLOCKS));
+        assertThat(s7Field.getByteOffset(), equalTo((short) 0x50));
+        assertThat(s7Field.getBitOffset(), equalTo((byte) 0x4));
     }
 
     @Test
     @Category(FastTests.class)
-    public void testS7DatBlockAddress() {
-        S7DataBlockAddress s7Address = new S7DataBlockAddress((short) 1, (short) 0x50);
+    public void testS7DatBlockField() {
+        S7DataBlockField s7Field = new S7DataBlockField((short) 1, (short) 0x50);
 
-        assertThat(s7Address.getMemoryArea(), equalTo(MemoryArea.DATA_BLOCKS));
-        assertThat(s7Address.getDataBlockNumber(), equalTo((short) 1));
-        assertThat(s7Address.getByteOffset(), equalTo((short) 0x50));
+        assertThat(s7Field.getMemoryArea(), equalTo(MemoryArea.DATA_BLOCKS));
+        assertThat(s7Field.getDataBlockNumber(), equalTo((short) 1));
+        assertThat(s7Field.getByteOffset(), equalTo((short) 0x50));
     }
 
 }
\ No newline at end of file
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 4ab29c6..c86152e 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
@@ -25,9 +25,9 @@ import org.apache.plc4x.java.api.messages.specific.TypeSafePlcReadRequest;
 import org.apache.plc4x.java.api.messages.specific.TypeSafePlcWriteRequest;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
 import org.apache.plc4x.java.netty.NettyTestBase;
-import org.apache.plc4x.java.s7.model.S7Address;
-import org.apache.plc4x.java.s7.model.S7BitAddress;
-import org.apache.plc4x.java.s7.model.S7DataBlockAddress;
+import org.apache.plc4x.java.s7.model.S7BitField;
+import org.apache.plc4x.java.s7.model.S7DataBlockField;
+import org.apache.plc4x.java.s7.model.S7Field;
 import org.apache.plc4x.java.s7.netty.model.messages.S7ResponseMessage;
 import org.apache.plc4x.java.s7.netty.model.params.VarParameter;
 import org.apache.plc4x.java.s7.netty.model.payloads.VarPayload;
@@ -82,19 +82,19 @@ public class Plc4XS7ProtocolTest extends NettyTestBase {
     public Class<?> type;
 
     @Parameterized.Parameter(1)
-    public S7Address address;
+    public S7Field field;
 
     @Parameterized.Parameters(name = "{index} Type:{0} {1}")
     public static Collection<Object[]> data() {
         List<Object[]> arguments = new LinkedList<>();
-        // Build the cross product of all variables and address types.
+        // Build the cross product of all variables and field types.
         streamOfPlc4XSupportedDataTypes()
             .forEach(
                 aClass -> Arrays.asList(
-                    mock(S7Address.class),
-                    mock(S7BitAddress.class),
-                    mock(S7DataBlockAddress.class))
-                    .forEach(s7Address -> arguments.add(new Object[]{aClass, s7Address}))
+                    mock(S7Field.class),
+                    mock(S7BitField.class),
+                    mock(S7DataBlockField.class))
+                    .forEach(field -> arguments.add(new Object[]{aClass, field}))
             );
         return arguments;
     }
@@ -112,14 +112,14 @@ public class Plc4XS7ProtocolTest extends NettyTestBase {
         // Read Request Tests
         {
             LinkedList<Object> out = new LinkedList<>();
-            SUT.encode(null, createMockedContainer(new TypeSafePlcReadRequest(type, address)), out);
+            SUT.encode(null, createMockedContainer(new TypeSafePlcReadRequest(type, field)), out);
             // TODO: finish the asserts
             assertThat(out, hasSize(1));
         }
         // Write Request Tests
         {
             LinkedList<Object> out = new LinkedList<>();
-            SUT.encode(null, createMockedContainer(new TypeSafePlcWriteRequest(type, address, fakeValueFor(type))), out);
+            SUT.encode(null, createMockedContainer(new TypeSafePlcWriteRequest(type, field, fakeValueFor(type))), out);
             // TODO: finish the asserts
             assertThat(out, hasSize(1));
         }
@@ -137,7 +137,7 @@ public class Plc4XS7ProtocolTest extends NettyTestBase {
                 Field requests = Plc4XS7Protocol.class.getDeclaredField("requests");
                 requests.setAccessible(true);
                 Map<Short, PlcRequestContainer> requestContainerMap = (Map<Short, PlcRequestContainer>) requests.get(SUT);
-                requestContainerMap.put(fakeTpduReference, createMockedContainer(new TypeSafePlcReadRequest(type, address)));
+                requestContainerMap.put(fakeTpduReference, createMockedContainer(new TypeSafePlcReadRequest(type, field)));
             }
             S7ResponseMessage msg = new S7ResponseMessage(
                 MessageType.ACK,
@@ -159,7 +159,7 @@ public class Plc4XS7ProtocolTest extends NettyTestBase {
                 Field requests = Plc4XS7Protocol.class.getDeclaredField("requests");
                 requests.setAccessible(true);
                 Map<Short, PlcRequestContainer> requestContainerMap = (Map<Short, PlcRequestContainer>) requests.get(SUT);
-                requestContainerMap.put(fakeTpduReference, createMockedContainer(new TypeSafePlcWriteRequest(type, address, fakeValueFor(type))));
+                requestContainerMap.put(fakeTpduReference, createMockedContainer(new TypeSafePlcWriteRequest(type, field, fakeValueFor(type))));
             }
             S7ResponseMessage msg = new S7ResponseMessage(
                 MessageType.ACK,
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/params/S7ParameterTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/params/S7ParameterTests.java
index 9dd3c10..febc3f7 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/params/S7ParameterTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/params/S7ParameterTests.java
@@ -51,7 +51,7 @@ public class S7ParameterTests {
 
         VarParameter varParameter = new VarParameter(parameterType, parameterItems);
         assertThat("Unexpected parameter type", varParameter.getType(), equalTo(ParameterType.READ_VAR));
-        assertThat("Unexpected paramater items", varParameter.getItems(), contains(parameterItems.toArray()));
+        assertThat("Unexpected parameter items", varParameter.getItems(), contains(parameterItems.toArray()));
     }
 
     @Test
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/types/S7TypeTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/types/S7TypeTests.java
index 748e4ab..21b5357 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/types/S7TypeTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/types/S7TypeTests.java
@@ -102,8 +102,6 @@ public class S7TypeTests {
     @Test
     @Category(FastTests.class)
     public void unknownParameterType() {
-        ParameterType parameterType = ParameterType.UPLOAD;
-
         assertThat(ParameterType.valueOf((byte) 0xFF), nullValue());
     }
 
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/strategies/DefaultS7MessageProcessorTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/strategies/DefaultS7MessageProcessorTest.java
index 4057bc0..8ed7b3f 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/strategies/DefaultS7MessageProcessorTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/strategies/DefaultS7MessageProcessorTest.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.s7.netty.strategies;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.s7.netty.strategies;
 
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.s7.netty.model.messages.S7RequestMessage;
@@ -256,7 +256,7 @@ public class DefaultS7MessageProcessorTest {
     }
 
     /**
-     * In this request, we only send one single element to one single address. Nothing should be changed.
+     * In this request, we only send one single element to one single field. Nothing should be changed.
      *
      * @throws PlcException something went wrong.
      */
@@ -290,7 +290,7 @@ public class DefaultS7MessageProcessorTest {
     }
 
     /**
-     * In this request, we send an array of bit elements to a single address, the request should be broken
+     * In this request, we send an array of bit elements to a single field, the request should be broken
      * up into multiple single element write messages as the S7 doesn't seem to like writing of arrays.
      *
      * @throws PlcException something went wrong.
@@ -307,10 +307,10 @@ public class DefaultS7MessageProcessorTest {
         );
         Collection<? extends S7RequestMessage> processedRequests = SUT.processRequest(request, 250);
 
-        // Initialize a set of expected addresses.
-        Set<String> expectedAddresses = new HashSet<>(10);
+        // Initialize a set of expected fields.
+        Set<String> expectedFields = new HashSet<>(10);
         for(int i = 0; i < 10; i++) {
-            expectedAddresses.add(Integer.toString(i / 8) + "/" + Integer.toString(i % 8));
+            expectedFields.add(Integer.toString(i / 8) + "/" + Integer.toString(i % 8));
         }
 
         // We are expecting to receive 10 messages as we had an array of 10 items.
@@ -334,27 +334,27 @@ public class DefaultS7MessageProcessorTest {
             assertThat(s7AnyParameterItem.getMemoryArea(), is(MemoryArea.DATA_BLOCKS));
             assertThat(s7AnyParameterItem.getTransportSize(), is(TransportSize.BIT));
             assertThat(s7AnyParameterItem.getNumElements(), is((short) 1));
-            String addressString = Short.toString(
+            String fieldString = Short.toString(
                 s7AnyParameterItem.getByteOffset()) + "/" + Byte.toString(s7AnyParameterItem.getBitOffset());
-            assertThat(expectedAddresses, IsCollectionContaining.hasItem(addressString));
+            assertThat(expectedFields, IsCollectionContaining.hasItem(fieldString));
 
             VarPayloadItem payloadItem = varPayload.getItems().iterator().next();
-            // We are expecting that the payload is simply "the address of the byte + 1".
+            // We are expecting that the payload is simply "the field of the byte + 1".
             assertThat(payloadItem.getData().length, is(1));
             int value = (s7AnyParameterItem.getByteOffset() * 8) + s7AnyParameterItem.getBitOffset();
             byte expectedValue = (value % 2 == 0) ? (byte) 0x00 : (byte) 0x01;
             assertThat(payloadItem.getData()[0], is(expectedValue));
 
-            // Remove the used address from the list of available ones.
-            expectedAddresses.remove(addressString);
+            // Remove the used field from the list of available ones.
+            expectedFields.remove(fieldString);
         }
 
-        // In the end all addresses should have been used.
-        assertThat(expectedAddresses, hasSize(0));
+        // In the end all fields should have been used.
+        assertThat(expectedFields, hasSize(0));
     }
 
     /**
-     * In this request, we send an array of elements to a single address, the request should be broken
+     * In this request, we send an array of elements to a single field, the request should be broken
      * up into multiple single element write messages as the S7 doesn't seem to like writing of arrays.
      *
      * @throws PlcException something went wrong.
@@ -371,10 +371,10 @@ public class DefaultS7MessageProcessorTest {
         );
         Collection<? extends S7RequestMessage> processedRequests = SUT.processRequest(request, 250);
 
-        // Initialize a set of expected addresses.
-        Set<Short> expectedAddresses = new HashSet<>(10);
+        // Initialize a set of expected fields.
+        Set<Short> expectedFields = new HashSet<>(10);
         for(int i = 0; i < 10; i++) {
-            expectedAddresses.add((short) i);
+            expectedFields.add((short) i);
         }
 
         // We are expecting to receive 10 messages as we had an array of 10 items.
@@ -398,26 +398,26 @@ public class DefaultS7MessageProcessorTest {
             assertThat(s7AnyParameterItem.getMemoryArea(), is(MemoryArea.DATA_BLOCKS));
             assertThat(s7AnyParameterItem.getTransportSize(), is(TransportSize.BYTE));
             assertThat(s7AnyParameterItem.getNumElements(), is((short) 1));
-            // Check the address is in the expected range and hasn't been used yet.
-            assertThat(expectedAddresses.contains(s7AnyParameterItem.getByteOffset()), is(true));
+            // Check the field is in the expected range and hasn't been used yet.
+            assertThat(expectedFields.contains(s7AnyParameterItem.getByteOffset()), is(true));
             assertThat(s7AnyParameterItem.getBitOffset(), is((byte) 0));
 
             VarPayloadItem payloadItem = varPayload.getItems().iterator().next();
-            // We are expecting that the payload is simply "the address of the byte + 1".
+            // We are expecting that the payload is simply "the field of the byte + 1".
             assertThat(payloadItem.getData().length, is(1));
             byte expectedValue = (byte) ((byte) s7AnyParameterItem.getByteOffset() + (byte) 1);
             assertThat(payloadItem.getData()[0], is(expectedValue));
 
-            // Remove the used address from the list of available ones.
-            expectedAddresses.remove(s7AnyParameterItem.getByteOffset());
+            // Remove the used field from the list of available ones.
+            expectedFields.remove(s7AnyParameterItem.getByteOffset());
         }
 
-        // In the end all addresses should have been used.
-        assertThat(expectedAddresses, hasSize(0));
+        // In the end all fields should have been used.
+        assertThat(expectedFields, hasSize(0));
     }
 
     /**
-     * In this request, we send an array of elements to a single address, the request should be broken
+     * In this request, we send an array of elements to a single field, the request should be broken
      * up into multiple single element write messages as the S7 doesn't seem to like writing of arrays.
      *
      * @throws PlcException something went wrong.
@@ -442,10 +442,10 @@ public class DefaultS7MessageProcessorTest {
                     0x00, 0x00, 0x00, 0x0A})));
         Collection<? extends S7RequestMessage> processedRequests = SUT.processRequest(request, 250);
 
-        // Initialize a set of expected addresses.
-        Set<Short> expectedAddresses = new HashSet<>(10);
+        // Initialize a set of expected fields.
+        Set<Short> expectedFields = new HashSet<>(10);
         for(int i = 0; i < 10; i++) {
-            expectedAddresses.add((short) (i * 4));
+            expectedFields.add((short) (i * 4));
         }
 
         // We are expecting to receive 10 messages as we had an array of 10 items.
@@ -469,8 +469,8 @@ public class DefaultS7MessageProcessorTest {
             assertThat(s7AnyParameterItem.getMemoryArea(), is(MemoryArea.DATA_BLOCKS));
             assertThat(s7AnyParameterItem.getTransportSize(), is(TransportSize.DWORD));
             assertThat(s7AnyParameterItem.getNumElements(), is((short) 1));
-            // Check the address is in the expected range and hasn't been used yet.
-            assertThat(expectedAddresses.contains(s7AnyParameterItem.getByteOffset()), is(true));
+            // Check the field is in the expected range and hasn't been used yet.
+            assertThat(expectedFields.contains(s7AnyParameterItem.getByteOffset()), is(true));
             assertThat(s7AnyParameterItem.getBitOffset(), is((byte) 0));
 
             VarPayloadItem payloadItem = varPayload.getItems().iterator().next();
@@ -480,12 +480,12 @@ public class DefaultS7MessageProcessorTest {
             int actualValue = (payloadItem.getData()[0] << 32) + (payloadItem.getData()[1] << 16) + (payloadItem.getData()[2] << 8) + payloadItem.getData()[3];
             assertThat(actualValue, is(expectedValue));
 
-            // Remove the used address from the list of available ones.
-            expectedAddresses.remove(s7AnyParameterItem.getByteOffset());
+            // Remove the used field from the list of available ones.
+            expectedFields.remove(s7AnyParameterItem.getByteOffset());
         }
 
-        // In the end all addresses should have been used.
-        assertThat(expectedAddresses, hasSize(0));
+        // In the end all fields should have been used.
+        assertThat(expectedFields, hasSize(0));
     }
 
     /**
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/util/S7SizeHelperTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/util/S7SizeHelperTest.java
index 40e9562..c734d92 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/util/S7SizeHelperTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/util/S7SizeHelperTest.java
@@ -1,4 +1,3 @@
-package org.apache.plc4x.java.s7.netty.util;
 /*
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -17,6 +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.s7.netty.util;
 
 import static org.hamcrest.core.Is.is;