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 2023/02/04 15:20:12 UTC

[plc4x] 01/02: chore: Started making the PR buildable

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

cdutz pushed a commit to branch refactor/cdutz/global-changes-of-spnettech-repo
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 1e8ec2ee3da35671228bebe0415affee6fca694e
Author: Christofer Dutz <ch...@rivian.com>
AuthorDate: Sat Feb 4 13:25:03 2023 +0100

    chore: Started making the PR buildable
---
 code-generation/language-c/pom.xml                 |     1 -
 .../resources/templates/c/data-io-template.c.ftlh  |     4 +
 code-generation/language-go/pom.xml                |     1 -
 .../plc4x/include/plc4c/driver_plc4x_static.h      |     2 +
 plc4c/drivers/plc4x/src/driver_plc4x_static.c      |    28 +
 .../s7/include/plc4c/driver_s7_encode_decode.h     |     6 +
 plc4c/drivers/s7/include/plc4c/driver_s7_static.h  |     4 +-
 plc4c/drivers/s7/src/driver_s7_encode_decode.c     |    66 +-
 plc4c/drivers/s7/src/driver_s7_packets.c           |    13 +-
 plc4c/drivers/s7/src/driver_s7_sm_read.c           |    13 +-
 plc4c/drivers/s7/src/driver_s7_static.c            |     4 +-
 plc4c/generated-sources/plc4x/src/plc4x_value.c    |    34 +
 plc4c/generated-sources/s7/include/data_item.h     |     8 +-
 plc4c/generated-sources/s7/src/data_item.c         |    60 +-
 plc4c/generated-sources/s7/src/transport_size.c    |    16 +-
 plc4go/go.mod                                      |     2 +-
 plc4go/internal/s7/Reader.go                       |     7 +-
 plc4go/internal/s7/Tag.go                          |    54 +-
 plc4go/internal/s7/TagHandler.go                   |    68 +-
 plc4go/internal/s7/Writer.go                       |     2 +-
 plc4go/internal/simulated/Reader_test.go           |     2 +-
 plc4go/internal/simulated/Writer_test.go           |     2 +-
 .../protocols/abeth/readwrite/XmlParserHelper.go   |     4 +-
 plc4j/api/pom.xml                                  |     3 +
 .../apache/plc4x/java/DefaultPlcDriverManager.java |    41 +-
 .../plc4x/java/api/PlcConnectionManager.java       |     1 +
 .../org/apache/plc4x/java/api/model/PlcTag.java    |    13 +
 .../apache/plc4x/java/ads/tag/DirectAdsTag.java    |     1 +
 .../canopen/SDODownloadConversation.java           |     2 +-
 .../java/firmata/readwrite/tag/FirmataTag.java     |     1 +
 plc4j/drivers/knxnetip/pom.xml                     |     2 +-
 .../knxnetip/protocol/KnxNetIpProtocolLogic.java   |     2 +-
 plc4j/drivers/opcua/pom.xml                        |    14 +-
 .../java/opcua/readwrite/OpcuaNodeIdServices.java  |   673 +
 .../apache/plc4x/java/opcua/OpcuaPlcDriver.java    |     1 +
 .../plc4x/java/opcua/context/SecureChannel.java    |     6 +-
 .../plc4x/java/plc4x/readwrite/Plc4xValue.java     |    32 +
 .../java/plc4x/protocol/Plc4xProtocolLogic.java    |    13 +-
 .../java/plc4x/readwrite/utils/StaticHelper.java   |    94 +
 .../plc4x/java/plc4x/tag/Plc4XTagHandler.java      |     7 +-
 .../org/apache/plc4x/java/plc4x/tag/Plc4xTag.java  |    13 +-
 plc4j/drivers/pom.xml                              |    15 +
 .../apache/plc4x/java/s7/readwrite/DataItem.java   |    72 +-
 .../s7/readwrite/S7PayloadReadVarResponse.java     |     2 +-
 .../java/s7/readwrite/S7VarPayloadDataItem.java    |    39 +-
 .../plc4x/java/s7/readwrite/TransportSize.java     |    18 +-
 .../readwrite/configuration/S7Configuration.java   |    60 +-
 .../java/s7/readwrite/context/S7DriverContext.java |     4 +-
 .../optimizer/DefaultS7MessageProcessor.java       |     6 +-
 .../java/s7/readwrite/optimizer/S7Optimizer.java   |    27 +-
 .../readwrite/protocol/S7ProtocolEventLogic.java   |     6 +-
 .../s7/readwrite/protocol/S7ProtocolLogic.java     |   188 +-
 .../plc4x/java/s7/readwrite/tag/S7StringTag.java   |     5 +-
 .../apache/plc4x/java/s7/readwrite/tag/S7Tag.java  |   103 +-
 .../java/s7/readwrite/utils/StaticHelper.java      |   212 +-
 plc4j/drivers/s7/src/test/java/S7IoTest.java       |     9 +-
 .../drivers/s7/src/test/resources/logback-test.xml |     2 +-
 .../simulated/connection/SimulatedConnection.java  |    30 +-
 .../examples/connectivity/mqtt/MqttConnector.java  |    66 +-
 .../src/main/resources/mqtt-connector.yml          |    35 +
 .../java/examples/helloinflux/HelloInflux.java     |     2 +-
 plc4j/examples/hello-world-kotlin/pom.xml          |     2 +-
 plc4j/integrations/apache-kafka/pom.xml            |     2 +-
 plc4j/integrations/opcua-server/pom.xml            |     8 +-
 .../opcuaserver/backend/Plc4xCommunication.java    |    23 +-
 .../java/opcuaserver/backend/Plc4xNamespace.java   |     5 +-
 plc4j/pom.xml                                      |     3 +
 .../apache/plc4x/java/spi/Plc4xNettyWrapper.java   |    50 +-
 .../apache/plc4x/java/spi/Plc4xProtocolBase.java   |     7 +
 .../plc4x/java/spi/connection/ChannelFactory.java  |     3 +-
 .../spi/connection/DefaultNettyPlcConnection.java  |    36 +-
 .../java/spi/connection/NettyChannelFactory.java   |    12 +
 .../java/spi/generation/WriteBufferByteBased.java  |     2 +
 .../java/spi/internal/HandlerRegistration.java     |    14 +-
 .../java/spi/messages/DefaultPlcWriteRequest.java  |     5 +
 .../java/spi/model/DefaultPlcSubscriptionTag.java  |     4 +-
 .../spi/transaction/RequestTransactionManager.java |    37 +-
 .../org/apache/plc4x/java/spi/values/PlcBOOL.java  |     2 +
 .../org/apache/plc4x/java/spi/values/PlcBYTE.java  |     8 +-
 .../org/apache/plc4x/java/spi/values/PlcCHAR.java  |    45 +
 .../plc4x/java/spi/values/PlcDATE_AND_TIME.java    |    33 +
 .../org/apache/plc4x/java/spi/values/PlcDINT.java  |     2 +
 .../org/apache/plc4x/java/spi/values/PlcDWORD.java |     2 +
 .../org/apache/plc4x/java/spi/values/PlcINT.java   |     2 +
 .../org/apache/plc4x/java/spi/values/PlcLINT.java  |     2 +
 .../org/apache/plc4x/java/spi/values/PlcLREAL.java |     2 +
 .../org/apache/plc4x/java/spi/values/PlcLTIME.java |    16 +
 .../org/apache/plc4x/java/spi/values/PlcLWORD.java |     2 +
 .../org/apache/plc4x/java/spi/values/PlcSINT.java  |     2 +
 .../org/apache/plc4x/java/spi/values/PlcTIME.java  |    16 +
 .../plc4x/java/spi/values/PlcTIME_OF_DAY.java      |     4 +
 .../org/apache/plc4x/java/spi/values/PlcUDINT.java |     2 +
 .../org/apache/plc4x/java/spi/values/PlcUINT.java  |     2 +
 .../org/apache/plc4x/java/spi/values/PlcULINT.java |     2 +
 .../org/apache/plc4x/java/spi/values/PlcUSINT.java |     2 +
 .../plc4x/java/spi/values/PlcValueHandler.java     |    81 +-
 .../org/apache/plc4x/java/spi/values/PlcWCHAR.java |     2 +
 .../org/apache/plc4x/java/spi/values/PlcWORD.java  |     2 +
 .../plc4x/java/spi/Plc4xNettyWrapperTest.java      |     4 +-
 .../optimizer/RequestTransactionManagerTest.java   |    20 +-
 .../utils/cache/CachedPlcConnectionManager.java    |    23 +-
 .../java/utils/cache/LeasedPlcConnection.java      |    19 +-
 .../plc4x/java/plc4x/readwrite/Plc4xValue.java     |    32 +
 .../java/plc4x/readwrite/utils/StaticHelper.java   |    94 +
 .../plc4xserver/protocol/Plc4xServerAdapter.java   |     5 +-
 plc4j/transports/pom.xml                           |    16 +-
 .../server/s7/protocol/S7Step7ServerAdapter.java   |    24 +-
 pom.xml                                            |    18 +-
 .../opcua/downloads/Opc.Ua.NodeIds.Services.csv    |  1749 +
 .../opcua/downloads/Opc.Ua.NodeSet2.Services.xml   | 63477 +++++++++++++++++++
 protocols/opcua/downloads/Opc.Ua.Types.bsd         |  3162 +
 protocols/opcua/downloads/StatusCode.csv           |   261 +
 protocols/opcua/pom.xml                            |    26 +-
 .../main/resources/protocols/plc4x/v0/plc4x.mspec  |    14 +-
 protocols/pom.xml                                  |     3 +
 .../s7/src/main/resources/protocols/s7/s7.mspec    |    36 +-
 116 files changed, 71004 insertions(+), 644 deletions(-)

diff --git a/code-generation/language-c/pom.xml b/code-generation/language-c/pom.xml
index c9cd041200..fd86a7a987 100644
--- a/code-generation/language-c/pom.xml
+++ b/code-generation/language-c/pom.xml
@@ -62,7 +62,6 @@
                 <extraArtifact>org.apache.plc4x.plugins:plc4x-maven-plugin:${plc4x-code-generation.version}</extraArtifact>
                 <extraArtifact>org.apache.plc4x.plugins:plc4x-code-generation-protocol-base:${plc4x-code-generation.version}</extraArtifact>
                 <extraArtifact>org.apache.plc4x.plugins:plc4x-code-generation-types-base:${plc4x-code-generation.version}</extraArtifact>
-                <extraArtifact>org.apache.plc4x.plugins:plc4x-code-generation-types-base:${plc4x-code-generation.version}</extraArtifact>
               </extraArtifacts>
               <pomIncludes>
                 <pomInclude>*/pom.xml</pomInclude>
diff --git a/code-generation/language-c/src/main/resources/templates/c/data-io-template.c.ftlh b/code-generation/language-c/src/main/resources/templates/c/data-io-template.c.ftlh
index 114889903b..bf1a543262 100644
--- a/code-generation/language-c/src/main/resources/templates/c/data-io-template.c.ftlh
+++ b/code-generation/language-c/src/main/resources/templates/c/data-io-template.c.ftlh
@@ -179,7 +179,11 @@ plc4c_return_code ${helper.getCTypeName(type.name)}_parse(plc4c_spi_read_buffer*
                 return new PlcStruct(${field.name});
                             <#break-->
                         <#case "STRING">
+                                <#if (parserArguments?filter(parserArgument->parserArgument.name=="stringLength"))?has_content>
                 *data_item = plc4c_data_create_string_data(stringLength, ${manualField.name});
+                                <#else>
+                *data_item = plc4c_data_create_string_data(strlen(value), ${manualField.name});
+                                </#if>
                             <#break>
                         <#default>
                 *data_item = plc4c_data_create_${case.name?lower_case}_data(${manualField.name});
diff --git a/code-generation/language-go/pom.xml b/code-generation/language-go/pom.xml
index a452077012..cc2f201576 100644
--- a/code-generation/language-go/pom.xml
+++ b/code-generation/language-go/pom.xml
@@ -62,7 +62,6 @@
                 <extraArtifact>org.apache.plc4x.plugins:plc4x-maven-plugin:${plc4x-code-generation.version}</extraArtifact>
                 <extraArtifact>org.apache.plc4x.plugins:plc4x-code-generation-protocol-base:${plc4x-code-generation.version}</extraArtifact>
                 <extraArtifact>org.apache.plc4x.plugins:plc4x-code-generation-types-base:${plc4x-code-generation.version}</extraArtifact>
-                <extraArtifact>org.apache.plc4x.plugins:plc4x-code-generation-types-base:${plc4x-code-generation.version}</extraArtifact>
               </extraArtifacts>
               <pomIncludes>
                 <pomInclude>*/pom.xml</pomInclude>
diff --git a/plc4c/drivers/plc4x/include/plc4c/driver_plc4x_static.h b/plc4c/drivers/plc4x/include/plc4c/driver_plc4x_static.h
index 4a6d28aada..1e6cdc2bc6 100644
--- a/plc4c/drivers/plc4x/include/plc4c/driver_plc4x_static.h
+++ b/plc4c/drivers/plc4x/include/plc4c/driver_plc4x_static.h
@@ -36,6 +36,8 @@ extern "C" {
 
 uint8_t plc4c_spi_evaluation_helper_str_len(char* str);
 
+char* plc4c_plc4x_read_write_parse_string(plc4c_spi_read_buffer* io, char* encoding);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/plc4c/drivers/plc4x/src/driver_plc4x_static.c b/plc4c/drivers/plc4x/src/driver_plc4x_static.c
index 9eff097145..fda73bf88b 100644
--- a/plc4c/drivers/plc4x/src/driver_plc4x_static.c
+++ b/plc4c/drivers/plc4x/src/driver_plc4x_static.c
@@ -30,3 +30,31 @@ uint8_t plc4c_spi_evaluation_helper_str_len(char* str) {
     return strlen(str);
 }
 
+char* plc4c_plc4x_read_write_parse_string(plc4c_spi_read_buffer* io, char* encoding) {
+  if (strcmp(encoding, "UTF-8") == 0) {
+    // Read the max length (which is not interesting for us.
+    uint8_t length;
+    plc4c_return_code res = plc4c_spi_read_unsigned_byte(io, 8, &length);
+    if (res != OK) {
+      return NULL;
+    }
+    char* result = malloc(sizeof(char) * (length + 1));
+    if (result == NULL) {
+      return NULL;
+    }
+    char* curPos = result;
+    for(int i = 0; i < length; i++) {
+      uint8_t val;
+      plc4c_return_code res = plc4c_spi_read_unsigned_byte(io, 8, &val);
+      if (res != OK) {
+        return NULL;
+      }
+      *curPos = (char) val;
+      curPos++;
+    }
+    *curPos = '\0';
+    return result;
+  } else if (strcmp(encoding, "UTF-16") == 0) {
+  }
+  return "";
+}
diff --git a/plc4c/drivers/s7/include/plc4c/driver_s7_encode_decode.h b/plc4c/drivers/s7/include/plc4c/driver_s7_encode_decode.h
index 28da28458b..b771f5bed9 100644
--- a/plc4c/drivers/s7/include/plc4c/driver_s7_encode_decode.h
+++ b/plc4c/drivers/s7/include/plc4c/driver_s7_encode_decode.h
@@ -27,6 +27,12 @@ extern "C" {
 #include "plc4c/driver_s7.h"
 #include "s7_var_request_parameter_item.h"
 
+struct plc4c_s7_read_write_s7_var_request_parameter_item_field {
+  plc4c_s7_read_write_s7_var_request_parameter_item* parameter_item;
+  char* s7_address_any_encoding_of_string;
+};
+typedef struct plc4c_s7_read_write_s7_var_request_parameter_item_field plc4c_s7_read_write_s7_var_request_parameter_item_field;
+
 uint16_t plc4c_driver_s7_encode_tsap_id(
     plc4c_driver_s7_device_group device_group, uint8_t rack, uint8_t slot);
 
diff --git a/plc4c/drivers/s7/include/plc4c/driver_s7_static.h b/plc4c/drivers/s7/include/plc4c/driver_s7_static.h
index 2b52cec337..05ba1d9cc8 100644
--- a/plc4c/drivers/s7/include/plc4c/driver_s7_static.h
+++ b/plc4c/drivers/s7/include/plc4c/driver_s7_static.h
@@ -48,9 +48,9 @@ uint16_t plc4c_s7_read_write_s7msec_to_int(plc4c_spi_read_buffer* io);
 
 plc4c_return_code plc4c_s7_read_write_int_to_s7msec(plc4c_spi_write_buffer* writeBuffer, uint16_t value);
 
-char* plc4c_s7_read_write_parse_s7_string(plc4c_spi_read_buffer* io, int32_t stringLength, char* encoding);
+char* plc4c_s7_read_write_parse_s7_string(plc4c_spi_read_buffer* io, int32_t stringLength, char* encoding, char* stringEncoding);
 
-char* plc4c_s7_read_write_parse_s7_char(plc4c_spi_read_buffer* io, char* encoding);
+char* plc4c_s7_read_write_parse_s7_char(plc4c_spi_read_buffer* io, char* encoding, char* stringEncoding);
 
 time_t plc4c_s7_read_write_parse_tia_time(plc4c_spi_read_buffer* io);
 
diff --git a/plc4c/drivers/s7/src/driver_s7_encode_decode.c b/plc4c/drivers/s7/src/driver_s7_encode_decode.c
index 9b9043b591..024f4b3593 100644
--- a/plc4c/drivers/s7/src/driver_s7_encode_decode.c
+++ b/plc4c/drivers/s7/src/driver_s7_encode_decode.c
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <tpkt_packet.h>
+#include "plc4c/driver_s7_encode_decode.h"
 
 uint16_t plc4c_driver_s7_encode_tsap_id(
     plc4c_driver_s7_device_group device_group, uint8_t rack, uint8_t slot) {
@@ -114,6 +115,7 @@ plc4c_return_code plc4c_driver_s7_encode_address(char* address, void** item) {
   // Parser logic
   char* cur_pos = address;
   char* last_pos = address;
+  char* string_encoding = NULL;
   // - Does it start with "%"?
   if (*cur_pos == '%') {
     cur_pos++;
@@ -247,6 +249,19 @@ plc4c_return_code plc4c_driver_s7_encode_address(char* address, void** item) {
       *(num_elements + len) = '\0';
     }
 
+    if (*cur_pos == '|') {
+      // Next comes the num_elements
+      cur_pos++;
+      last_pos = cur_pos;
+      while (*cur_pos != '\0') {
+        cur_pos++;
+      }
+      len = cur_pos - last_pos;
+      string_encoding = malloc(sizeof(char) * (len + 1));
+      strncpy(string_encoding, last_pos, len);
+      *(string_encoding + len) = '\0';
+    }
+
     ////////////////////////////////////////////////////////////////////////////
     // Now parse the contents.
     ////////////////////////////////////////////////////////////////////////////
@@ -261,6 +276,7 @@ plc4c_return_code plc4c_driver_s7_encode_address(char* address, void** item) {
       free(data_type);
       free(string_length);
       free(num_elements);
+      free(string_encoding);
       free(s7_item);
       return NO_MEMORY;
     }
@@ -283,6 +299,7 @@ plc4c_return_code plc4c_driver_s7_encode_address(char* address, void** item) {
       free(data_type);
       free(string_length);
       free(num_elements);
+      free(string_encoding);
       free(any_address);
       free(s7_item);
       return INVALID_ADDRESS;
@@ -320,15 +337,50 @@ plc4c_return_code plc4c_driver_s7_encode_address(char* address, void** item) {
 
     // TODO: THis should be moved to "driver_s7_packets.c->plc4c_return_code plc4c_driver_s7_create_s7_read_request"
     if (any_address->s7_address_any_transport_size ==
+        plc4c_s7_read_write_transport_size_TIME ||
+        any_address->s7_address_any_transport_size ==
+            plc4c_s7_read_write_transport_size_LINT ||
+        any_address->s7_address_any_transport_size ==
+            plc4c_s7_read_write_transport_size_ULINT ||
+        any_address->s7_address_any_transport_size ==
+            plc4c_s7_read_write_transport_size_LWORD ||
+        any_address->s7_address_any_transport_size ==
+            plc4c_s7_read_write_transport_size_LREAL ||
+        any_address->s7_address_any_transport_size ==
+            plc4c_s7_read_write_transport_size_REAL ||
+        any_address->s7_address_any_transport_size ==
+            plc4c_s7_read_write_transport_size_LTIME ||
+        any_address->s7_address_any_transport_size ==
+            plc4c_s7_read_write_transport_size_DATE ||
+        any_address->s7_address_any_transport_size ==
+            plc4c_s7_read_write_transport_size_TIME_OF_DAY ||
+        any_address->s7_address_any_transport_size ==
+            plc4c_s7_read_write_transport_size_DATE_AND_TIME) {
+      any_address->s7_address_any_transport_size = plc4c_s7_read_write_transport_size_BYTE;
+        any_address->s7_address_any_number_of_elements =
+          plc4c_s7_read_write_transport_size_length_in_bytes(&(any_address->s7_address_any_transport_size)) *
+            any_address->s7_address_any_number_of_elements;
+    } else if (any_address->s7_address_any_transport_size ==
          plc4c_s7_read_write_transport_size_STRING) {
+      any_address->s7_address_any_transport_size = plc4c_s7_read_write_transport_size_BYTE;
       if (string_length != NULL) {
         any_address->s7_address_any_number_of_elements =
-            strtol(string_length, 0, 10) *
+            (strtol(string_length, 0, 10) +2) *
                 any_address->s7_address_any_number_of_elements;
-      } else if (any_address->s7_address_any_transport_size ==
-                 plc4c_s7_read_write_transport_size_STRING) {
+      } else {
+        any_address->s7_address_any_number_of_elements =
+            256 * any_address->s7_address_any_number_of_elements;
+      }
+    } else if (any_address->s7_address_any_transport_size ==
+        plc4c_s7_read_write_transport_size_WSTRING) {
+      any_address->s7_address_any_transport_size = plc4c_s7_read_write_transport_size_BYTE;
+      if (string_length != NULL) {
+        any_address->s7_address_any_number_of_elements =
+            (strtol(string_length, 0, 10) +2) * 2 *
+            any_address->s7_address_any_number_of_elements;
+      } else {
         any_address->s7_address_any_number_of_elements =
-            254 * any_address->s7_address_any_number_of_elements;
+            512 * any_address->s7_address_any_number_of_elements;
       }
     } else if (any_address->s7_address_any_transport_size ==
                plc4c_s7_read_write_transport_size_TOD) {
@@ -396,8 +448,12 @@ plc4c_return_code plc4c_driver_s7_encode_address(char* address, void** item) {
     free(read_buffer);
     free(raw_data);
   }
+  plc4c_s7_read_write_s7_var_request_parameter_item_field* s7_item_field;
 
-  *item = s7_item;
+  s7_item_field = malloc(sizeof(plc4c_s7_read_write_s7_var_request_parameter_item_field));
+  s7_item_field->parameter_item = s7_item;
+  s7_item_field->s7_address_any_encoding_of_string = string_encoding;
+  *item = s7_item_field;
 
   return OK;
 }
diff --git a/plc4c/drivers/s7/src/driver_s7_packets.c b/plc4c/drivers/s7/src/driver_s7_packets.c
index 3742f9a73e..bf68e8455a 100644
--- a/plc4c/drivers/s7/src/driver_s7_packets.c
+++ b/plc4c/drivers/s7/src/driver_s7_packets.c
@@ -713,9 +713,9 @@ plc4c_return_code plc4c_driver_s7_create_s7_read_request(
     plc4c_s7_read_write_s7_var_request_parameter_item* updated_item_address;
 
     item = cur_item->value;
-
+    plc4c_s7_read_write_s7_var_request_parameter_item_field* field = item->address;
     // Get the item address from the API request.
-    parsed_item_address = item->address;
+    parsed_item_address = field->parameter_item;
 
     // Create a copy of the request item...
     updated_item_address = malloc(sizeof(plc4c_s7_read_write_s7_var_request_parameter_item));
@@ -723,14 +723,14 @@ plc4c_return_code plc4c_driver_s7_create_s7_read_request(
       return NO_MEMORY;
     }
     updated_item_address->_type = parsed_item_address->_type;
-    updated_item_address->s7_var_request_parameter_item_address_address = 
+    updated_item_address->s7_var_request_parameter_item_address_address =
         malloc(sizeof(plc4c_s7_read_write_s7_address));
     if (updated_item_address->s7_var_request_parameter_item_address_address == NULL) {
       return NO_MEMORY;
     }
     // Memcpy inplace of fields assignment, as all fields where assigned
     memcpy(updated_item_address->s7_var_request_parameter_item_address_address,
-      parsed_item_address->s7_var_request_parameter_item_address_address, 
+      parsed_item_address->s7_var_request_parameter_item_address_address,
       sizeof(plc4c_s7_read_write_s7_address));
 
     // In case of TIME values, we read 4 bytes for each value instead.
@@ -855,7 +855,10 @@ plc4c_return_code plc4c_driver_s7_create_s7_write_request(
     // Get the item address from the API request.
     item = list_item->value; 
     parsed_item = item->item;
-    parsed_param = parsed_item->address;
+
+    plc4c_s7_read_write_s7_var_request_parameter_item_field* field = parsed_item->address;
+
+    parsed_param = field->parameter_item;
     parsed_value = item->value;
 
     // Make a copy of the param
diff --git a/plc4c/drivers/s7/src/driver_s7_sm_read.c b/plc4c/drivers/s7/src/driver_s7_sm_read.c
index 2a41ab9c3f..2a07026a47 100644
--- a/plc4c/drivers/s7/src/driver_s7_sm_read.c
+++ b/plc4c/drivers/s7/src/driver_s7_sm_read.c
@@ -203,6 +203,7 @@ plc4c_return_code plc4c_driver_s7_parse_read_response(
   plc4c_data* data_item;
   plc4c_response_value_item* response_value_item;
   char* data_protocol_id;
+  char* string_encoding;
   uint16_t num_elements;
   int32_t string_length;
   uint8_t* byte_array;
@@ -225,11 +226,13 @@ plc4c_return_code plc4c_driver_s7_parse_read_response(
 
     // Get the protocol id for the current item from the corresponding
     // request item. Also get the number of elements, if it's an array.
-    request_address = request_item->address;
+    plc4c_s7_read_write_s7_var_request_parameter_item_field* field = request_item->address;
+    request_address = field->parameter_item;
     transport_size = request_address->s7_var_request_parameter_item_address_address->s7_address_any_transport_size;
     num_elements = request_address->s7_var_request_parameter_item_address_address->s7_address_any_number_of_elements;
     data_protocol_id = plc4c_s7_read_write_transport_size_get_data_protocol_id(transport_size);
-    
+    string_encoding = field->s7_address_any_encoding_of_string;
+
     if (transport_size == plc4c_s7_read_write_transport_size_STRING) {
       // TODO: This needs to be changed to read arrays of strings.
       string_length = num_elements;
@@ -257,12 +260,12 @@ plc4c_return_code plc4c_driver_s7_parse_read_response(
       all_data_item = plc4c_data_create_list_data(all_list);
       free(all_list);
       for (idx = 0; idx < num_elements ; idx++) {
-        plc4c_s7_read_write_data_item_parse(read_buffer, data_protocol_id, string_length, &data_item);
-        plc4c_utils_list_insert_head_value(all_data_item->data.list_value, (void*)data_item);
+        plc4c_s7_read_write_data_item_parse(read_buffer, data_protocol_id, string_length, string_encoding, &data_item);
+        plc4c_utils_list_insert_head_value(&all_data_item->data.list_value, (void*)data_item);
       }
       data_item = all_data_item;
     } else {
-      plc4c_s7_read_write_data_item_parse(read_buffer, data_protocol_id, string_length, &data_item);
+      plc4c_s7_read_write_data_item_parse(read_buffer, data_protocol_id, string_length,string_encoding, &data_item);
     }
 
     // Create a new response value-item
diff --git a/plc4c/drivers/s7/src/driver_s7_static.c b/plc4c/drivers/s7/src/driver_s7_static.c
index 42dc91f2ed..dff33e5bb6 100644
--- a/plc4c/drivers/s7/src/driver_s7_static.c
+++ b/plc4c/drivers/s7/src/driver_s7_static.c
@@ -53,7 +53,7 @@ uint16_t plc4c_s7_read_write_s7msec_to_int(plc4c_spi_read_buffer* io) {
 
 char* plc4c_s7_read_write_parse_s7_string(plc4c_spi_read_buffer* io,
                                           int32_t stringLength,
-                                          char* encoding) {
+                                          char* encoding, char* stringEncoding) {
   if (strcmp(encoding, "UTF-8") == 0) {
     // Read the max length (which is not interesting for us.
     uint8_t maxLen;
@@ -89,7 +89,7 @@ char* plc4c_s7_read_write_parse_s7_string(plc4c_spi_read_buffer* io,
 }
 
 char* plc4c_s7_read_write_parse_s7_char(plc4c_spi_read_buffer* io,
-                                        char* encoding) {
+                                        char* encoding, char* stringEncoding) {
   if (strcmp(encoding, "UTF-8") == 0) {
     char* result = malloc(sizeof(char) * 2);
     if (result == NULL) {
diff --git a/plc4c/generated-sources/plc4x/src/plc4x_value.c b/plc4c/generated-sources/plc4x/src/plc4x_value.c
index b464bd1bc5..371df66267 100644
--- a/plc4c/generated-sources/plc4x/src/plc4x_value.c
+++ b/plc4c/generated-sources/plc4x/src/plc4x_value.c
@@ -235,6 +235,20 @@ plc4c_return_code plc4c_plc4x_read_write_plc4x_value_parse(plc4c_spi_read_buffer
 
                 *data_item = plc4c_data_create_string_data(16, value);
 
+    } else         if(valueType == plc4c_plc4x_read_write_plc4x_value_type_STRING) { /* STRING */
+
+                // Manual Field (value)
+                char* value = (char*) (plc4c_plc4x_read_write_parse_string(readBuffer, "UTF-8"));
+
+                                    *data_item = plc4c_data_create_string_data(strlen(value), value);
+
+    } else         if(valueType == plc4c_plc4x_read_write_plc4x_value_type_WSTRING) { /* STRING */
+
+                // Manual Field (value)
+                char* value = (char*) (plc4c_plc4x_read_write_parse_string(readBuffer, "UTF-16"));
+
+                                    *data_item = plc4c_data_create_string_data(strlen(value), value);
+
     } else         if(valueType == plc4c_plc4x_read_write_plc4x_value_type_TIME) { /* TIME */
 
                 // Simple Field (milliseconds)
@@ -452,6 +466,12 @@ plc4c_return_code plc4c_plc4x_read_write_plc4x_value_serialize(plc4c_spi_write_b
                     if(_res != OK) {
                         return _res;
                     }
+        } else         if(valueType == plc4c_plc4x_read_write_plc4x_value_type_STRING) { /* STRING */
+
+                    // Manual Field (value)
+        } else         if(valueType == plc4c_plc4x_read_write_plc4x_value_type_WSTRING) { /* STRING */
+
+                    // Manual Field (value)
         } else         if(valueType == plc4c_plc4x_read_write_plc4x_value_type_TIME) { /* TIME */
 
                     // Simple field (milliseconds)
@@ -590,6 +610,20 @@ uint16_t plc4c_plc4x_read_write_plc4x_value_length_in_bits(plc4c_data* data_item
 
         // Simple field (value)
         lengthInBits += 16;
+    } else     if(valueType == plc4c_plc4x_read_write_plc4x_value_type_STRING) { /* STRING */
+
+        // Manual Field (value)
+        {
+            char* _value = data_item->data.string_value;
+            lengthInBits += (((plc4c_spi_evaluation_helper_str_len(_value)) + (1))) * (8);
+        }
+    } else     if(valueType == plc4c_plc4x_read_write_plc4x_value_type_WSTRING) { /* STRING */
+
+        // Manual Field (value)
+        {
+            char* _value = data_item->data.string_value;
+            lengthInBits += (((plc4c_spi_evaluation_helper_str_len(_value)) + (1))) * (16);
+        }
     } else     if(valueType == plc4c_plc4x_read_write_plc4x_value_type_TIME) { /* TIME */
 
         // Simple field (milliseconds)
diff --git a/plc4c/generated-sources/s7/include/data_item.h b/plc4c/generated-sources/s7/include/data_item.h
index 3974923a86..a7f40affcc 100644
--- a/plc4c/generated-sources/s7/include/data_item.h
+++ b/plc4c/generated-sources/s7/include/data_item.h
@@ -27,12 +27,12 @@
 
 // Code generated by code-generation. DO NOT EDIT.
 
-plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* readBuffer, char* dataProtocolId, int32_t stringLength, plc4c_data** data_item);
+plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* readBuffer, char* dataProtocolId, int32_t stringLength, char* stringEncoding, plc4c_data** data_item);
 
-plc4c_return_code plc4c_s7_read_write_data_item_serialize(plc4c_spi_write_buffer* writeBuffer, char* dataProtocolId, int32_t stringLength, plc4c_data** data_item);
+plc4c_return_code plc4c_s7_read_write_data_item_serialize(plc4c_spi_write_buffer* writeBuffer, char* dataProtocolId, int32_t stringLength, char* stringEncoding, plc4c_data** data_item);
 
-uint16_t plc4c_s7_read_write_data_item_length_in_bytes(plc4c_data* data_item, char* dataProtocolId, int32_t stringLength);
+uint16_t plc4c_s7_read_write_data_item_length_in_bytes(plc4c_data* data_item, char* dataProtocolId, int32_t stringLength, char* stringEncoding);
 
-uint16_t plc4c_s7_read_write_data_item_length_in_bits(plc4c_data* data_item, char* dataProtocolId, int32_t stringLength);
+uint16_t plc4c_s7_read_write_data_item_length_in_bits(plc4c_data* data_item, char* dataProtocolId, int32_t stringLength, char* stringEncoding);
 
 #endif  // PLC4C_S7_READ_WRITE_DATA_ITEM_H_
diff --git a/plc4c/generated-sources/s7/src/data_item.c b/plc4c/generated-sources/s7/src/data_item.c
index 6f4a261e64..2ef40e710c 100644
--- a/plc4c/generated-sources/s7/src/data_item.c
+++ b/plc4c/generated-sources/s7/src/data_item.c
@@ -31,7 +31,7 @@
 // Code generated by code-generation. DO NOT EDIT.
 
 // Parse function.
-plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* readBuffer, char* dataProtocolId, int32_t stringLength, plc4c_data** data_item) {
+plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* readBuffer, char* dataProtocolId, int32_t stringLength, char* stringEncoding, plc4c_data** data_item) {
     uint16_t startPos = plc4c_spi_read_get_pos(readBuffer);
     uint16_t curPos;
     plc4c_return_code _res = OK;
@@ -215,39 +215,31 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* rea
 
     } else         if(strcmp(dataProtocolId, "IEC61131_CHAR") == 0) { /* CHAR */
 
-                // Simple Field (value)
-                char* value = "";
-                _res = plc4c_spi_read_string(readBuffer, 8, "UTF-8", (char**) &value);
-                if(_res != OK) {
-                    return _res;
-                }
+                // Manual Field (value)
+                char* value = (char*) (plc4c_s7_read_write_parse_s7_char(readBuffer, "UTF-8", stringEncoding));
 
                 *data_item = plc4c_data_create_char_data(value);
 
     } else         if(strcmp(dataProtocolId, "IEC61131_WCHAR") == 0) { /* CHAR */
 
-                // Simple Field (value)
-                char* value = "";
-                _res = plc4c_spi_read_string(readBuffer, 16, "UTF-16", (char**) &value);
-                if(_res != OK) {
-                    return _res;
-                }
+                // Manual Field (value)
+                char* value = (char*) (plc4c_s7_read_write_parse_s7_char(readBuffer, "UTF-16", stringEncoding));
 
                 *data_item = plc4c_data_create_char_data(value);
 
     } else         if(strcmp(dataProtocolId, "IEC61131_STRING") == 0) { /* STRING */
 
                 // Manual Field (value)
-                char* value = (char*) (plc4c_s7_read_write_parse_s7_string(readBuffer, stringLength, "UTF-8"));
+                char* value = (char*) (plc4c_s7_read_write_parse_s7_string(readBuffer, stringLength, "UTF-8", stringEncoding));
 
-                *data_item = plc4c_data_create_string_data(stringLength, value);
+                                    *data_item = plc4c_data_create_string_data(stringLength, value);
 
     } else         if(strcmp(dataProtocolId, "IEC61131_WSTRING") == 0) { /* STRING */
 
                 // Manual Field (value)
-                char* value = (char*) (plc4c_s7_read_write_parse_s7_string(readBuffer, stringLength, "UTF-16"));
+                char* value = (char*) (plc4c_s7_read_write_parse_s7_string(readBuffer, stringLength, "UTF-16", stringEncoding));
 
-                *data_item = plc4c_data_create_string_data(stringLength, value);
+                                    *data_item = plc4c_data_create_string_data(stringLength, value);
 
     } else         if(strcmp(dataProtocolId, "IEC61131_TIME") == 0) { /* TIME */
 
@@ -390,7 +382,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* rea
   return OK;
 }
 
-plc4c_return_code plc4c_s7_read_write_data_item_serialize(plc4c_spi_write_buffer* writeBuffer, char* dataProtocolId, int32_t stringLength, plc4c_data** data_item) {
+plc4c_return_code plc4c_s7_read_write_data_item_serialize(plc4c_spi_write_buffer* writeBuffer, char* dataProtocolId, int32_t stringLength, char* stringEncoding, plc4c_data** data_item) {
   plc4c_return_code _res = OK;
         if(strcmp(dataProtocolId, "IEC61131_BOOL") == 0) { /* BOOL */
 
@@ -501,18 +493,10 @@ plc4c_return_code plc4c_s7_read_write_data_item_serialize(plc4c_spi_write_buffer
                     }
         } else         if(strcmp(dataProtocolId, "IEC61131_CHAR") == 0) { /* CHAR */
 
-                    // Simple field (value)
-                    _res = plc4c_spi_write_string(writeBuffer, 8, "UTF-8", (*data_item)->data.char_value);
-                    if(_res != OK) {
-                        return _res;
-                    }
+                    // Manual Field (value)
         } else         if(strcmp(dataProtocolId, "IEC61131_WCHAR") == 0) { /* CHAR */
 
-                    // Simple field (value)
-                    _res = plc4c_spi_write_string(writeBuffer, 16, "UTF-16", (*data_item)->data.char_value);
-                    if(_res != OK) {
-                        return _res;
-                    }
+                    // Manual Field (value)
         } else         if(strcmp(dataProtocolId, "IEC61131_STRING") == 0) { /* STRING */
 
                     // Manual Field (value)
@@ -607,11 +591,11 @@ plc4c_return_code plc4c_s7_read_write_data_item_serialize(plc4c_spi_write_buffer
   return OK;
 }
 
-uint16_t plc4c_s7_read_write_data_item_length_in_bytes(plc4c_data* data_item, char* data_protocol_id, int32_t string_length) {
-  return plc4c_s7_read_write_data_item_length_in_bits(data_item, data_protocol_id, string_length) / 8;
+uint16_t plc4c_s7_read_write_data_item_length_in_bytes(plc4c_data* data_item, char* data_protocol_id, int32_t string_length, char* string_encoding) {
+  return plc4c_s7_read_write_data_item_length_in_bits(data_item, data_protocol_id, string_length, string_encoding) / 8;
 }
 
-uint16_t plc4c_s7_read_write_data_item_length_in_bits(plc4c_data* data_item, char* dataProtocolId, int32_t stringLength) {
+uint16_t plc4c_s7_read_write_data_item_length_in_bits(plc4c_data* data_item, char* dataProtocolId, int32_t stringLength, char* stringEncoding) {
   uint16_t lengthInBits = 0;
     if(strcmp(dataProtocolId, "IEC61131_BOOL") == 0) { /* BOOL */
 
@@ -678,26 +662,20 @@ uint16_t plc4c_s7_read_write_data_item_length_in_bits(plc4c_data* data_item, cha
         lengthInBits += 64;
     } else     if(strcmp(dataProtocolId, "IEC61131_CHAR") == 0) { /* CHAR */
 
-        // Simple field (value)
+        // Manual Field (value)
         lengthInBits += 8;
     } else     if(strcmp(dataProtocolId, "IEC61131_WCHAR") == 0) { /* CHAR */
 
-        // Simple field (value)
+        // Manual Field (value)
         lengthInBits += 16;
     } else     if(strcmp(dataProtocolId, "IEC61131_STRING") == 0) { /* STRING */
 
         // Manual Field (value)
-        {
-            char* _value = data_item->data.string_value;
-            lengthInBits += (plc4c_spi_evaluation_helper_str_len(_value)) + (2);
-        }
+        lengthInBits += (((stringLength) + (2))) * (8);
     } else     if(strcmp(dataProtocolId, "IEC61131_WSTRING") == 0) { /* STRING */
 
         // Manual Field (value)
-        {
-            char* _value = data_item->data.string_value;
-            lengthInBits += (((plc4c_spi_evaluation_helper_str_len(_value)) * (2))) + (2);
-        }
+        lengthInBits += (((stringLength) + (2))) * (16);
     } else     if(strcmp(dataProtocolId, "IEC61131_TIME") == 0) { /* TIME */
 
         // Simple field (milliseconds)
diff --git a/plc4c/generated-sources/s7/src/transport_size.c b/plc4c/generated-sources/s7/src/transport_size.c
index d7e50f7020..bd41e92140 100644
--- a/plc4c/generated-sources/s7/src/transport_size.c
+++ b/plc4c/generated-sources/s7/src/transport_size.c
@@ -1093,28 +1093,28 @@ plc4c_s7_read_write_data_transport_size plc4c_s7_read_write_transport_size_get_d
       return plc4c_s7_read_write_data_transport_size_INTEGER;
     }
     case plc4c_s7_read_write_transport_size_LINT: { /* '0x0C' */
-      return -1;
+      return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
     }
     case plc4c_s7_read_write_transport_size_ULINT: { /* '0x0D' */
-      return -1;
+      return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
     }
     case plc4c_s7_read_write_transport_size_REAL: { /* '0x0E' */
-      return plc4c_s7_read_write_data_transport_size_REAL;
+      return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
     }
     case plc4c_s7_read_write_transport_size_LREAL: { /* '0x0F' */
-      return -1;
+      return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
     }
     case plc4c_s7_read_write_transport_size_CHAR: { /* '0x10' */
       return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
     }
     case plc4c_s7_read_write_transport_size_WCHAR: { /* '0x11' */
-      return -1;
+      return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
     }
     case plc4c_s7_read_write_transport_size_STRING: { /* '0x12' */
       return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
     }
     case plc4c_s7_read_write_transport_size_WSTRING: { /* '0x13' */
-      return -1;
+      return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
     }
     case plc4c_s7_read_write_transport_size_TIME: { /* '0x14' */
       return -1;
@@ -1363,10 +1363,10 @@ plc4c_s7_read_write_transport_size plc4c_s7_read_write_transport_size_get_base_t
       return plc4c_s7_read_write_transport_size_INT;
     }
     case plc4c_s7_read_write_transport_size_LINT: { /* '0x0C' */
-      return plc4c_s7_read_write_transport_size_INT;
+      return -1;
     }
     case plc4c_s7_read_write_transport_size_ULINT: { /* '0x0D' */
-      return plc4c_s7_read_write_transport_size_INT;
+      return -1;
     }
     case plc4c_s7_read_write_transport_size_REAL: { /* '0x0E' */
       return -1;
diff --git a/plc4go/go.mod b/plc4go/go.mod
index cb23e942a1..42981266a4 100644
--- a/plc4go/go.mod
+++ b/plc4go/go.mod
@@ -19,7 +19,7 @@
 
 module github.com/apache/plc4x/plc4go
 
-go 1.18
+go 1.19
 
 require (
 	github.com/IBM/netaddr v1.5.0
diff --git a/plc4go/internal/s7/Reader.go b/plc4go/internal/s7/Reader.go
index 85664a7125..7df4362469 100644
--- a/plc4go/internal/s7/Reader.go
+++ b/plc4go/internal/s7/Reader.go
@@ -210,13 +210,16 @@ func (m *Reader) ToPlc4xReadResponse(response readWriteModel.S7Message, readRequ
 	for i, tagName := range readRequest.GetTagNames() {
 		tag := readRequest.GetTag(tagName).(PlcTag)
 		payloadItem := payloadItems[i]
-
+		stringLength := uint16(254)
+		if s7StringTag, ok := tag.(PlcStringTag); ok {
+			stringLength = s7StringTag.stringLength
+		}
 		responseCode := decodeResponseCode(payloadItem.GetReturnCode())
 		// Decode the data according to the information from the request
 		log.Trace().Msg("decode data")
 		responseCodes[tagName] = responseCode
 		if responseCode == model.PlcResponseCode_OK {
-			plcValue, err := readWriteModel.DataItemParse(payloadItem.GetData(), tag.GetDataType().DataProtocolId(), int32(tag.GetNumElements()))
+			plcValue, err := readWriteModel.DataItemParse(payloadItem.GetData(), tag.GetDataType().DataProtocolId(), int32(stringLength), tag.GetStringEncoding())
 			if err != nil {
 				return nil, errors.Wrap(err, "Error parsing data item")
 			}
diff --git a/plc4go/internal/s7/Tag.go b/plc4go/internal/s7/Tag.go
index 9dac023754..bb0edd8383 100644
--- a/plc4go/internal/s7/Tag.go
+++ b/plc4go/internal/s7/Tag.go
@@ -39,27 +39,30 @@ type PlcTag interface {
 	GetMemoryArea() readWriteModel.MemoryArea
 	GetByteOffset() uint16
 	GetBitOffset() uint8
+	GetStringEncoding() string
 }
 
 type plcTag struct {
-	TagType     TagType
-	MemoryArea  readWriteModel.MemoryArea
-	BlockNumber uint16
-	ByteOffset  uint16
-	BitOffset   uint8
-	NumElements uint16
-	Datatype    readWriteModel.TransportSize
+	TagType        TagType
+	MemoryArea     readWriteModel.MemoryArea
+	BlockNumber    uint16
+	ByteOffset     uint16
+	BitOffset      uint8
+	NumElements    uint16
+	Datatype       readWriteModel.TransportSize
+	StringEncoding string
 }
 
-func NewTag(memoryArea readWriteModel.MemoryArea, blockNumber uint16, byteOffset uint16, bitOffset uint8, numElements uint16, datatype readWriteModel.TransportSize) PlcTag {
+func NewTag(memoryArea readWriteModel.MemoryArea, blockNumber uint16, byteOffset uint16, bitOffset uint8, numElements uint16, datatype readWriteModel.TransportSize, stringEncoding string) PlcTag {
 	return plcTag{
-		TagType:     S7Tag,
-		MemoryArea:  memoryArea,
-		BlockNumber: blockNumber,
-		ByteOffset:  byteOffset,
-		BitOffset:   bitOffset,
-		NumElements: numElements,
-		Datatype:    datatype,
+		TagType:        S7Tag,
+		MemoryArea:     memoryArea,
+		BlockNumber:    blockNumber,
+		ByteOffset:     byteOffset,
+		BitOffset:      bitOffset,
+		NumElements:    numElements,
+		Datatype:       datatype,
+		StringEncoding: stringEncoding,
 	}
 }
 
@@ -68,16 +71,17 @@ type PlcStringTag struct {
 	stringLength uint16
 }
 
-func NewStringTag(memoryArea readWriteModel.MemoryArea, blockNumber uint16, byteOffset uint16, bitOffset uint8, numElements uint16, stringLength uint16, datatype readWriteModel.TransportSize) PlcStringTag {
+func NewStringTag(memoryArea readWriteModel.MemoryArea, blockNumber uint16, byteOffset uint16, bitOffset uint8, numElements uint16, stringLength uint16, datatype readWriteModel.TransportSize, stringEncoding string) PlcStringTag {
 	return PlcStringTag{
 		plcTag: plcTag{
-			TagType:     S7StringTag,
-			MemoryArea:  memoryArea,
-			BlockNumber: blockNumber,
-			ByteOffset:  byteOffset,
-			BitOffset:   bitOffset,
-			NumElements: numElements,
-			Datatype:    datatype,
+			TagType:        S7StringTag,
+			MemoryArea:     memoryArea,
+			BlockNumber:    blockNumber,
+			ByteOffset:     byteOffset,
+			BitOffset:      bitOffset,
+			NumElements:    numElements,
+			Datatype:       datatype,
+			StringEncoding: stringEncoding,
 		},
 		stringLength: stringLength,
 	}
@@ -142,6 +146,10 @@ func (m plcTag) Serialize() ([]byte, error) {
 	return wb.GetBytes(), nil
 }
 
+func (m plcTag) GetStringEncoding() string {
+	return m.StringEncoding
+}
+
 func (m plcTag) SerializeWithWriteBuffer(writeBuffer utils.WriteBuffer) error {
 	if err := writeBuffer.PushContext(m.TagType.GetName()); err != nil {
 		return err
diff --git a/plc4go/internal/s7/TagHandler.go b/plc4go/internal/s7/TagHandler.go
index 6c2bc99cb0..d7f21cce66 100644
--- a/plc4go/internal/s7/TagHandler.go
+++ b/plc4go/internal/s7/TagHandler.go
@@ -57,11 +57,11 @@ func NewTagHandler() TagHandler {
 	return TagHandler{
 		addressPattern: regexp.MustCompile(`^%(?P<memoryArea>.)(?P<transferSizeCode>[XBWD]?)(?P<byteOffset>\d{1,7})(.(?P<bitOffset>[0-7]))?:(?P<dataType>[a-zA-Z_]+)(\[(?P<numElements>\d+)])?`),
 		//blockNumber usually has its max hat around 64000 --> 5digits
-		dataBlockAddressPattern:       regexp.MustCompile(`^%DB(?P<blockNumber>\d{1,5}).DB(?P<transferSizeCode>[XBWD]?)(?P<byteOffset>\d{1,7})(.(?P<bitOffset>[0-7]))?:(?P<dataType>[a-zA-Z_]+)(\[(?P<numElements>\d+)])?`),
-		dataBlockShortPattern:         regexp.MustCompile(`^%DB(?P<blockNumber>\d{1,5}):(?P<byteOffset>\d{1,7})(.(?P<bitOffset>[0-7]))?:(?P<dataType>[a-zA-Z_]+)(\[(?P<numElements>\d+)])?`),
-		dataBlockStringAddressPattern: regexp.MustCompile(`^%DB(?P<blockNumber>\d{1,5}).DB(?P<transferSizeCode>[XBWD]?)(?P<byteOffset>\d{1,7})(.(?P<bitOffset>[0-7]))?:(?P<dataType>STRING|WSTRING)\((?P<stringLength>\d{1,3})\)(\[(?P<numElements>\d+)])?`),
-		dataBlockStringShortPattern:   regexp.MustCompile(`^%DB(?P<blockNumber>\d{1,5}):(?P<byteOffset>\d{1,7})(.(?P<bitOffset>[0-7]))?:(?P<dataType>STRING|WSTRING)\((?P<stringLength>\d{1,3})\)(\[(?P<numElements>\d+)])?`),
-		plcProxyAddressPattern:        regexp.MustCompile(`[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}`),
+		dataBlockAddressPattern:       regexp.MustCompile(`^%DB(?P<blockNumber>\d{1,5}).DB(?P<transferSizeCode>[XBWD]?)(?P<byteOffset>\d{1,7})(.(?P<bitOffset>[0-7]))?:(?P<dataType>[a-zA-Z_]+)(\[(?P<numElements>\d+)])?(\|(?P<stringEncoding>[a-z0-9A-Z_-]+))?`),
+		dataBlockShortPattern:         regexp.MustCompile(`^%DB(?P<blockNumber>\d{1,5}):(?P<byteOffset>\d{1,7})(.(?P<bitOffset>[0-7]))?:(?P<dataType>[a-zA-Z_]+)(\[(?P<numElements>\d+)])?(\|(?P<stringEncoding>[a-z0-9A-Z_-]+))?`),
+		dataBlockStringAddressPattern: regexp.MustCompile(`^%DB(?P<blockNumber>\d{1,5}).DB(?P<transferSizeCode>[XBWD]?)(?P<byteOffset>\d{1,7})(.(?P<bitOffset>[0-7]))?:(?P<dataType>STRING|WSTRING)\((?P<stringLength>\d{1,3})\)(\[(?P<numElements>\d+)])?(\|(?P<stringEncoding>[a-z0-9A-Z_-]+))?`),
+		dataBlockStringShortPattern:   regexp.MustCompile(`^%DB(?P<blockNumber>\d{1,5}):(?P<byteOffset>\d{1,7})(.(?P<bitOffset>[0-7]))?:(?P<dataType>STRING|WSTRING)\((?P<stringLength>\d{1,3})\)(\[(?P<numElements>\d+)])?(\|(?P<stringEncoding>[a-z0-9A-Z_-]+))?`),
+		plcProxyAddressPattern:        regexp.MustCompile(`[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}(\|(?P<stringEncoding>[a-z0-9A-Z_-]+))?`),
 	}
 }
 
@@ -119,8 +119,15 @@ func (m TagHandler) ParseTag(tagAddress string) (model.PlcTag, error) {
 		if (transferSizeCode != 0) && (dataType.ShortName() != transferSizeCode) {
 			return nil, errors.Errorf("Transfer size code '%d' doesn't match specified data type '%s'", transferSizeCode, dataType)
 		}
+		stringEncoding := match["stringEncoding"]
+		if stringEncoding == "" {
+			stringEncoding = "UTF-8"
+			if dataType == readWriteModel.TransportSize_WSTRING || dataType == readWriteModel.TransportSize_WCHAR {
+				stringEncoding = "UTF-16"
+			}
+		}
 
-		return NewStringTag(memoryArea, 0, byteOffset, bitOffset, numElements, stringLength, dataType), nil
+		return NewStringTag(memoryArea, 0, byteOffset, bitOffset, numElements, stringLength, dataType, stringEncoding), nil
 	} else if match := utils.GetSubgroupMatches(m.dataBlockStringShortPattern, tagAddress); match != nil {
 		dataType, ok := readWriteModel.TransportSizeByName(match[DATA_TYPE])
 		if !ok {
@@ -157,8 +164,14 @@ func (m TagHandler) ParseTag(tagAddress string) (model.PlcTag, error) {
 			}
 			numElements = uint16(parsedNumElements)
 		}
-
-		return NewStringTag(memoryArea, blockNumber, byteOffset, bitOffset, numElements, stringLength, dataType), nil
+		stringEncoding := match["stringEncoding"]
+		if stringEncoding == "" {
+			stringEncoding = "UTF-8"
+			if dataType == readWriteModel.TransportSize_WSTRING || dataType == readWriteModel.TransportSize_WCHAR {
+				stringEncoding = "UTF-16"
+			}
+		}
+		return NewStringTag(memoryArea, blockNumber, byteOffset, bitOffset, numElements, stringLength, dataType, stringEncoding), nil
 	} else if match := utils.GetSubgroupMatches(m.dataBlockAddressPattern, tagAddress); match != nil {
 		dataType, ok := readWriteModel.TransportSizeByName(match[DATA_TYPE])
 		if !ok {
@@ -204,8 +217,14 @@ func (m TagHandler) ParseTag(tagAddress string) (model.PlcTag, error) {
 		if (transferSizeCode != 0) && (dataType.ShortName() != transferSizeCode) {
 			return nil, errors.Errorf("Transfer size code '%d' doesn't match specified data type '%s'", transferSizeCode, dataType)
 		}
-
-		return NewTag(memoryArea, blockNumber, byteOffset, bitOffset, numElements, dataType), nil
+		stringEncoding := match["stringEncoding"]
+		if stringEncoding == "" {
+			stringEncoding = "UTF-8"
+			if dataType == readWriteModel.TransportSize_WSTRING || dataType == readWriteModel.TransportSize_WCHAR {
+				stringEncoding = "UTF-16"
+			}
+		}
+		return NewTag(memoryArea, blockNumber, byteOffset, bitOffset, numElements, dataType, stringEncoding), nil
 	} else if match := utils.GetSubgroupMatches(m.dataBlockShortPattern, tagAddress); match != nil {
 		dataType, ok := readWriteModel.TransportSizeByName(match[DATA_TYPE])
 		if !ok {
@@ -246,8 +265,14 @@ func (m TagHandler) ParseTag(tagAddress string) (model.PlcTag, error) {
 			}
 			numElements = uint16(parsedNumElements)
 		}
-
-		return NewTag(memoryArea, blockNumber, byteOffset, bitOffset, numElements, dataType), nil
+		stringEncoding := match["stringEncoding"]
+		if stringEncoding == "" {
+			stringEncoding = "UTF-8"
+			if dataType == readWriteModel.TransportSize_WSTRING || dataType == readWriteModel.TransportSize_WCHAR {
+				stringEncoding = "UTF-16"
+			}
+		}
+		return NewTag(memoryArea, blockNumber, byteOffset, bitOffset, numElements, dataType, stringEncoding), nil
 	} else if match := utils.GetSubgroupMatches(m.plcProxyAddressPattern, tagAddress); match != nil {
 		addressData, err := hex.DecodeString(strings.ReplaceAll(tagAddress, "[-]", ""))
 		if err != nil {
@@ -261,7 +286,13 @@ func (m TagHandler) ParseTag(tagAddress string) (model.PlcTag, error) {
 		if (s7AddressAny.GetTransportSize() != readWriteModel.TransportSize_BOOL) && s7AddressAny.GetBitAddress() != 0 {
 			return nil, errors.New("A bit offset other than 0 is only supported for type BOOL")
 		}
-
+		stringEncoding := match["stringEncoding"]
+		if stringEncoding == "" {
+			stringEncoding = "UTF-8"
+			if s7AddressAny.GetTransportSize() == readWriteModel.TransportSize_WSTRING || s7AddressAny.GetTransportSize() == readWriteModel.TransportSize_WCHAR {
+				stringEncoding = "UTF-16"
+			}
+		}
 		return NewTag(
 			s7AddressAny.GetArea(),
 			s7AddressAny.GetDbNumber(),
@@ -269,6 +300,7 @@ func (m TagHandler) ParseTag(tagAddress string) (model.PlcTag, error) {
 			s7AddressAny.GetBitAddress(),
 			s7AddressAny.GetNumberOfElements(),
 			s7AddressAny.GetTransportSize(),
+			stringEncoding,
 		), nil
 	} else if match := utils.GetSubgroupMatches(m.addressPattern, tagAddress); match != nil {
 		dataType, ok := readWriteModel.TransportSizeByName(match[DATA_TYPE])
@@ -313,8 +345,14 @@ func (m TagHandler) ParseTag(tagAddress string) (model.PlcTag, error) {
 		if (dataType != readWriteModel.TransportSize_BOOL) && bitOffset != 0 {
 			return nil, errors.New("A bit offset other than 0 is only supported for type BOOL")
 		}
-
-		return NewTag(memoryArea, 0, byteOffset, bitOffset, numElements, dataType), nil
+		stringEncoding := match["stringEncoding"]
+		if stringEncoding == "" {
+			stringEncoding = "UTF-8"
+			if dataType == readWriteModel.TransportSize_WSTRING || dataType == readWriteModel.TransportSize_WCHAR {
+				stringEncoding = "UTF-16"
+			}
+		}
+		return NewTag(memoryArea, 0, byteOffset, bitOffset, numElements, dataType, stringEncoding), nil
 	}
 	return nil, errors.Errorf("Unable to parse %s", tagAddress)
 }
diff --git a/plc4go/internal/s7/Writer.go b/plc4go/internal/s7/Writer.go
index cd33c379e7..85bef3fa25 100644
--- a/plc4go/internal/s7/Writer.go
+++ b/plc4go/internal/s7/Writer.go
@@ -231,7 +231,7 @@ func serializePlcValue(tag model.PlcTag, plcValue values.PlcValue) (readWriteMod
 	if s7StringTag, ok := tag.(*PlcStringTag); ok {
 		stringLength = s7StringTag.stringLength
 	}
-	data, err := readWriteModel.DataItemSerialize(plcValue, s7Tag.GetDataType().DataProtocolId(), int32(stringLength))
+	data, err := readWriteModel.DataItemSerialize(plcValue, s7Tag.GetDataType().DataProtocolId(), int32(stringLength), s7Tag.GetStringEncoding())
 	if err != nil {
 		return nil, errors.Wrapf(err, "Error serializing tag item of type: '%v'", s7Tag.GetDataType())
 	}
diff --git a/plc4go/internal/simulated/Reader_test.go b/plc4go/internal/simulated/Reader_test.go
index 41e9bace88..59007c5389 100644
--- a/plc4go/internal/simulated/Reader_test.go
+++ b/plc4go/internal/simulated/Reader_test.go
@@ -145,7 +145,7 @@ func TestReader_Read(t *testing.T) {
 			},
 			args: args{
 				fields: map[string]model.PlcTag{
-					"test": s7.NewTag(model4.MemoryArea_DATA_BLOCKS, 1, 1, 0, 1, model4.TransportSize_BOOL),
+					"test": s7.NewTag(model4.MemoryArea_DATA_BLOCKS, 1, 1, 0, 1, model4.TransportSize_BOOL, "UTF-8"),
 				},
 				fieldNames: []string{"test"},
 			},
diff --git a/plc4go/internal/simulated/Writer_test.go b/plc4go/internal/simulated/Writer_test.go
index 9f0b10e97b..64af673d4f 100644
--- a/plc4go/internal/simulated/Writer_test.go
+++ b/plc4go/internal/simulated/Writer_test.go
@@ -154,7 +154,7 @@ func TestWriter_Write(t *testing.T) {
 			},
 			args: args{
 				fields: map[string]model.PlcTag{
-					"test": s7.NewTag(model4.MemoryArea_DATA_BLOCKS, 1, 1, 0, 1, model4.TransportSize_BOOL),
+					"test": s7.NewTag(model4.MemoryArea_DATA_BLOCKS, 1, 1, 0, 1, model4.TransportSize_BOOL, "UTF-8"),
 				},
 				values: map[string]values.PlcValue{
 					"test": values2.NewPlcBOOL(false),
diff --git a/plc4go/protocols/abeth/readwrite/XmlParserHelper.go b/plc4go/protocols/abeth/readwrite/XmlParserHelper.go
index 50923103b5..8a902da368 100644
--- a/plc4go/protocols/abeth/readwrite/XmlParserHelper.go
+++ b/plc4go/protocols/abeth/readwrite/XmlParserHelper.go
@@ -23,8 +23,8 @@ import (
 	"github.com/apache/plc4x/plc4go/protocols/abeth/readwrite/model"
 	"github.com/apache/plc4x/plc4go/spi/utils"
 	"github.com/pkg/errors"
-	"strconv"
-	"strings"
+    "strings"
+    "strconv"
 )
 
 // Code generated by code-generation. DO NOT EDIT.
diff --git a/plc4j/api/pom.xml b/plc4j/api/pom.xml
index f4efa24820..28dd1d940f 100644
--- a/plc4j/api/pom.xml
+++ b/plc4j/api/pom.xml
@@ -42,6 +42,9 @@
               com.fasterxml.jackson.annotation;resolution:=optional,
               *
             </Import-Package>
+            <SPI-Consumer>
+              *
+            </SPI-Consumer>
           </instructions>
         </configuration>
       </plugin>
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/DefaultPlcDriverManager.java b/plc4j/api/src/main/java/org/apache/plc4x/java/DefaultPlcDriverManager.java
index fc5a3c8274..e39c6a7f9b 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/DefaultPlcDriverManager.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/DefaultPlcDriverManager.java
@@ -71,16 +71,21 @@ public class DefaultPlcDriverManager implements PlcDriverManager, PlcConnectionM
      * @throws PlcConnectionException an exception if the connection attempt failed.
      */
     public PlcConnection getConnection(String url) throws PlcConnectionException {
-        ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
-        Thread.currentThread().setContextClassLoader(this.classLoader);
         PlcConnection connection;
-        try {
+        if (this.classLoader == null) {
             PlcDriver driver = getDriverForUrl(url);
             connection = driver.getConnection(url);
-            connection.connect();
-        } finally {
-            Thread.currentThread().setContextClassLoader(originalClassLoader);
+        } else {
+            final ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+            Thread.currentThread().setContextClassLoader(classLoader);
+            try {
+                PlcDriver driver = getDriverForUrl(url);
+                connection = driver.getConnection(url);
+            } finally {
+                Thread.currentThread().setContextClassLoader(originalClassLoader);
+            }
         }
+        connection.connect();
         return connection;
     }
 
@@ -93,19 +98,29 @@ public class DefaultPlcDriverManager implements PlcDriverManager, PlcConnectionM
      * @throws PlcConnectionException an exception if the connection attempt failed.
      */
     public PlcConnection getConnection(String url, PlcAuthentication authentication) throws PlcConnectionException {
-        ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
-        Thread.currentThread().setContextClassLoader(this.classLoader);
         PlcConnection connection;
-        try {
+        if (this.classLoader == null) {
             PlcDriver driver = getDriverForUrl(url);
-            connection = driver.getConnection(url, authentication);
-            connection.connect();
-        } finally {
-            Thread.currentThread().setContextClassLoader(originalClassLoader);
+            connection = driver.getConnection(url);
+        } else {
+            final ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+            Thread.currentThread().setContextClassLoader(classLoader);
+            try {
+                PlcDriver driver = getDriverForUrl(url);
+                connection = driver.getConnection(url, authentication);
+            } finally {
+                Thread.currentThread().setContextClassLoader(originalClassLoader);
+            }
         }
+        connection.connect();
         return connection;
     }
 
+    @Override
+    public PlcDriverManager getDriverManager() {
+        return this;
+    }
+
     /**
      * Returns the codes of all of the drivers which are currently registered at the PlcDriverManager
      * @return Set of driver codes for all drivers registered
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/PlcConnectionManager.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/PlcConnectionManager.java
index 98511ad75a..e8515ef5a5 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/PlcConnectionManager.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/PlcConnectionManager.java
@@ -41,5 +41,6 @@ public interface PlcConnectionManager {
      * @throws PlcConnectionException an exception if the connection attempt failed.
      */
     PlcConnection getConnection(String url, PlcAuthentication authentication) throws PlcConnectionException;
+    PlcDriverManager getDriverManager();
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcTag.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcTag.java
index 5cdbd794a6..a0cf8e959d 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcTag.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcTag.java
@@ -47,6 +47,15 @@ public interface PlcTag {
      */
     String getAddressString();
 
+    /**
+     * Returns the number of elements, that this tag would be parsed from.
+     *
+     * @return the number of elements representing this Tag
+     */
+    default int getNumberOfElements(){
+        return 1;
+    }
+
     /**
      * Returns the "datatype" of the response one can expect from this tag.
      * I.e. The mapping between this string and the PlcValue datatype is handled in the ValueHandler class.
@@ -63,6 +72,10 @@ public interface PlcTag {
         return PlcValueType.NULL;
     }
 
+    @JsonIgnore
+    default void setPlcValueType(PlcValueType plcValueType){
+    }
+
     /**
      * Returns the number of elements to expect of the response one can expect from this field.
      *
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/tag/DirectAdsTag.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/tag/DirectAdsTag.java
index 9ece366ea5..bacceba34b 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/tag/DirectAdsTag.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/tag/DirectAdsTag.java
@@ -115,6 +115,7 @@ public class DirectAdsTag implements AdsTag {
         return adsDataTypeName;
     }
 
+    @Override
     public int getNumberOfElements() {
         return numberOfElements;
     }
diff --git a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/api/conversation/canopen/SDODownloadConversation.java b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/api/conversation/canopen/SDODownloadConversation.java
index 3336e548d1..25991d8f0b 100644
--- a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/api/conversation/canopen/SDODownloadConversation.java
+++ b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/api/conversation/canopen/SDODownloadConversation.java
@@ -44,7 +44,7 @@ public class SDODownloadConversation extends CANOpenConversationBase {
         try {
             WriteBufferByteBased writeBuffer = new WriteBufferByteBased(DataItem.getLengthInBytes(value, type, null), ByteOrder.LITTLE_ENDIAN);
             DataItem.staticSerialize(writeBuffer, value, type, null, ByteOrder.LITTLE_ENDIAN);
-            data = writeBuffer.getData();
+            data = writeBuffer.getBytes();
         } catch (SerializationException e) {
             throw new PlcRuntimeException("Could not serialize data", e);
         }
diff --git a/plc4j/drivers/firmata/src/main/java/org/apache/plc4x/java/firmata/readwrite/tag/FirmataTag.java b/plc4j/drivers/firmata/src/main/java/org/apache/plc4x/java/firmata/readwrite/tag/FirmataTag.java
index 48f7cf4f0b..1728abe317 100644
--- a/plc4j/drivers/firmata/src/main/java/org/apache/plc4x/java/firmata/readwrite/tag/FirmataTag.java
+++ b/plc4j/drivers/firmata/src/main/java/org/apache/plc4x/java/firmata/readwrite/tag/FirmataTag.java
@@ -57,6 +57,7 @@ public abstract class FirmataTag implements PlcTag {
         return address;
     }
 
+    @Override
     public int getNumberOfElements() {
         return quantity;
     }
diff --git a/plc4j/drivers/knxnetip/pom.xml b/plc4j/drivers/knxnetip/pom.xml
index dda734fe8e..a45c69463d 100644
--- a/plc4j/drivers/knxnetip/pom.xml
+++ b/plc4j/drivers/knxnetip/pom.xml
@@ -161,7 +161,7 @@
     </dependency>
     <dependency>
       <groupId>org.bouncycastle</groupId>
-      <artifactId>bcprov-jdk15on</artifactId>
+      <artifactId>bcprov-jdk18on</artifactId>
     </dependency>
 
     <dependency>
diff --git a/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/protocol/KnxNetIpProtocolLogic.java b/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/protocol/KnxNetIpProtocolLogic.java
index c3eaafba96..ba6688b099 100644
--- a/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/protocol/KnxNetIpProtocolLogic.java
+++ b/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/protocol/KnxNetIpProtocolLogic.java
@@ -286,7 +286,7 @@ public class KnxNetIpProtocolLogic extends Plc4xProtocolBase<KnxNetIpMessage> im
                 try {
                     final WriteBufferByteBased writeBuffer = new WriteBufferByteBased(KnxDatapoint.getLengthInBytes(value, groupAddress.getType()));
                     KnxDatapoint.staticSerialize(writeBuffer, value, groupAddress.getType());
-                    final byte[] serialized = writeBuffer.getData();
+                    final byte[] serialized = writeBuffer.getBytes();
                     dataFirstByte = serialized[0];
                     data = new byte[serialized.length - 1];
                     System.arraycopy(serialized, 1, data, 0, serialized.length - 1);
diff --git a/plc4j/drivers/opcua/pom.xml b/plc4j/drivers/opcua/pom.xml
index 23ac7aa6cb..cb57d776c2 100644
--- a/plc4j/drivers/opcua/pom.xml
+++ b/plc4j/drivers/opcua/pom.xml
@@ -161,11 +161,11 @@
     </dependency>
     <dependency>
       <groupId>org.bouncycastle</groupId>
-      <artifactId>bcpkix-jdk15on</artifactId>
+      <artifactId>bcpkix-jdk18on</artifactId>
     </dependency>
     <dependency>
       <groupId>org.bouncycastle</groupId>
-      <artifactId>bcprov-jdk15on</artifactId>
+      <artifactId>bcprov-jdk18on</artifactId>
     </dependency>
 
     <dependency>
@@ -193,6 +193,16 @@
     <dependency>
       <groupId>org.eclipse.milo</groupId>
       <artifactId>server-examples</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>org.bouncycastle</groupId>
+          <artifactId>bcprov-jdk15on</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.bouncycastle</groupId>
+          <artifactId>bcpkix-jdk15on</artifactId>
+        </exclusion>
+      </exclusions>
       <scope>test</scope>
     </dependency>
 
diff --git a/plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaNodeIdServices.java b/plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaNodeIdServices.java
index 197af70fe5..51b95b69a7 100644
--- a/plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaNodeIdServices.java
+++ b/plc4j/drivers/opcua/src/main/generated/org/apache/plc4x/java/opcua/readwrite/OpcuaNodeIdServices.java
@@ -28,6 +28,14 @@ public enum OpcuaNodeIdServices {
   AccessLevelType((int) 15031L),
   AccessRestrictionType((int) 95L),
   AcknowledgeableConditionType((int) 2881L),
+  ActivateSessionRequest((int) 465L),
+  ActivateSessionRequest_Encoding_DefaultBinary((int) 467L),
+  ActivateSessionRequest_Encoding_DefaultJson((int) 15145L),
+  ActivateSessionRequest_Encoding_DefaultXml((int) 466L),
+  ActivateSessionResponse((int) 468L),
+  ActivateSessionResponse_Encoding_DefaultBinary((int) 470L),
+  ActivateSessionResponse_Encoding_DefaultJson((int) 15146L),
+  ActivateSessionResponse_Encoding_DefaultXml((int) 469L),
   AdditionalParametersType((int) 16313L),
   AdditionalParametersType_Encoding_DefaultBinary((int) 17537L),
   AdditionalParametersType_Encoding_DefaultJson((int) 17547L),
@@ -36,16 +44,44 @@ public enum OpcuaNodeIdServices {
   AddNodesItem_Encoding_DefaultBinary((int) 378L),
   AddNodesItem_Encoding_DefaultJson((int) 15165L),
   AddNodesItem_Encoding_DefaultXml((int) 377L),
+  AddNodesRequest((int) 486L),
+  AddNodesRequest_Encoding_DefaultBinary((int) 488L),
+  AddNodesRequest_Encoding_DefaultJson((int) 15167L),
+  AddNodesRequest_Encoding_DefaultXml((int) 487L),
+  AddNodesResponse((int) 489L),
+  AddNodesResponse_Encoding_DefaultBinary((int) 491L),
+  AddNodesResponse_Encoding_DefaultJson((int) 15168L),
+  AddNodesResponse_Encoding_DefaultXml((int) 490L),
+  AddNodesResult((int) 483L),
+  AddNodesResult_Encoding_DefaultBinary((int) 485L),
+  AddNodesResult_Encoding_DefaultJson((int) 15166L),
+  AddNodesResult_Encoding_DefaultXml((int) 484L),
   AddReferencesItem((int) 379L),
   AddReferencesItem_Encoding_DefaultBinary((int) 381L),
   AddReferencesItem_Encoding_DefaultJson((int) 15169L),
   AddReferencesItem_Encoding_DefaultXml((int) 380L),
+  AddReferencesRequest((int) 492L),
+  AddReferencesRequest_Encoding_DefaultBinary((int) 494L),
+  AddReferencesRequest_Encoding_DefaultJson((int) 15170L),
+  AddReferencesRequest_Encoding_DefaultXml((int) 493L),
+  AddReferencesResponse((int) 495L),
+  AddReferencesResponse_Encoding_DefaultBinary((int) 497L),
+  AddReferencesResponse_Encoding_DefaultJson((int) 15171L),
+  AddReferencesResponse_Encoding_DefaultXml((int) 496L),
   AddressSpaceFileType((int) 11595L),
   AggregateConfiguration((int) 948L),
   AggregateConfiguration_Encoding_DefaultBinary((int) 950L),
   AggregateConfiguration_Encoding_DefaultJson((int) 15304L),
   AggregateConfiguration_Encoding_DefaultXml((int) 949L),
   AggregateConfigurationType((int) 11187L),
+  AggregateFilter((int) 728L),
+  AggregateFilter_Encoding_DefaultBinary((int) 730L),
+  AggregateFilter_Encoding_DefaultJson((int) 15312L),
+  AggregateFilter_Encoding_DefaultXml((int) 729L),
+  AggregateFilterResult((int) 737L),
+  AggregateFilterResult_Encoding_DefaultBinary((int) 739L),
+  AggregateFilterResult_Encoding_DefaultJson((int) 15315L),
+  AggregateFilterResult_Encoding_DefaultXml((int) 738L),
   AggregateFunction_AnnotationCount((int) 2351L),
   AggregateFunction_Average((int) 2342L),
   AggregateFunction_Count((int) 2352L),
@@ -216,6 +252,44 @@ public enum OpcuaNodeIdServices {
   BrokerWriterGroupTransportDataType_Encoding_DefaultJson((int) 16524L),
   BrokerWriterGroupTransportDataType_Encoding_DefaultXml((int) 16021L),
   BrokerWriterGroupTransportType((int) 21136L),
+  BrowseDescription((int) 514L),
+  BrowseDescription_Encoding_DefaultBinary((int) 516L),
+  BrowseDescription_Encoding_DefaultJson((int) 15180L),
+  BrowseDescription_Encoding_DefaultXml((int) 515L),
+  BrowseDirection((int) 510L),
+  BrowseNextRequest((int) 531L),
+  BrowseNextRequest_Encoding_DefaultBinary((int) 533L),
+  BrowseNextRequest_Encoding_DefaultJson((int) 15186L),
+  BrowseNextRequest_Encoding_DefaultXml((int) 532L),
+  BrowseNextResponse((int) 534L),
+  BrowseNextResponse_Encoding_DefaultBinary((int) 536L),
+  BrowseNextResponse_Encoding_DefaultJson((int) 15187L),
+  BrowseNextResponse_Encoding_DefaultXml((int) 535L),
+  BrowsePath((int) 543L),
+  BrowsePath_Encoding_DefaultBinary((int) 545L),
+  BrowsePath_Encoding_DefaultJson((int) 15190L),
+  BrowsePath_Encoding_DefaultXml((int) 544L),
+  BrowsePathResult((int) 549L),
+  BrowsePathResult_Encoding_DefaultBinary((int) 551L),
+  BrowsePathResult_Encoding_DefaultJson((int) 15192L),
+  BrowsePathResult_Encoding_DefaultXml((int) 550L),
+  BrowsePathTarget((int) 546L),
+  BrowsePathTarget_Encoding_DefaultBinary((int) 548L),
+  BrowsePathTarget_Encoding_DefaultJson((int) 15191L),
+  BrowsePathTarget_Encoding_DefaultXml((int) 547L),
+  BrowseRequest((int) 525L),
+  BrowseRequest_Encoding_DefaultBinary((int) 527L),
+  BrowseRequest_Encoding_DefaultJson((int) 15184L),
+  BrowseRequest_Encoding_DefaultXml((int) 526L),
+  BrowseResponse((int) 528L),
+  BrowseResponse_Encoding_DefaultBinary((int) 530L),
+  BrowseResponse_Encoding_DefaultJson((int) 15185L),
+  BrowseResponse_Encoding_DefaultXml((int) 529L),
+  BrowseResult((int) 522L),
+  BrowseResult_Encoding_DefaultBinary((int) 524L),
+  BrowseResult_Encoding_DefaultJson((int) 15183L),
+  BrowseResult_Encoding_DefaultXml((int) 523L),
+  BrowseResultMask((int) 517L),
   BuildInfo((int) 338L),
   BuildInfo_Encoding_DefaultBinary((int) 340L),
   BuildInfo_Encoding_DefaultJson((int) 15361L),
@@ -223,6 +297,30 @@ public enum OpcuaNodeIdServices {
   BuildInfoType((int) 3051L),
   Byte((int) 3L),
   ByteString((int) 15L),
+  CallMethodRequest((int) 704L),
+  CallMethodRequest_Encoding_DefaultBinary((int) 706L),
+  CallMethodRequest_Encoding_DefaultJson((int) 15289L),
+  CallMethodRequest_Encoding_DefaultXml((int) 705L),
+  CallMethodResult((int) 707L),
+  CallMethodResult_Encoding_DefaultBinary((int) 709L),
+  CallMethodResult_Encoding_DefaultJson((int) 15290L),
+  CallMethodResult_Encoding_DefaultXml((int) 708L),
+  CallRequest((int) 710L),
+  CallRequest_Encoding_DefaultBinary((int) 712L),
+  CallRequest_Encoding_DefaultJson((int) 15291L),
+  CallRequest_Encoding_DefaultXml((int) 711L),
+  CallResponse((int) 713L),
+  CallResponse_Encoding_DefaultBinary((int) 715L),
+  CallResponse_Encoding_DefaultJson((int) 15292L),
+  CallResponse_Encoding_DefaultXml((int) 714L),
+  CancelRequest((int) 477L),
+  CancelRequest_Encoding_DefaultBinary((int) 479L),
+  CancelRequest_Encoding_DefaultJson((int) 15149L),
+  CancelRequest_Encoding_DefaultXml((int) 478L),
+  CancelResponse((int) 480L),
+  CancelResponse_Encoding_DefaultBinary((int) 482L),
+  CancelResponse_Encoding_DefaultJson((int) 15150L),
+  CancelResponse_Encoding_DefaultXml((int) 481L),
   CartesianCoordinates((int) 18809L),
   CartesianCoordinates_Encoding_DefaultBinary((int) 18818L),
   CartesianCoordinates_Encoding_DefaultJson((int) 19067L),
@@ -233,7 +331,27 @@ public enum OpcuaNodeIdServices {
   CertificateGroupType((int) 12555L),
   CertificateType((int) 12556L),
   CertificateUpdatedAuditEventType((int) 12620L),
+  ChannelSecurityToken((int) 441L),
+  ChannelSecurityToken_Encoding_DefaultBinary((int) 443L),
+  ChannelSecurityToken_Encoding_DefaultJson((int) 15131L),
+  ChannelSecurityToken_Encoding_DefaultXml((int) 442L),
   ChoiceStateType((int) 15109L),
+  CloseSecureChannelRequest((int) 450L),
+  CloseSecureChannelRequest_Encoding_DefaultBinary((int) 452L),
+  CloseSecureChannelRequest_Encoding_DefaultJson((int) 15134L),
+  CloseSecureChannelRequest_Encoding_DefaultXml((int) 451L),
+  CloseSecureChannelResponse((int) 453L),
+  CloseSecureChannelResponse_Encoding_DefaultBinary((int) 455L),
+  CloseSecureChannelResponse_Encoding_DefaultJson((int) 15135L),
+  CloseSecureChannelResponse_Encoding_DefaultXml((int) 454L),
+  CloseSessionRequest((int) 471L),
+  CloseSessionRequest_Encoding_DefaultBinary((int) 473L),
+  CloseSessionRequest_Encoding_DefaultJson((int) 15147L),
+  CloseSessionRequest_Encoding_DefaultXml((int) 472L),
+  CloseSessionResponse((int) 474L),
+  CloseSessionResponse_Encoding_DefaultBinary((int) 476L),
+  CloseSessionResponse_Encoding_DefaultJson((int) 15148L),
+  CloseSessionResponse_Encoding_DefaultXml((int) 475L),
   Communication((int) 24227L),
   ComplexNumberType((int) 12171L),
   ComplexNumberType_Encoding_DefaultBinary((int) 12181L),
@@ -258,14 +376,55 @@ public enum OpcuaNodeIdServices {
   ContentFilterElement_Encoding_DefaultBinary((int) 585L),
   ContentFilterElement_Encoding_DefaultJson((int) 15204L),
   ContentFilterElement_Encoding_DefaultXml((int) 584L),
+  ContentFilterElementResult((int) 604L),
+  ContentFilterElementResult_Encoding_DefaultBinary((int) 606L),
+  ContentFilterElementResult_Encoding_DefaultJson((int) 15211L),
+  ContentFilterElementResult_Encoding_DefaultXml((int) 605L),
+  ContentFilterResult((int) 607L),
+  ContentFilterResult_Encoding_DefaultBinary((int) 609L),
+  ContentFilterResult_Encoding_DefaultJson((int) 15228L),
+  ContentFilterResult_Encoding_DefaultXml((int) 608L),
   ContinuationPoint((int) 521L),
   Counter((int) 289L),
+  CreateMonitoredItemsRequest((int) 749L),
+  CreateMonitoredItemsRequest_Encoding_DefaultBinary((int) 751L),
+  CreateMonitoredItemsRequest_Encoding_DefaultJson((int) 15323L),
+  CreateMonitoredItemsRequest_Encoding_DefaultXml((int) 750L),
+  CreateMonitoredItemsResponse((int) 752L),
+  CreateMonitoredItemsResponse_Encoding_DefaultBinary((int) 754L),
+  CreateMonitoredItemsResponse_Encoding_DefaultJson((int) 15324L),
+  CreateMonitoredItemsResponse_Encoding_DefaultXml((int) 753L),
+  CreateSessionRequest((int) 459L),
+  CreateSessionRequest_Encoding_DefaultBinary((int) 461L),
+  CreateSessionRequest_Encoding_DefaultJson((int) 15138L),
+  CreateSessionRequest_Encoding_DefaultXml((int) 460L),
+  CreateSessionResponse((int) 462L),
+  CreateSessionResponse_Encoding_DefaultBinary((int) 464L),
+  CreateSessionResponse_Encoding_DefaultJson((int) 15139L),
+  CreateSessionResponse_Encoding_DefaultXml((int) 463L),
+  CreateSubscriptionRequest((int) 785L),
+  CreateSubscriptionRequest_Encoding_DefaultBinary((int) 787L),
+  CreateSubscriptionRequest_Encoding_DefaultJson((int) 15337L),
+  CreateSubscriptionRequest_Encoding_DefaultXml((int) 786L),
+  CreateSubscriptionResponse((int) 788L),
+  CreateSubscriptionResponse_Encoding_DefaultBinary((int) 790L),
+  CreateSubscriptionResponse_Encoding_DefaultJson((int) 15338L),
+  CreateSubscriptionResponse_Encoding_DefaultXml((int) 789L),
   CubeItemType((int) 12057L),
   CurrencyUnit((int) 23501L),
   CurrencyUnitType((int) 23498L),
   CurrencyUnitType_Encoding_DefaultBinary((int) 23507L),
   CurrencyUnitType_Encoding_DefaultJson((int) 23528L),
   CurrencyUnitType_Encoding_DefaultXml((int) 23520L),
+  DataChangeFilter((int) 722L),
+  DataChangeFilter_Encoding_DefaultBinary((int) 724L),
+  DataChangeFilter_Encoding_DefaultJson((int) 15294L),
+  DataChangeFilter_Encoding_DefaultXml((int) 723L),
+  DataChangeNotification((int) 809L),
+  DataChangeNotification_Encoding_DefaultBinary((int) 811L),
+  DataChangeNotification_Encoding_DefaultJson((int) 15345L),
+  DataChangeNotification_Encoding_DefaultXml((int) 810L),
+  DataChangeTrigger((int) 717L),
   DatagramConnectionTransportDataType((int) 17467L),
   DatagramConnectionTransportDataType_Encoding_DefaultBinary((int) 17468L),
   DatagramConnectionTransportDataType_Encoding_DefaultJson((int) 17476L),
@@ -316,6 +475,10 @@ public enum OpcuaNodeIdServices {
   DataSetWriterTransportDataType_Encoding_DefaultXml((int) 15956L),
   DataSetWriterTransportType((int) 15305L),
   DataSetWriterType((int) 15298L),
+  DataTypeAttributes((int) 370L),
+  DataTypeAttributes_Encoding_DefaultBinary((int) 372L),
+  DataTypeAttributes_Encoding_DefaultJson((int) 15161L),
+  DataTypeAttributes_Encoding_DefaultXml((int) 371L),
   DataTypeDefinition((int) 97L),
   DataTypeDefinition_Encoding_DefaultBinary((int) 121L),
   DataTypeDefinition_Encoding_DefaultJson((int) 15063L),
@@ -327,6 +490,10 @@ public enum OpcuaNodeIdServices {
   DataTypeDescriptionType((int) 69L),
   DataTypeDictionaryType((int) 72L),
   DataTypeEncodingType((int) 76L),
+  DataTypeNode((int) 282L),
+  DataTypeNode_Encoding_DefaultBinary((int) 284L),
+  DataTypeNode_Encoding_DefaultJson((int) 15079L),
+  DataTypeNode_Encoding_DefaultXml((int) 283L),
   DataTypeSchemaHeader((int) 15534L),
   DataTypeSchemaHeader_Encoding_DefaultBinary((int) 15676L),
   DataTypeSchemaHeader_Encoding_DefaultJson((int) 16151L),
@@ -337,19 +504,68 @@ public enum OpcuaNodeIdServices {
   Date((int) 293L),
   DateString((int) 12881L),
   DateTime((int) 13L),
+  DeadbandType((int) 718L),
   Decimal((int) 50L),
+  DecimalDataType((int) 17861L),
+  DecimalDataType_Encoding_DefaultBinary((int) 17863L),
+  DecimalDataType_Encoding_DefaultJson((int) 15045L),
+  DecimalDataType_Encoding_DefaultXml((int) 17862L),
   DecimalString((int) 12878L),
   DefaultBinary((int) 3062L),
   DefaultInstanceBrowseName((int) 17605L),
   DefaultXml((int) 3063L),
+  DeleteAtTimeDetails((int) 689L),
+  DeleteAtTimeDetails_Encoding_DefaultBinary((int) 691L),
+  DeleteAtTimeDetails_Encoding_DefaultJson((int) 15284L),
+  DeleteAtTimeDetails_Encoding_DefaultXml((int) 690L),
+  DeleteEventDetails((int) 692L),
+  DeleteEventDetails_Encoding_DefaultBinary((int) 694L),
+  DeleteEventDetails_Encoding_DefaultJson((int) 15285L),
+  DeleteEventDetails_Encoding_DefaultXml((int) 693L),
+  DeleteMonitoredItemsRequest((int) 779L),
+  DeleteMonitoredItemsRequest_Encoding_DefaultBinary((int) 781L),
+  DeleteMonitoredItemsRequest_Encoding_DefaultJson((int) 15335L),
+  DeleteMonitoredItemsRequest_Encoding_DefaultXml((int) 780L),
+  DeleteMonitoredItemsResponse((int) 782L),
+  DeleteMonitoredItemsResponse_Encoding_DefaultBinary((int) 784L),
+  DeleteMonitoredItemsResponse_Encoding_DefaultJson((int) 15336L),
+  DeleteMonitoredItemsResponse_Encoding_DefaultXml((int) 783L),
   DeleteNodesItem((int) 382L),
   DeleteNodesItem_Encoding_DefaultBinary((int) 384L),
   DeleteNodesItem_Encoding_DefaultJson((int) 15172L),
   DeleteNodesItem_Encoding_DefaultXml((int) 383L),
+  DeleteNodesRequest((int) 498L),
+  DeleteNodesRequest_Encoding_DefaultBinary((int) 500L),
+  DeleteNodesRequest_Encoding_DefaultJson((int) 15173L),
+  DeleteNodesRequest_Encoding_DefaultXml((int) 499L),
+  DeleteNodesResponse((int) 501L),
+  DeleteNodesResponse_Encoding_DefaultBinary((int) 503L),
+  DeleteNodesResponse_Encoding_DefaultJson((int) 15174L),
+  DeleteNodesResponse_Encoding_DefaultXml((int) 502L),
+  DeleteRawModifiedDetails((int) 686L),
+  DeleteRawModifiedDetails_Encoding_DefaultBinary((int) 688L),
+  DeleteRawModifiedDetails_Encoding_DefaultJson((int) 15283L),
+  DeleteRawModifiedDetails_Encoding_DefaultXml((int) 687L),
   DeleteReferencesItem((int) 385L),
   DeleteReferencesItem_Encoding_DefaultBinary((int) 387L),
   DeleteReferencesItem_Encoding_DefaultJson((int) 15175L),
   DeleteReferencesItem_Encoding_DefaultXml((int) 386L),
+  DeleteReferencesRequest((int) 504L),
+  DeleteReferencesRequest_Encoding_DefaultBinary((int) 506L),
+  DeleteReferencesRequest_Encoding_DefaultJson((int) 15176L),
+  DeleteReferencesRequest_Encoding_DefaultXml((int) 505L),
+  DeleteReferencesResponse((int) 507L),
+  DeleteReferencesResponse_Encoding_DefaultBinary((int) 509L),
+  DeleteReferencesResponse_Encoding_DefaultJson((int) 15177L),
+  DeleteReferencesResponse_Encoding_DefaultXml((int) 508L),
+  DeleteSubscriptionsRequest((int) 845L),
+  DeleteSubscriptionsRequest_Encoding_DefaultBinary((int) 847L),
+  DeleteSubscriptionsRequest_Encoding_DefaultJson((int) 15359L),
+  DeleteSubscriptionsRequest_Encoding_DefaultXml((int) 846L),
+  DeleteSubscriptionsResponse((int) 848L),
+  DeleteSubscriptionsResponse_Encoding_DefaultBinary((int) 850L),
+  DeleteSubscriptionsResponse_Encoding_DefaultJson((int) 15360L),
+  DeleteSubscriptionsResponse_Encoding_DefaultXml((int) 849L),
   DeviceFailureEventType((int) 2131L),
   DiagnosticInfo((int) 25L),
   DiagnosticsLevel((int) 19723L),
@@ -377,6 +593,7 @@ public enum OpcuaNodeIdServices {
   EccBrainpoolP384r1ApplicationCertificateType((int) 23541L),
   EccCurve25519ApplicationCertificateType((int) 23542L),
   EccCurve448ApplicationCertificateType((int) 23543L),
+  EccEncryptedSecret((int) 17546L),
   EccNistP256ApplicationCertificateType((int) 23538L),
   EccNistP384ApplicationCertificateType((int) 23539L),
   ElementOperand((int) 592L),
@@ -428,10 +645,22 @@ public enum OpcuaNodeIdServices {
   EUInformation_Encoding_DefaultBinary((int) 889L),
   EUInformation_Encoding_DefaultJson((int) 15376L),
   EUInformation_Encoding_DefaultXml((int) 888L),
+  EventFieldList((int) 917L),
+  EventFieldList_Encoding_DefaultBinary((int) 919L),
+  EventFieldList_Encoding_DefaultJson((int) 15348L),
+  EventFieldList_Encoding_DefaultXml((int) 918L),
   EventFilter((int) 725L),
   EventFilter_Encoding_DefaultBinary((int) 727L),
   EventFilter_Encoding_DefaultJson((int) 15295L),
   EventFilter_Encoding_DefaultXml((int) 726L),
+  EventFilterResult((int) 734L),
+  EventFilterResult_Encoding_DefaultBinary((int) 736L),
+  EventFilterResult_Encoding_DefaultJson((int) 15314L),
+  EventFilterResult_Encoding_DefaultXml((int) 735L),
+  EventNotificationList((int) 914L),
+  EventNotificationList_Encoding_DefaultBinary((int) 916L),
+  EventNotificationList_Encoding_DefaultJson((int) 15347L),
+  EventNotificationList_Encoding_DefaultXml((int) 915L),
   EventNotifierType((int) 15033L),
   EventQueueOverflowEventType((int) 3035L),
   EventTypesFolder((int) 3048L),
@@ -461,6 +690,22 @@ public enum OpcuaNodeIdServices {
   FilterOperand_Encoding_DefaultJson((int) 15206L),
   FilterOperand_Encoding_DefaultXml((int) 590L),
   FilterOperator((int) 576L),
+  FindServersOnNetworkRequest((int) 12190L),
+  FindServersOnNetworkRequest_Encoding_DefaultBinary((int) 12208L),
+  FindServersOnNetworkRequest_Encoding_DefaultJson((int) 15096L),
+  FindServersOnNetworkRequest_Encoding_DefaultXml((int) 12196L),
+  FindServersOnNetworkResponse((int) 12191L),
+  FindServersOnNetworkResponse_Encoding_DefaultBinary((int) 12209L),
+  FindServersOnNetworkResponse_Encoding_DefaultJson((int) 15097L),
+  FindServersOnNetworkResponse_Encoding_DefaultXml((int) 12197L),
+  FindServersRequest((int) 420L),
+  FindServersRequest_Encoding_DefaultBinary((int) 422L),
+  FindServersRequest_Encoding_DefaultJson((int) 15093L),
+  FindServersRequest_Encoding_DefaultXml((int) 421L),
+  FindServersResponse((int) 423L),
+  FindServersResponse_Encoding_DefaultBinary((int) 425L),
+  FindServersResponse_Encoding_DefaultJson((int) 15094L),
+  FindServersResponse_Encoding_DefaultXml((int) 424L),
   FiniteStateMachineType((int) 2771L),
   FiniteStateVariableType((int) 2760L),
   FiniteTransitionVariableType((int) 2767L),
@@ -474,6 +719,22 @@ public enum OpcuaNodeIdServices {
   FromState((int) 51L),
   GeneralModelChangeEventType((int) 2133L),
   GeneratesEvent((int) 41L),
+  GenericAttributes((int) 17607L),
+  GenericAttributes_Encoding_DefaultBinary((int) 17611L),
+  GenericAttributes_Encoding_DefaultJson((int) 15164L),
+  GenericAttributes_Encoding_DefaultXml((int) 17609L),
+  GenericAttributeValue((int) 17606L),
+  GenericAttributeValue_Encoding_DefaultBinary((int) 17610L),
+  GenericAttributeValue_Encoding_DefaultJson((int) 15163L),
+  GenericAttributeValue_Encoding_DefaultXml((int) 17608L),
+  GetEndpointsRequest((int) 426L),
+  GetEndpointsRequest_Encoding_DefaultBinary((int) 428L),
+  GetEndpointsRequest_Encoding_DefaultJson((int) 15100L),
+  GetEndpointsRequest_Encoding_DefaultXml((int) 427L),
+  GetEndpointsResponse((int) 429L),
+  GetEndpointsResponse_Encoding_DefaultBinary((int) 431L),
+  GetEndpointsResponse_Encoding_DefaultJson((int) 15101L),
+  GetEndpointsResponse_Encoding_DefaultXml((int) 430L),
   GuardVariableType((int) 15113L),
   Guid((int) 14L),
   HAConfiguration((int) 11202L),
@@ -515,6 +776,10 @@ public enum OpcuaNodeIdServices {
   HighlyManagedAlarmConditionClassType((int) 17219L),
   HistoricalDataConfigurationType((int) 2318L),
   HistoricalEventFilter((int) 11215L),
+  HistoryData((int) 656L),
+  HistoryData_Encoding_DefaultBinary((int) 658L),
+  HistoryData_Encoding_DefaultJson((int) 15270L),
+  HistoryData_Encoding_DefaultXml((int) 657L),
   HistoryEvent((int) 659L),
   HistoryEvent_Encoding_DefaultBinary((int) 661L),
   HistoryEvent_Encoding_DefaultJson((int) 15273L),
@@ -523,8 +788,48 @@ public enum OpcuaNodeIdServices {
   HistoryEventFieldList_Encoding_DefaultBinary((int) 922L),
   HistoryEventFieldList_Encoding_DefaultJson((int) 15349L),
   HistoryEventFieldList_Encoding_DefaultXml((int) 921L),
+  HistoryModifiedData((int) 11217L),
+  HistoryModifiedData_Encoding_DefaultBinary((int) 11227L),
+  HistoryModifiedData_Encoding_DefaultJson((int) 15272L),
+  HistoryModifiedData_Encoding_DefaultXml((int) 11219L),
+  HistoryReadDetails((int) 641L),
+  HistoryReadDetails_Encoding_DefaultBinary((int) 643L),
+  HistoryReadDetails_Encoding_DefaultJson((int) 15261L),
+  HistoryReadDetails_Encoding_DefaultXml((int) 642L),
+  HistoryReadRequest((int) 662L),
+  HistoryReadRequest_Encoding_DefaultBinary((int) 664L),
+  HistoryReadRequest_Encoding_DefaultJson((int) 15274L),
+  HistoryReadRequest_Encoding_DefaultXml((int) 663L),
+  HistoryReadResponse((int) 665L),
+  HistoryReadResponse_Encoding_DefaultBinary((int) 667L),
+  HistoryReadResponse_Encoding_DefaultJson((int) 15275L),
+  HistoryReadResponse_Encoding_DefaultXml((int) 666L),
+  HistoryReadResult((int) 638L),
+  HistoryReadResult_Encoding_DefaultBinary((int) 640L),
+  HistoryReadResult_Encoding_DefaultJson((int) 15260L),
+  HistoryReadResult_Encoding_DefaultXml((int) 639L),
+  HistoryReadValueId((int) 635L),
+  HistoryReadValueId_Encoding_DefaultBinary((int) 637L),
+  HistoryReadValueId_Encoding_DefaultJson((int) 15259L),
+  HistoryReadValueId_Encoding_DefaultXml((int) 636L),
   HistoryServerCapabilities((int) 11192L),
   HistoryServerCapabilitiesType((int) 2330L),
+  HistoryUpdateDetails((int) 677L),
+  HistoryUpdateDetails_Encoding_DefaultBinary((int) 679L),
+  HistoryUpdateDetails_Encoding_DefaultJson((int) 15279L),
+  HistoryUpdateDetails_Encoding_DefaultXml((int) 678L),
+  HistoryUpdateRequest((int) 698L),
+  HistoryUpdateRequest_Encoding_DefaultBinary((int) 700L),
+  HistoryUpdateRequest_Encoding_DefaultJson((int) 15287L),
+  HistoryUpdateRequest_Encoding_DefaultXml((int) 699L),
+  HistoryUpdateResponse((int) 701L),
+  HistoryUpdateResponse_Encoding_DefaultBinary((int) 703L),
+  HistoryUpdateResponse_Encoding_DefaultJson((int) 15288L),
+  HistoryUpdateResponse_Encoding_DefaultXml((int) 702L),
+  HistoryUpdateResult((int) 695L),
+  HistoryUpdateResult_Encoding_DefaultBinary((int) 697L),
+  HistoryUpdateResult_Encoding_DefaultJson((int) 15286L),
+  HistoryUpdateResult_Encoding_DefaultXml((int) 696L),
   HistoryUpdateType((int) 11234L),
   HttpsCertificateType((int) 12558L),
   IBaseEthernetCapabilitiesType((int) 24167L),
@@ -555,6 +860,10 @@ public enum OpcuaNodeIdServices {
   Index((int) 17588L),
   InitialStateType((int) 2309L),
   InputArguments((int) 3072L),
+  InstanceNode((int) 11879L),
+  InstanceNode_Encoding_DefaultBinary((int) 11889L),
+  InstanceNode_Encoding_DefaultJson((int) 15069L),
+  InstanceNode_Encoding_DefaultXml((int) 11887L),
   InstrumentDiagnosticAlarmType((int) 18347L),
   Int16((int) 4L),
   Int32((int) 6L),
@@ -619,20 +928,78 @@ public enum OpcuaNodeIdServices {
   MdnsDiscoveryConfiguration_Encoding_DefaultJson((int) 15106L),
   MdnsDiscoveryConfiguration_Encoding_DefaultXml((int) 12893L),
   MessageSecurityMode((int) 302L),
+  MethodAttributes((int) 358L),
+  MethodAttributes_Encoding_DefaultBinary((int) 360L),
+  MethodAttributes_Encoding_DefaultJson((int) 15157L),
+  MethodAttributes_Encoding_DefaultXml((int) 359L),
+  MethodNode((int) 276L),
+  MethodNode_Encoding_DefaultBinary((int) 278L),
+  MethodNode_Encoding_DefaultJson((int) 15077L),
+  MethodNode_Encoding_DefaultXml((int) 277L),
   ModelChangeStructureDataType((int) 877L),
   ModelChangeStructureDataType_Encoding_DefaultBinary((int) 879L),
   ModelChangeStructureDataType_Encoding_DefaultJson((int) 15373L),
   ModelChangeStructureDataType_Encoding_DefaultXml((int) 878L),
+  ModelChangeStructureVerbMask((int) 11941L),
   ModellingRule_ExposesItsArray((int) 83L),
   ModellingRule_Mandatory((int) 78L),
   ModellingRule_MandatoryPlaceholder((int) 11510L),
   ModellingRule_Optional((int) 80L),
   ModellingRule_OptionalPlaceholder((int) 11508L),
   ModellingRuleType((int) 77L),
+  ModificationInfo((int) 11216L),
+  ModificationInfo_Encoding_DefaultBinary((int) 11226L),
+  ModificationInfo_Encoding_DefaultJson((int) 15271L),
+  ModificationInfo_Encoding_DefaultXml((int) 11218L),
+  ModifyMonitoredItemsRequest((int) 761L),
+  ModifyMonitoredItemsRequest_Encoding_DefaultBinary((int) 763L),
+  ModifyMonitoredItemsRequest_Encoding_DefaultJson((int) 15327L),
+  ModifyMonitoredItemsRequest_Encoding_DefaultXml((int) 762L),
+  ModifyMonitoredItemsResponse((int) 764L),
+  ModifyMonitoredItemsResponse_Encoding_DefaultBinary((int) 766L),
+  ModifyMonitoredItemsResponse_Encoding_DefaultJson((int) 15328L),
+  ModifyMonitoredItemsResponse_Encoding_DefaultXml((int) 765L),
+  ModifySubscriptionRequest((int) 791L),
+  ModifySubscriptionRequest_Encoding_DefaultBinary((int) 793L),
+  ModifySubscriptionRequest_Encoding_DefaultJson((int) 15339L),
+  ModifySubscriptionRequest_Encoding_DefaultXml((int) 792L),
+  ModifySubscriptionResponse((int) 794L),
+  ModifySubscriptionResponse_Encoding_DefaultBinary((int) 796L),
+  ModifySubscriptionResponse_Encoding_DefaultJson((int) 15340L),
+  ModifySubscriptionResponse_Encoding_DefaultXml((int) 795L),
+  MonitoredItemCreateRequest((int) 743L),
+  MonitoredItemCreateRequest_Encoding_DefaultBinary((int) 745L),
+  MonitoredItemCreateRequest_Encoding_DefaultJson((int) 15321L),
+  MonitoredItemCreateRequest_Encoding_DefaultXml((int) 744L),
+  MonitoredItemCreateResult((int) 746L),
+  MonitoredItemCreateResult_Encoding_DefaultBinary((int) 748L),
+  MonitoredItemCreateResult_Encoding_DefaultJson((int) 15322L),
+  MonitoredItemCreateResult_Encoding_DefaultXml((int) 747L),
+  MonitoredItemModifyRequest((int) 755L),
+  MonitoredItemModifyRequest_Encoding_DefaultBinary((int) 757L),
+  MonitoredItemModifyRequest_Encoding_DefaultJson((int) 15325L),
+  MonitoredItemModifyRequest_Encoding_DefaultXml((int) 756L),
+  MonitoredItemModifyResult((int) 758L),
+  MonitoredItemModifyResult_Encoding_DefaultBinary((int) 760L),
+  MonitoredItemModifyResult_Encoding_DefaultJson((int) 15326L),
+  MonitoredItemModifyResult_Encoding_DefaultXml((int) 759L),
+  MonitoredItemNotification((int) 806L),
+  MonitoredItemNotification_Encoding_DefaultBinary((int) 808L),
+  MonitoredItemNotification_Encoding_DefaultJson((int) 15346L),
+  MonitoredItemNotification_Encoding_DefaultXml((int) 807L),
   MonitoringFilter((int) 719L),
   MonitoringFilter_Encoding_DefaultBinary((int) 721L),
   MonitoringFilter_Encoding_DefaultJson((int) 15293L),
   MonitoringFilter_Encoding_DefaultXml((int) 720L),
+  MonitoringFilterResult((int) 731L),
+  MonitoringFilterResult_Encoding_DefaultBinary((int) 733L),
+  MonitoringFilterResult_Encoding_DefaultJson((int) 15313L),
+  MonitoringFilterResult_Encoding_DefaultXml((int) 732L),
+  MonitoringMode((int) 716L),
+  MonitoringParameters((int) 740L),
+  MonitoringParameters_Encoding_DefaultBinary((int) 742L),
+  MonitoringParameters_Encoding_DefaultJson((int) 15320L),
+  MonitoringParameters_Encoding_DefaultXml((int) 741L),
   MultiStateDictionaryEntryDiscreteBaseType((int) 19077L),
   MultiStateDictionaryEntryDiscreteType((int) 19084L),
   MultiStateDiscreteType((int) 2376L),
@@ -657,9 +1024,25 @@ public enum OpcuaNodeIdServices {
   NetworkGroupDataType_Encoding_DefaultJson((int) 15364L),
   NetworkGroupDataType_Encoding_DefaultXml((int) 11950L),
   NetworkInterfaces((int) 24229L),
+  Node((int) 258L),
+  Node_Encoding_DefaultBinary((int) 260L),
+  Node_Encoding_DefaultJson((int) 15068L),
+  Node_Encoding_DefaultXml((int) 259L),
+  NodeAttributes((int) 349L),
+  NodeAttributes_Encoding_DefaultBinary((int) 351L),
+  NodeAttributes_Encoding_DefaultJson((int) 15151L),
+  NodeAttributes_Encoding_DefaultXml((int) 350L),
   NodeAttributesMask((int) 348L),
   NodeClass((int) 257L),
   NodeId((int) 17L),
+  NodeReference((int) 580L),
+  NodeReference_Encoding_DefaultBinary((int) 582L),
+  NodeReference_Encoding_DefaultJson((int) 15203L),
+  NodeReference_Encoding_DefaultXml((int) 581L),
+  NodeTypeDescription((int) 573L),
+  NodeTypeDescription_Encoding_DefaultBinary((int) 575L),
+  NodeTypeDescription_Encoding_DefaultJson((int) 15201L),
+  NodeTypeDescription_Encoding_DefaultXml((int) 574L),
   NodeVersion((int) 3068L),
   NonExclusiveDeviationAlarmType((int) 10368L),
   NonExclusiveLevelAlarmType((int) 10060L),
@@ -669,9 +1052,33 @@ public enum OpcuaNodeIdServices {
   NonTransparentNetworkRedundancyType((int) 11945L),
   NonTransparentRedundancyType((int) 2039L),
   NormalizedString((int) 12877L),
+  NotificationData((int) 945L),
+  NotificationData_Encoding_DefaultBinary((int) 947L),
+  NotificationData_Encoding_DefaultJson((int) 15344L),
+  NotificationData_Encoding_DefaultXml((int) 946L),
+  NotificationMessage((int) 803L),
+  NotificationMessage_Encoding_DefaultBinary((int) 805L),
+  NotificationMessage_Encoding_DefaultJson((int) 15343L),
+  NotificationMessage_Encoding_DefaultXml((int) 804L),
   Number((int) 26L),
   NumericRange((int) 291L),
+  ObjectAttributes((int) 352L),
+  ObjectAttributes_Encoding_DefaultBinary((int) 354L),
+  ObjectAttributes_Encoding_DefaultJson((int) 15152L),
+  ObjectAttributes_Encoding_DefaultXml((int) 353L),
+  ObjectNode((int) 261L),
+  ObjectNode_Encoding_DefaultBinary((int) 263L),
+  ObjectNode_Encoding_DefaultJson((int) 15071L),
+  ObjectNode_Encoding_DefaultXml((int) 262L),
   ObjectsFolder((int) 85L),
+  ObjectTypeAttributes((int) 361L),
+  ObjectTypeAttributes_Encoding_DefaultBinary((int) 363L),
+  ObjectTypeAttributes_Encoding_DefaultJson((int) 15158L),
+  ObjectTypeAttributes_Encoding_DefaultXml((int) 362L),
+  ObjectTypeNode((int) 264L),
+  ObjectTypeNode_Encoding_DefaultBinary((int) 266L),
+  ObjectTypeNode_Encoding_DefaultJson((int) 15073L),
+  ObjectTypeNode_Encoding_DefaultXml((int) 265L),
   ObjectTypesFolder((int) 88L),
   OffNormalAlarmType((int) 10637L),
   OPCBinarySchema_TypeSystem((int) 93L),
@@ -679,6 +1086,14 @@ public enum OpcuaNodeIdServices {
   OpcUa_XmlSchema((int) 8252L),
   OPCUANamespaceMetadata((int) 15957L),
   OpenFileMode((int) 11939L),
+  OpenSecureChannelRequest((int) 444L),
+  OpenSecureChannelRequest_Encoding_DefaultBinary((int) 446L),
+  OpenSecureChannelRequest_Encoding_DefaultJson((int) 15132L),
+  OpenSecureChannelRequest_Encoding_DefaultXml((int) 445L),
+  OpenSecureChannelResponse((int) 447L),
+  OpenSecureChannelResponse_Encoding_DefaultBinary((int) 449L),
+  OpenSecureChannelResponse_Encoding_DefaultJson((int) 15133L),
+  OpenSecureChannelResponse_Encoding_DefaultXml((int) 448L),
   OperationLimitsType((int) 11564L),
   OptionSet((int) 12755L),
   OptionSet_Encoding_DefaultBinary((int) 12765L),
@@ -695,6 +1110,10 @@ public enum OpcuaNodeIdServices {
   OrientationType((int) 18779L),
   OutputArguments((int) 3073L),
   OverrideValueHandling((int) 15874L),
+  ParsingResult((int) 610L),
+  ParsingResult_Encoding_DefaultBinary((int) 612L),
+  ParsingResult_Encoding_DefaultJson((int) 15236L),
+  ParsingResult_Encoding_DefaultXml((int) 611L),
   PerformUpdateType((int) 11293L),
   PermissionType((int) 94L),
   ProcessConditionClassType((int) 11164L),
@@ -736,6 +1155,14 @@ public enum OpcuaNodeIdServices {
   PublishedVariableDataType_Encoding_DefaultBinary((int) 14323L),
   PublishedVariableDataType_Encoding_DefaultJson((int) 15060L),
   PublishedVariableDataType_Encoding_DefaultXml((int) 14319L),
+  PublishRequest((int) 824L),
+  PublishRequest_Encoding_DefaultBinary((int) 826L),
+  PublishRequest_Encoding_DefaultJson((int) 15352L),
+  PublishRequest_Encoding_DefaultXml((int) 825L),
+  PublishResponse((int) 827L),
+  PublishResponse_Encoding_DefaultBinary((int) 829L),
+  PublishResponse_Encoding_DefaultJson((int) 15353L),
+  PublishResponse_Encoding_DefaultXml((int) 828L),
   PublishSubscribe((int) 14443L),
   PublishSubscribeType((int) 14416L),
   PubSubCommunicationFailureEventType((int) 15563L),
@@ -768,6 +1195,30 @@ public enum OpcuaNodeIdServices {
   PubSubStatusType((int) 14643L),
   PubSubTransportLimitsExceedEventType((int) 15548L),
   QualifiedName((int) 20L),
+  QueryDataDescription((int) 570L),
+  QueryDataDescription_Encoding_DefaultBinary((int) 572L),
+  QueryDataDescription_Encoding_DefaultJson((int) 15200L),
+  QueryDataDescription_Encoding_DefaultXml((int) 571L),
+  QueryDataSet((int) 577L),
+  QueryDataSet_Encoding_DefaultBinary((int) 579L),
+  QueryDataSet_Encoding_DefaultJson((int) 15202L),
+  QueryDataSet_Encoding_DefaultXml((int) 578L),
+  QueryFirstRequest((int) 613L),
+  QueryFirstRequest_Encoding_DefaultBinary((int) 615L),
+  QueryFirstRequest_Encoding_DefaultJson((int) 15244L),
+  QueryFirstRequest_Encoding_DefaultXml((int) 614L),
+  QueryFirstResponse((int) 616L),
+  QueryFirstResponse_Encoding_DefaultBinary((int) 618L),
+  QueryFirstResponse_Encoding_DefaultJson((int) 15252L),
+  QueryFirstResponse_Encoding_DefaultXml((int) 617L),
+  QueryNextRequest((int) 619L),
+  QueryNextRequest_Encoding_DefaultBinary((int) 621L),
+  QueryNextRequest_Encoding_DefaultJson((int) 15254L),
+  QueryNextRequest_Encoding_DefaultXml((int) 620L),
+  QueryNextResponse((int) 622L),
+  QueryNextResponse_Encoding_DefaultBinary((int) 624L),
+  QueryNextResponse_Encoding_DefaultJson((int) 15255L),
+  QueryNextResponse_Encoding_DefaultXml((int) 623L),
   Range((int) 884L),
   Range_Encoding_DefaultBinary((int) 886L),
   Range_Encoding_DefaultJson((int) 15375L),
@@ -777,6 +1228,14 @@ public enum OpcuaNodeIdServices {
   RationalNumber_Encoding_DefaultJson((int) 19064L),
   RationalNumber_Encoding_DefaultXml((int) 18851L),
   RationalNumberType((int) 17709L),
+  ReadAnnotationDataDetails((int) 23497L),
+  ReadAnnotationDataDetails_Encoding_DefaultBinary((int) 23500L),
+  ReadAnnotationDataDetails_Encoding_DefaultJson((int) 23512L),
+  ReadAnnotationDataDetails_Encoding_DefaultXml((int) 23506L),
+  ReadAtTimeDetails((int) 653L),
+  ReadAtTimeDetails_Encoding_DefaultBinary((int) 655L),
+  ReadAtTimeDetails_Encoding_DefaultJson((int) 15269L),
+  ReadAtTimeDetails_Encoding_DefaultXml((int) 654L),
   ReaderGroupDataType((int) 15520L),
   ReaderGroupDataType_Encoding_DefaultBinary((int) 21153L),
   ReaderGroupDataType_Encoding_DefaultJson((int) 21201L),
@@ -792,12 +1251,52 @@ public enum OpcuaNodeIdServices {
   ReaderGroupTransportDataType_Encoding_DefaultXml((int) 15995L),
   ReaderGroupTransportType((int) 21090L),
   ReaderGroupType((int) 17999L),
+  ReadEventDetails((int) 644L),
+  ReadEventDetails_Encoding_DefaultBinary((int) 646L),
+  ReadEventDetails_Encoding_DefaultJson((int) 15262L),
+  ReadEventDetails_Encoding_DefaultXml((int) 645L),
+  ReadProcessedDetails((int) 650L),
+  ReadProcessedDetails_Encoding_DefaultBinary((int) 652L),
+  ReadProcessedDetails_Encoding_DefaultJson((int) 15264L),
+  ReadProcessedDetails_Encoding_DefaultXml((int) 651L),
+  ReadRawModifiedDetails((int) 647L),
+  ReadRawModifiedDetails_Encoding_DefaultBinary((int) 649L),
+  ReadRawModifiedDetails_Encoding_DefaultJson((int) 15263L),
+  ReadRawModifiedDetails_Encoding_DefaultXml((int) 648L),
+  ReadRequest((int) 629L),
+  ReadRequest_Encoding_DefaultBinary((int) 631L),
+  ReadRequest_Encoding_DefaultJson((int) 15257L),
+  ReadRequest_Encoding_DefaultXml((int) 630L),
+  ReadResponse((int) 632L),
+  ReadResponse_Encoding_DefaultBinary((int) 634L),
+  ReadResponse_Encoding_DefaultJson((int) 15258L),
+  ReadResponse_Encoding_DefaultXml((int) 633L),
+  ReadValueId((int) 626L),
+  ReadValueId_Encoding_DefaultBinary((int) 628L),
+  ReadValueId_Encoding_DefaultJson((int) 15256L),
+  ReadValueId_Encoding_DefaultXml((int) 627L),
   RedundancySupport((int) 851L),
   RedundantServerDataType((int) 853L),
   RedundantServerDataType_Encoding_DefaultBinary((int) 855L),
   RedundantServerDataType_Encoding_DefaultJson((int) 15362L),
   RedundantServerDataType_Encoding_DefaultXml((int) 854L),
+  ReferenceDescription((int) 518L),
+  ReferenceDescription_Encoding_DefaultBinary((int) 520L),
+  ReferenceDescription_Encoding_DefaultJson((int) 15182L),
+  ReferenceDescription_Encoding_DefaultXml((int) 519L),
+  ReferenceNode((int) 285L),
+  ReferenceNode_Encoding_DefaultBinary((int) 287L),
+  ReferenceNode_Encoding_DefaultJson((int) 15080L),
+  ReferenceNode_Encoding_DefaultXml((int) 286L),
   References((int) 31L),
+  ReferenceTypeAttributes((int) 367L),
+  ReferenceTypeAttributes_Encoding_DefaultBinary((int) 369L),
+  ReferenceTypeAttributes_Encoding_DefaultJson((int) 15160L),
+  ReferenceTypeAttributes_Encoding_DefaultXml((int) 368L),
+  ReferenceTypeNode((int) 273L),
+  ReferenceTypeNode_Encoding_DefaultBinary((int) 275L),
+  ReferenceTypeNode_Encoding_DefaultJson((int) 15076L),
+  ReferenceTypeNode_Encoding_DefaultXml((int) 274L),
   ReferenceTypesFolder((int) 91L),
   RefreshEndEventType((int) 2788L),
   RefreshRequiredEventType((int) 2789L),
@@ -806,6 +1305,30 @@ public enum OpcuaNodeIdServices {
   RegisteredServer_Encoding_DefaultBinary((int) 434L),
   RegisteredServer_Encoding_DefaultJson((int) 15102L),
   RegisteredServer_Encoding_DefaultXml((int) 433L),
+  RegisterNodesRequest((int) 558L),
+  RegisterNodesRequest_Encoding_DefaultBinary((int) 560L),
+  RegisterNodesRequest_Encoding_DefaultJson((int) 15195L),
+  RegisterNodesRequest_Encoding_DefaultXml((int) 559L),
+  RegisterNodesResponse((int) 561L),
+  RegisterNodesResponse_Encoding_DefaultBinary((int) 563L),
+  RegisterNodesResponse_Encoding_DefaultJson((int) 15196L),
+  RegisterNodesResponse_Encoding_DefaultXml((int) 562L),
+  RegisterServer2Request((int) 12193L),
+  RegisterServer2Request_Encoding_DefaultBinary((int) 12211L),
+  RegisterServer2Request_Encoding_DefaultJson((int) 15107L),
+  RegisterServer2Request_Encoding_DefaultXml((int) 12199L),
+  RegisterServer2Response((int) 12194L),
+  RegisterServer2Response_Encoding_DefaultBinary((int) 12212L),
+  RegisterServer2Response_Encoding_DefaultJson((int) 15130L),
+  RegisterServer2Response_Encoding_DefaultXml((int) 12200L),
+  RegisterServerRequest((int) 435L),
+  RegisterServerRequest_Encoding_DefaultBinary((int) 437L),
+  RegisterServerRequest_Encoding_DefaultJson((int) 15103L),
+  RegisterServerRequest_Encoding_DefaultXml((int) 436L),
+  RegisterServerResponse((int) 438L),
+  RegisterServerResponse_Encoding_DefaultBinary((int) 440L),
+  RegisterServerResponse_Encoding_DefaultJson((int) 15104L),
+  RegisterServerResponse_Encoding_DefaultXml((int) 439L),
   RelativePath((int) 540L),
   RelativePath_Encoding_DefaultBinary((int) 542L),
   RelativePath_Encoding_DefaultJson((int) 15189L),
@@ -814,7 +1337,23 @@ public enum OpcuaNodeIdServices {
   RelativePathElement_Encoding_DefaultBinary((int) 539L),
   RelativePathElement_Encoding_DefaultJson((int) 15188L),
   RelativePathElement_Encoding_DefaultXml((int) 538L),
+  RepublishRequest((int) 830L),
+  RepublishRequest_Encoding_DefaultBinary((int) 832L),
+  RepublishRequest_Encoding_DefaultJson((int) 15354L),
+  RepublishRequest_Encoding_DefaultXml((int) 831L),
+  RepublishResponse((int) 833L),
+  RepublishResponse_Encoding_DefaultBinary((int) 835L),
+  RepublishResponse_Encoding_DefaultJson((int) 15355L),
+  RepublishResponse_Encoding_DefaultXml((int) 834L),
+  RequestHeader((int) 389L),
+  RequestHeader_Encoding_DefaultBinary((int) 391L),
+  RequestHeader_Encoding_DefaultJson((int) 15088L),
+  RequestHeader_Encoding_DefaultXml((int) 390L),
   Resources((int) 24226L),
+  ResponseHeader((int) 392L),
+  ResponseHeader_Encoding_DefaultBinary((int) 394L),
+  ResponseHeader_Encoding_DefaultJson((int) 15089L),
+  ResponseHeader_Encoding_DefaultXml((int) 393L),
   RoleMappingRuleChangedAuditEventType((int) 17641L),
   RolePermissionType((int) 96L),
   RolePermissionType_Encoding_DefaultBinary((int) 128L),
@@ -823,6 +1362,7 @@ public enum OpcuaNodeIdServices {
   RoleSetType((int) 15607L),
   RoleType((int) 15620L),
   RootFolder((int) 84L),
+  RsaEncryptedSecret((int) 17545L),
   RsaMinApplicationCertificateType((int) 12559L),
   RsaSha256ApplicationCertificateType((int) 12560L),
   SafetyConditionClassType((int) 17218L),
@@ -873,6 +1413,10 @@ public enum OpcuaNodeIdServices {
   ServiceCounterDataType_Encoding_DefaultBinary((int) 873L),
   ServiceCounterDataType_Encoding_DefaultJson((int) 15370L),
   ServiceCounterDataType_Encoding_DefaultXml((int) 872L),
+  ServiceFault((int) 395L),
+  ServiceFault_Encoding_DefaultBinary((int) 397L),
+  ServiceFault_Encoding_DefaultJson((int) 15090L),
+  ServiceFault_Encoding_DefaultXml((int) 396L),
   SessionAuthenticationToken((int) 388L),
   SessionDiagnosticsArrayType((int) 2196L),
   SessionDiagnosticsDataType((int) 865L),
@@ -881,6 +1425,14 @@ public enum OpcuaNodeIdServices {
   SessionDiagnosticsDataType_Encoding_DefaultXml((int) 866L),
   SessionDiagnosticsObjectType((int) 2029L),
   SessionDiagnosticsVariableType((int) 2197L),
+  SessionlessInvokeRequestType((int) 15901L),
+  SessionlessInvokeRequestType_Encoding_DefaultBinary((int) 15903L),
+  SessionlessInvokeRequestType_Encoding_DefaultJson((int) 15091L),
+  SessionlessInvokeRequestType_Encoding_DefaultXml((int) 15902L),
+  SessionlessInvokeResponseType((int) 20999L),
+  SessionlessInvokeResponseType_Encoding_DefaultBinary((int) 21001L),
+  SessionlessInvokeResponseType_Encoding_DefaultJson((int) 15092L),
+  SessionlessInvokeResponseType_Encoding_DefaultXml((int) 21000L),
   SessionsDiagnosticsSummaryType((int) 2026L),
   SessionSecurityDiagnosticsArrayType((int) 2243L),
   SessionSecurityDiagnosticsDataType((int) 868L),
@@ -888,7 +1440,35 @@ public enum OpcuaNodeIdServices {
   SessionSecurityDiagnosticsDataType_Encoding_DefaultJson((int) 15369L),
   SessionSecurityDiagnosticsDataType_Encoding_DefaultXml((int) 869L),
   SessionSecurityDiagnosticsType((int) 2244L),
+  SetMonitoringModeRequest((int) 767L),
+  SetMonitoringModeRequest_Encoding_DefaultBinary((int) 769L),
+  SetMonitoringModeRequest_Encoding_DefaultJson((int) 15329L),
+  SetMonitoringModeRequest_Encoding_DefaultXml((int) 768L),
+  SetMonitoringModeResponse((int) 770L),
+  SetMonitoringModeResponse_Encoding_DefaultBinary((int) 772L),
+  SetMonitoringModeResponse_Encoding_DefaultJson((int) 15331L),
+  SetMonitoringModeResponse_Encoding_DefaultXml((int) 771L),
+  SetPublishingModeRequest((int) 797L),
+  SetPublishingModeRequest_Encoding_DefaultBinary((int) 799L),
+  SetPublishingModeRequest_Encoding_DefaultJson((int) 15341L),
+  SetPublishingModeRequest_Encoding_DefaultXml((int) 798L),
+  SetPublishingModeResponse((int) 800L),
+  SetPublishingModeResponse_Encoding_DefaultBinary((int) 802L),
+  SetPublishingModeResponse_Encoding_DefaultJson((int) 15342L),
+  SetPublishingModeResponse_Encoding_DefaultXml((int) 801L),
+  SetTriggeringRequest((int) 773L),
+  SetTriggeringRequest_Encoding_DefaultBinary((int) 775L),
+  SetTriggeringRequest_Encoding_DefaultJson((int) 15332L),
+  SetTriggeringRequest_Encoding_DefaultXml((int) 774L),
+  SetTriggeringResponse((int) 776L),
+  SetTriggeringResponse_Encoding_DefaultBinary((int) 778L),
+  SetTriggeringResponse_Encoding_DefaultJson((int) 15333L),
+  SetTriggeringResponse_Encoding_DefaultXml((int) 777L),
   ShelvedStateMachineType((int) 2929L),
+  SignatureData((int) 456L),
+  SignatureData_Encoding_DefaultBinary((int) 458L),
+  SignatureData_Encoding_DefaultJson((int) 15137L),
+  SignatureData_Encoding_DefaultXml((int) 457L),
   SignedSoftwareCertificate((int) 344L),
   SignedSoftwareCertificate_Encoding_DefaultBinary((int) 346L),
   SignedSoftwareCertificate_Encoding_DefaultJson((int) 15136L),
@@ -905,6 +1485,10 @@ public enum OpcuaNodeIdServices {
   StateType((int) 2307L),
   StateVariableType((int) 2755L),
   StatisticalConditionClassType((int) 18665L),
+  StatusChangeNotification((int) 818L),
+  StatusChangeNotification_Encoding_DefaultBinary((int) 820L),
+  StatusChangeNotification_Encoding_DefaultJson((int) 15350L),
+  StatusChangeNotification_Encoding_DefaultXml((int) 819L),
   StatusCode((int) 19L),
   StatusResult((int) 299L),
   StatusResult_Encoding_DefaultBinary((int) 301L),
@@ -936,6 +1520,10 @@ public enum OpcuaNodeIdServices {
   SubscribedDataSetMirrorDataType_Encoding_DefaultXml((int) 16012L),
   SubscribedDataSetMirrorType((int) 15127L),
   SubscribedDataSetType((int) 15108L),
+  SubscriptionAcknowledgement((int) 821L),
+  SubscriptionAcknowledgement_Encoding_DefaultBinary((int) 823L),
+  SubscriptionAcknowledgement_Encoding_DefaultJson((int) 15351L),
+  SubscriptionAcknowledgement_Encoding_DefaultXml((int) 822L),
   SubscriptionDiagnosticsArrayType((int) 2171L),
   SubscriptionDiagnosticsDataType((int) 874L),
   SubscriptionDiagnosticsDataType_Encoding_DefaultBinary((int) 876L),
@@ -977,6 +1565,7 @@ public enum OpcuaNodeIdServices {
   ThreeDVector_Encoding_DefaultXml((int) 18853L),
   ThreeDVectorType((int) 17716L),
   Time((int) 292L),
+  TimestampsToReturn((int) 625L),
   TimeString((int) 12880L),
   TimeZoneDataType((int) 8912L),
   TimeZoneDataType_Encoding_DefaultBinary((int) 8917L),
@@ -985,9 +1574,29 @@ public enum OpcuaNodeIdServices {
   Topics((int) 23488L),
   ToState((int) 52L),
   TrainingConditionClassType((int) 17220L),
+  TransferResult((int) 836L),
+  TransferResult_Encoding_DefaultBinary((int) 838L),
+  TransferResult_Encoding_DefaultJson((int) 15356L),
+  TransferResult_Encoding_DefaultXml((int) 837L),
+  TransferSubscriptionsRequest((int) 839L),
+  TransferSubscriptionsRequest_Encoding_DefaultBinary((int) 841L),
+  TransferSubscriptionsRequest_Encoding_DefaultJson((int) 15357L),
+  TransferSubscriptionsRequest_Encoding_DefaultXml((int) 840L),
+  TransferSubscriptionsResponse((int) 842L),
+  TransferSubscriptionsResponse_Encoding_DefaultBinary((int) 844L),
+  TransferSubscriptionsResponse_Encoding_DefaultJson((int) 15358L),
+  TransferSubscriptionsResponse_Encoding_DefaultXml((int) 843L),
   TransitionEventType((int) 2311L),
   TransitionType((int) 2310L),
   TransitionVariableType((int) 2762L),
+  TranslateBrowsePathsToNodeIdsRequest((int) 552L),
+  TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary((int) 554L),
+  TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultJson((int) 15193L),
+  TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml((int) 553L),
+  TranslateBrowsePathsToNodeIdsResponse((int) 555L),
+  TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary((int) 557L),
+  TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultJson((int) 15194L),
+  TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml((int) 556L),
   TransparentRedundancyType((int) 2036L),
   TripAlarmType((int) 10751L),
   TrustListDataType((int) 12554L),
@@ -1004,6 +1613,10 @@ public enum OpcuaNodeIdServices {
   TsnTalkerStatus((int) 24222L),
   TwoStateDiscreteType((int) 2373L),
   TwoStateVariableType((int) 8995L),
+  TypeNode((int) 11880L),
+  TypeNode_Encoding_DefaultBinary((int) 11890L),
+  TypeNode_Encoding_DefaultJson((int) 15070L),
+  TypeNode_Encoding_DefaultXml((int) 11888L),
   TypesFolder((int) 86L),
   UABinaryFileDataType((int) 15006L),
   UABinaryFileDataType_Encoding_DefaultBinary((int) 15422L),
@@ -1034,10 +1647,30 @@ public enum OpcuaNodeIdServices {
   Union_Encoding_DefaultBinary((int) 12766L),
   Union_Encoding_DefaultJson((int) 15085L),
   Union_Encoding_DefaultXml((int) 12758L),
+  UnregisterNodesRequest((int) 564L),
+  UnregisterNodesRequest_Encoding_DefaultBinary((int) 566L),
+  UnregisterNodesRequest_Encoding_DefaultJson((int) 15197L),
+  UnregisterNodesRequest_Encoding_DefaultXml((int) 565L),
+  UnregisterNodesResponse((int) 567L),
+  UnregisterNodesResponse_Encoding_DefaultBinary((int) 569L),
+  UnregisterNodesResponse_Encoding_DefaultJson((int) 15198L),
+  UnregisterNodesResponse_Encoding_DefaultXml((int) 568L),
   UnsignedRationalNumber((int) 24107L),
   UnsignedRationalNumber_Encoding_DefaultBinary((int) 24110L),
   UnsignedRationalNumber_Encoding_DefaultJson((int) 24134L),
   UnsignedRationalNumber_Encoding_DefaultXml((int) 24122L),
+  UpdateDataDetails((int) 680L),
+  UpdateDataDetails_Encoding_DefaultBinary((int) 682L),
+  UpdateDataDetails_Encoding_DefaultJson((int) 15280L),
+  UpdateDataDetails_Encoding_DefaultXml((int) 681L),
+  UpdateEventDetails((int) 683L),
+  UpdateEventDetails_Encoding_DefaultBinary((int) 685L),
+  UpdateEventDetails_Encoding_DefaultJson((int) 15282L),
+  UpdateEventDetails_Encoding_DefaultXml((int) 684L),
+  UpdateStructureDataDetails((int) 11295L),
+  UpdateStructureDataDetails_Encoding_DefaultBinary((int) 11300L),
+  UpdateStructureDataDetails_Encoding_DefaultJson((int) 15281L),
+  UpdateStructureDataDetails_Encoding_DefaultXml((int) 11296L),
   UriDictionaryEntryType((int) 17600L),
   UserCredentialCertificateType((int) 15181L),
   UserIdentityToken((int) 316L),
@@ -1055,6 +1688,22 @@ public enum OpcuaNodeIdServices {
   UserTokenType((int) 303L),
   UtcTime((int) 294L),
   ValueAsText((int) 11433L),
+  VariableAttributes((int) 355L),
+  VariableAttributes_Encoding_DefaultBinary((int) 357L),
+  VariableAttributes_Encoding_DefaultJson((int) 15153L),
+  VariableAttributes_Encoding_DefaultXml((int) 356L),
+  VariableNode((int) 267L),
+  VariableNode_Encoding_DefaultBinary((int) 269L),
+  VariableNode_Encoding_DefaultJson((int) 15074L),
+  VariableNode_Encoding_DefaultXml((int) 268L),
+  VariableTypeAttributes((int) 364L),
+  VariableTypeAttributes_Encoding_DefaultBinary((int) 366L),
+  VariableTypeAttributes_Encoding_DefaultJson((int) 15159L),
+  VariableTypeAttributes_Encoding_DefaultXml((int) 365L),
+  VariableTypeNode((int) 270L),
+  VariableTypeNode_Encoding_DefaultBinary((int) 272L),
+  VariableTypeNode_Encoding_DefaultJson((int) 15075L),
+  VariableTypeNode_Encoding_DefaultXml((int) 271L),
   VariableTypesFolder((int) 89L),
   Vector((int) 18807L),
   Vector_Encoding_DefaultBinary((int) 18816L),
@@ -1063,6 +1712,18 @@ public enum OpcuaNodeIdServices {
   VectorType((int) 17714L),
   VendorServerInfoType((int) 2033L),
   VersionTime((int) 20998L),
+  ViewAttributes((int) 373L),
+  ViewAttributes_Encoding_DefaultBinary((int) 375L),
+  ViewAttributes_Encoding_DefaultJson((int) 15162L),
+  ViewAttributes_Encoding_DefaultXml((int) 374L),
+  ViewDescription((int) 511L),
+  ViewDescription_Encoding_DefaultBinary((int) 513L),
+  ViewDescription_Encoding_DefaultJson((int) 15179L),
+  ViewDescription_Encoding_DefaultXml((int) 512L),
+  ViewNode((int) 279L),
+  ViewNode_Encoding_DefaultBinary((int) 281L),
+  ViewNode_Encoding_DefaultJson((int) 15078L),
+  ViewNode_Encoding_DefaultXml((int) 280L),
   ViewsFolder((int) 87L),
   ViewVersion((int) 12170L),
   WellKnownRole_Anonymous((int) 15644L),
@@ -1073,6 +1734,14 @@ public enum OpcuaNodeIdServices {
   WellKnownRole_Operator((int) 15680L),
   WellKnownRole_SecurityAdmin((int) 15704L),
   WellKnownRole_Supervisor((int) 15692L),
+  WriteRequest((int) 671L),
+  WriteRequest_Encoding_DefaultBinary((int) 673L),
+  WriteRequest_Encoding_DefaultJson((int) 15277L),
+  WriteRequest_Encoding_DefaultXml((int) 672L),
+  WriteResponse((int) 674L),
+  WriteResponse_Encoding_DefaultBinary((int) 676L),
+  WriteResponse_Encoding_DefaultJson((int) 15278L),
+  WriteResponse_Encoding_DefaultXml((int) 675L),
   WriterGroupDataType((int) 15480L),
   WriterGroupDataType_Encoding_DefaultBinary((int) 21150L),
   WriterGroupDataType_Encoding_DefaultJson((int) 21198L),
@@ -1088,6 +1757,10 @@ public enum OpcuaNodeIdServices {
   WriterGroupTransportDataType_Encoding_DefaultXml((int) 15990L),
   WriterGroupTransportType((int) 17997L),
   WriterGroupType((int) 17725L),
+  WriteValue((int) 668L),
+  WriteValue_Encoding_DefaultBinary((int) 670L),
+  WriteValue_Encoding_DefaultJson((int) 15276L),
+  WriteValue_Encoding_DefaultXml((int) 669L),
   X509IdentityToken((int) 325L),
   X509IdentityToken_Encoding_DefaultBinary((int) 327L),
   X509IdentityToken_Encoding_DefaultJson((int) 15143L),
diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/OpcuaPlcDriver.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/OpcuaPlcDriver.java
index 10cbe9dec1..bb12ee521a 100644
--- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/OpcuaPlcDriver.java
+++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/OpcuaPlcDriver.java
@@ -121,6 +121,7 @@ public class OpcuaPlcDriver extends GeneratedDriverBase<OpcuaAPU> {
         return new PlcValueHandler();
     }
 
+    @Override
     protected boolean awaitDisconnectComplete() {
         return true;
     }
diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/context/SecureChannel.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/context/SecureChannel.java
index 32bcf40694..e1f6ca4718 100644
--- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/context/SecureChannel.java
+++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/context/SecureChannel.java
@@ -85,7 +85,7 @@ public class SecureChannel {
         "(?<transportHost>[\\w.-]+)(:" +
         "(?<transportPort>\\d*))?");
 
-    public static final Pattern URI_PATTERN = Pattern.compile("^(?<protocolCode>opc)" +
+    public static final Pattern URI_PATTERN = Pattern.compile("^(?<protocolCode>opc|https)" +
         INET_ADDRESS_PATTERN +
         "(?<transportEndpoint>[\\w/=]*)[\\?]?"
     );
@@ -580,7 +580,7 @@ public class SecureChannel {
     }
 
     public void onDisconnect(ConversationContext<OpcuaAPU> context) {
-        LOGGER.info("Disconnecting");
+        LOGGER.debug("Disconnecting");
         int requestHandle = getRequestHandle();
 
         if (keepAlive != null) {
@@ -879,7 +879,7 @@ public class SecureChannel {
                             for (ExtensionObjectDefinition endpoint : endpoints) {
                                 EndpointDescription endpointDescription = (EndpointDescription) endpoint;
                                 if (endpointDescription.getEndpointUrl().getStringValue().equals(this.endpoint.getStringValue()) && endpointDescription.getSecurityPolicyUri().getStringValue().equals(this.securityPolicy)) {
-                                    LOGGER.info("Found OPC UA endpoint {}", this.endpoint.getStringValue());
+                                    LOGGER.debug("Found OPC UA endpoint {}", this.endpoint.getStringValue());
                                     this.configuration.setSenderCertificate(endpointDescription.getServerCertificate().getStringValue());
                                 }
                             }
diff --git a/plc4j/drivers/plc4x/src/main/generated/org/apache/plc4x/java/plc4x/readwrite/Plc4xValue.java b/plc4j/drivers/plc4x/src/main/generated/org/apache/plc4x/java/plc4x/readwrite/Plc4xValue.java
index 6d856ea448..07c90775b6 100644
--- a/plc4j/drivers/plc4x/src/main/generated/org/apache/plc4x/java/plc4x/readwrite/Plc4xValue.java
+++ b/plc4j/drivers/plc4x/src/main/generated/org/apache/plc4x/java/plc4x/readwrite/Plc4xValue.java
@@ -158,6 +158,24 @@ public class Plc4xValue {
       String value = /*TODO: migrate me*/ /*TODO: migrate me*/
           readBuffer.readString("", 16, WithOption.WithEncoding("UTF-16"));
 
+      return new PlcSTRING(value);
+    } else if (EvaluationHelper.equals(valueType, Plc4xValueType.STRING)) { // STRING
+
+      // Manual Field (value)
+      String value =
+          (String)
+              (org.apache.plc4x.java.plc4x.readwrite.utils.StaticHelper.parseString(
+                  readBuffer, "UTF-8"));
+
+      return new PlcSTRING(value);
+    } else if (EvaluationHelper.equals(valueType, Plc4xValueType.WSTRING)) { // STRING
+
+      // Manual Field (value)
+      String value =
+          (String)
+              (org.apache.plc4x.java.plc4x.readwrite.utils.StaticHelper.parseString(
+                  readBuffer, "UTF-16"));
+
       return new PlcSTRING(value);
     } else if (EvaluationHelper.equals(valueType, Plc4xValueType.TIME)) { // TIME
 
@@ -325,6 +343,14 @@ public class Plc4xValue {
       /*TODO: migrate me*/
       /*TODO: migrate me*/ writeBuffer.writeString(
           "", 16, (String) (value), WithOption.WithEncoding("UTF-16"));
+    } else if (EvaluationHelper.equals(valueType, Plc4xValueType.STRING)) { // STRING
+      // Manual Field (value)
+      org.apache.plc4x.java.plc4x.readwrite.utils.StaticHelper.serializeString(
+          writeBuffer, _value, "UTF-8");
+    } else if (EvaluationHelper.equals(valueType, Plc4xValueType.WSTRING)) { // STRING
+      // Manual Field (value)
+      org.apache.plc4x.java.plc4x.readwrite.utils.StaticHelper.serializeString(
+          writeBuffer, _value, "UTF-16");
     } else if (EvaluationHelper.equals(valueType, Plc4xValueType.TIME)) { // TIME
       // Simple Field (milliseconds)
       long milliseconds = (long) _value.getLong();
@@ -436,6 +462,12 @@ public class Plc4xValue {
     } else if (EvaluationHelper.equals(valueType, Plc4xValueType.WCHAR)) { // STRING
       // Simple Field (value)
       sizeInBits += 16;
+    } else if (EvaluationHelper.equals(valueType, Plc4xValueType.STRING)) { // STRING
+      // Manual Field (value)
+      sizeInBits += (((STR_LEN(_value)) + (1))) * (8);
+    } else if (EvaluationHelper.equals(valueType, Plc4xValueType.WSTRING)) { // STRING
+      // Manual Field (value)
+      sizeInBits += (((STR_LEN(_value)) + (1))) * (16);
     } else if (EvaluationHelper.equals(valueType, Plc4xValueType.TIME)) { // TIME
       // Simple Field (milliseconds)
       sizeInBits += 32;
diff --git a/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/protocol/Plc4xProtocolLogic.java b/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/protocol/Plc4xProtocolLogic.java
index 4d8cf54c98..77f5edee4f 100644
--- a/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/protocol/Plc4xProtocolLogic.java
+++ b/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/protocol/Plc4xProtocolLogic.java
@@ -20,6 +20,7 @@ package org.apache.plc4x.java.plc4x.protocol;
 
 import org.apache.plc4x.java.api.messages.*;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
+import org.apache.plc4x.java.api.types.PlcValueType;
 import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.plc4x.config.Plc4xConfiguration;
 import org.apache.plc4x.java.plc4x.tag.Plc4xTag;
@@ -96,7 +97,7 @@ public class Plc4xProtocolLogic extends Plc4xProtocolBase<Plc4xMessage> implemen
             final Plc4xTag plc4xTag =
                 (Plc4xTag) apiReadRequest.getTag(tagName);
             Plc4xTagRequest plc4XTagRequest = new Plc4xTagRequest(
-                new org.apache.plc4x.java.plc4x.readwrite.Plc4xTag(tagName, plc4xTag.getAddressString() + ":" + plc4xTag.getPlcValueType().name()));
+                new org.apache.plc4x.java.plc4x.readwrite.Plc4xTag(tagName, plc4xTag.getAddressString()));
             plc4xTags.add(plc4XTagRequest);
         }
         final int requestId = txIdGenerator.getAndIncrement();
@@ -104,7 +105,7 @@ public class Plc4xProtocolLogic extends Plc4xProtocolBase<Plc4xMessage> implemen
 
         // Send the request and await a response.
         RequestTransactionManager.RequestTransaction transaction = tm.startRequest();
-        context.sendRequest(plc4xReadRequest)
+        transaction.submit(() -> context.sendRequest(plc4xReadRequest)
             .expectResponse(Plc4xMessage.class, requestTimeout)
             .onTimeout(future::completeExceptionally)
             .check(plc4xMessage -> plc4xMessage.getRequestId() == requestId)
@@ -125,7 +126,7 @@ public class Plc4xProtocolLogic extends Plc4xProtocolBase<Plc4xMessage> implemen
 
                 // Finish the request-transaction.
                 transaction.endRequest();
-            });
+            }));
         return future;
     }
 
@@ -140,7 +141,7 @@ public class Plc4xProtocolLogic extends Plc4xProtocolBase<Plc4xMessage> implemen
             final Plc4xValueType plc4xValueType = Plc4xValueType.valueOf(plc4xTag.getPlcValueType().name());
             final PlcValue plcValue = writeRequest.getPlcValue(tagName);
             Plc4xTagValueRequest tagRequest = new Plc4xTagValueRequest(
-                new org.apache.plc4x.java.plc4x.readwrite.Plc4xTag(tagName, plc4xTag.getAddressString() + ":" + plc4xTag.getPlcValueType().name()), plc4xValueType, plcValue);
+                new org.apache.plc4x.java.plc4x.readwrite.Plc4xTag(tagName, plc4xTag.getAddressString() ), plc4xValueType, plcValue);
             tags.add(tagRequest);
         }
         final int requestId = txIdGenerator.getAndIncrement();
@@ -148,7 +149,7 @@ public class Plc4xProtocolLogic extends Plc4xProtocolBase<Plc4xMessage> implemen
 
         // Send the request and await a response.
         RequestTransactionManager.RequestTransaction transaction = tm.startRequest();
-        context.sendRequest(write)
+        transaction.submit(() ->context.sendRequest(write)
             .expectResponse(Plc4xMessage.class, requestTimeout)
             .onTimeout(future::completeExceptionally)
             .check(p -> p.getRequestId() == requestId)
@@ -168,7 +169,7 @@ public class Plc4xProtocolLogic extends Plc4xProtocolBase<Plc4xMessage> implemen
 
                 // Finish the request-transaction.
                 transaction.endRequest();
-            });
+            }));
         return future;
     }
 
diff --git a/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/readwrite/utils/StaticHelper.java b/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/readwrite/utils/StaticHelper.java
new file mode 100644
index 0000000000..69be217621
--- /dev/null
+++ b/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/readwrite/utils/StaticHelper.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.plc4x.readwrite.utils;
+
+import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.ReadBuffer;
+import org.apache.plc4x.java.spi.generation.SerializationException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
+
+import java.nio.charset.StandardCharsets;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class StaticHelper {
+
+    public static String parseString(ReadBuffer io,  String encoding) {
+        try {
+            if ("UTF-8".equalsIgnoreCase(encoding)) {
+                // This is the maximum number of bytes a string can be long.
+                short stringLength = io.readUnsignedShort(8);
+                // This is the total length of the string on the PLC (Not necessarily the number of characters read)
+                final byte[] byteArray = new byte[stringLength];
+                for (int i = 0; (i < stringLength) && io.hasMore(8); i++) {
+                    final byte curByte = io.readByte();
+                    byteArray[i] = curByte;
+                }
+                return new String(byteArray, StandardCharsets.UTF_8);
+            } else if ("UTF-16".equalsIgnoreCase(encoding)) {
+                // This is the maximum number of bytes a string can be long.
+                int stringLength = io.readUnsignedInt(16);
+                final byte[] byteArray = new byte[stringLength * 2];
+                for (int i = 0; (i < stringLength) && io.hasMore(16); i++) {
+                    final short curShort = io.readShort(16);
+                        byteArray[i * 2] = (byte) (curShort >>> 8);
+                        byteArray[(i * 2) + 1] = (byte) (curShort & 0xFF);
+                }
+                return new String(byteArray, StandardCharsets.UTF_16);
+            } else {
+                throw new PlcRuntimeException("Unsupported string encoding " + encoding);
+            }
+        } catch (ParseException e) {
+            throw new PlcRuntimeException("Error parsing string", e);
+        }
+    }
+    public static void serializeString(WriteBuffer io, PlcValue value, String encoding) {
+        String valueString = value.getString();
+        valueString = valueString == null ? "" : valueString;
+
+        if ("UTF-8".equalsIgnoreCase(encoding)) {
+            final byte[] raw = valueString.getBytes(StandardCharsets.UTF_8);
+            try {
+                io.writeByte((byte) raw.length);
+                for (byte b : raw) {
+                    io.writeByte(b);
+                }
+            }
+            catch (SerializationException ex) {
+                Logger.getLogger(StaticHelper.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        } else if ("UTF-16".equalsIgnoreCase(encoding)) {
+            final byte[] raw = valueString.getBytes(StandardCharsets.UTF_16);
+            try {
+                io.writeUnsignedInt(16, raw.length);
+                for (int i = 0; i < raw.length; i++) {
+                    io.writeByte( raw[i]);
+                }
+            }
+            catch (SerializationException ex) {
+                Logger.getLogger(StaticHelper.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        } else {
+            throw new PlcRuntimeException("Unsupported string encoding " + encoding);
+        }
+
+    }
+}
diff --git a/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/tag/Plc4XTagHandler.java b/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/tag/Plc4XTagHandler.java
index 83ac0fe9fb..fabb55fc13 100644
--- a/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/tag/Plc4XTagHandler.java
+++ b/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/tag/Plc4XTagHandler.java
@@ -28,12 +28,7 @@ public class Plc4XTagHandler implements PlcTagHandler {
 
     @Override
     public PlcTag parseTag(String tagAddress) {
-        if(!tagAddress.contains(":")) {
-            throw new PlcInvalidTagException(tagAddress);
-        }
-        String address = tagAddress.substring(0, tagAddress.lastIndexOf(":"));
-        String dataType = tagAddress.substring(tagAddress.lastIndexOf(":") + 1);
-        return new Plc4xTag(address, PlcValueType.valueOf(dataType));
+        return new Plc4xTag(tagAddress);
     }
 
     @Override
diff --git a/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/tag/Plc4xTag.java b/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/tag/Plc4xTag.java
index c3d5aa7fdd..a85e2fd0d6 100644
--- a/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/tag/Plc4xTag.java
+++ b/plc4j/drivers/plc4x/src/main/java/org/apache/plc4x/java/plc4x/tag/Plc4xTag.java
@@ -32,11 +32,10 @@ import java.util.List;
 public class Plc4xTag implements PlcTag, Serializable {
 
     private final String address;
-    private final PlcValueType valueType;
+    private PlcValueType valueType = PlcValueType.NULL;
 
-    public Plc4xTag(String address, PlcValueType valueType) {
+    public Plc4xTag(String address) {
         this.address = address;
-        this.valueType = valueType;
     }
 
     @Override
@@ -48,7 +47,13 @@ public class Plc4xTag implements PlcTag, Serializable {
     public PlcValueType getPlcValueType() {
         return valueType;
     }
-
+    @Override
+    public void setPlcValueType(PlcValueType plcValueType) {
+        this.valueType = plcValueType;
+    }
+    public void setValueType(PlcValueType valueType) {
+        this.valueType = valueType;
+    }
     @Override
     public List<ArrayInfo> getArrayInfo() {
         return PlcTag.super.getArrayInfo();
diff --git a/plc4j/drivers/pom.xml b/plc4j/drivers/pom.xml
index c0b47ba33a..995ee913d0 100644
--- a/plc4j/drivers/pom.xml
+++ b/plc4j/drivers/pom.xml
@@ -53,4 +53,19 @@
     <module>simulated</module>
   </modules>
 
+  <build>
+  <plugins>
+    <plugin>
+      <groupId>org.apache.felix</groupId>
+      <artifactId>maven-bundle-plugin</artifactId>
+      <configuration>
+        <instructions>
+          <SPI-Provider>
+            *
+          </SPI-Provider>
+        </instructions>
+      </configuration>
+    </plugin>
+  </plugins>
+  </build>
 </project>
diff --git a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/DataItem.java b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/DataItem.java
index 7c5fb803ef..2db355b2db 100644
--- a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/DataItem.java
+++ b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/DataItem.java
@@ -24,7 +24,6 @@ import java.math.BigInteger;
 import java.time.*;
 import java.util.*;
 import org.apache.plc4x.java.api.value.*;
-import org.apache.plc4x.java.spi.codegen.WithOption;
 import org.apache.plc4x.java.spi.generation.ByteOrder;
 import org.apache.plc4x.java.spi.generation.EvaluationHelper;
 import org.apache.plc4x.java.spi.generation.ParseException;
@@ -42,7 +41,8 @@ public class DataItem {
   private static final Logger LOGGER = LoggerFactory.getLogger(DataItem.class);
 
   public static PlcValue staticParse(
-      ReadBuffer readBuffer, String dataProtocolId, Integer stringLength) throws ParseException {
+      ReadBuffer readBuffer, String dataProtocolId, Integer stringLength, String stringEncoding)
+      throws ParseException {
     if (EvaluationHelper.equals(dataProtocolId, "IEC61131_BOOL")) { // BOOL
 
       // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
@@ -147,16 +147,20 @@ public class DataItem {
       return new PlcLREAL(value);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_CHAR")) { // CHAR
 
-      // Simple Field (value)
-      String value = /*TODO: migrate me*/ /*TODO: migrate me*/
-          readBuffer.readString("", 8, WithOption.WithEncoding("UTF-8"));
+      // Manual Field (value)
+      String value =
+          (String)
+              (org.apache.plc4x.java.s7.readwrite.utils.StaticHelper.parseS7Char(
+                  readBuffer, "UTF-8", stringEncoding));
 
       return new PlcCHAR(value);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_WCHAR")) { // CHAR
 
-      // Simple Field (value)
-      String value = /*TODO: migrate me*/ /*TODO: migrate me*/
-          readBuffer.readString("", 16, WithOption.WithEncoding("UTF-16"));
+      // Manual Field (value)
+      String value =
+          (String)
+              (org.apache.plc4x.java.s7.readwrite.utils.StaticHelper.parseS7Char(
+                  readBuffer, "UTF-16", stringEncoding));
 
       return new PlcCHAR(value);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_STRING")) { // STRING
@@ -165,7 +169,7 @@ public class DataItem {
       String value =
           (String)
               (org.apache.plc4x.java.s7.readwrite.utils.StaticHelper.parseS7String(
-                  readBuffer, stringLength, "UTF-8"));
+                  readBuffer, stringLength, "UTF-8", stringEncoding));
 
       return new PlcSTRING(value);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_WSTRING")) { // STRING
@@ -174,7 +178,7 @@ public class DataItem {
       String value =
           (String)
               (org.apache.plc4x.java.s7.readwrite.utils.StaticHelper.parseS7String(
-                  readBuffer, stringLength, "UTF-16"));
+                  readBuffer, stringLength, "UTF-16", stringEncoding));
 
       return new PlcSTRING(value);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_TIME")) { // TIME
@@ -253,9 +257,14 @@ public class DataItem {
   }
 
   public static void staticSerialize(
-      WriteBuffer writeBuffer, PlcValue _value, String dataProtocolId, Integer stringLength)
+      WriteBuffer writeBuffer,
+      PlcValue _value,
+      String dataProtocolId,
+      Integer stringLength,
+      String stringEncoding)
       throws SerializationException {
-    staticSerialize(writeBuffer, _value, dataProtocolId, stringLength, ByteOrder.BIG_ENDIAN);
+    staticSerialize(
+        writeBuffer, _value, dataProtocolId, stringLength, stringEncoding, ByteOrder.BIG_ENDIAN);
   }
 
   public static void staticSerialize(
@@ -263,6 +272,7 @@ public class DataItem {
       PlcValue _value,
       String dataProtocolId,
       Integer stringLength,
+      String stringEncoding,
       ByteOrder byteOrder)
       throws SerializationException {
     if (EvaluationHelper.equals(dataProtocolId, "IEC61131_BOOL")) { // BOOL
@@ -345,25 +355,21 @@ public class DataItem {
       /*TODO: migrate me*/
       /*TODO: migrate me*/ writeBuffer.writeDouble("", 64, (value));
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_CHAR")) { // CHAR
-      // Simple Field (value)
-      String value = (String) _value.getString();
-      /*TODO: migrate me*/
-      /*TODO: migrate me*/ writeBuffer.writeString(
-          "", 8, (String) (value), WithOption.WithEncoding("UTF-8"));
+      // Manual Field (value)
+      org.apache.plc4x.java.s7.readwrite.utils.StaticHelper.serializeS7Char(
+          writeBuffer, _value, "UTF-8", stringEncoding);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_WCHAR")) { // CHAR
-      // Simple Field (value)
-      String value = (String) _value.getString();
-      /*TODO: migrate me*/
-      /*TODO: migrate me*/ writeBuffer.writeString(
-          "", 16, (String) (value), WithOption.WithEncoding("UTF-16"));
+      // Manual Field (value)
+      org.apache.plc4x.java.s7.readwrite.utils.StaticHelper.serializeS7Char(
+          writeBuffer, _value, "UTF-16", stringEncoding);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_STRING")) { // STRING
       // Manual Field (value)
       org.apache.plc4x.java.s7.readwrite.utils.StaticHelper.serializeS7String(
-          writeBuffer, _value, stringLength, "UTF-8");
+          writeBuffer, _value, stringLength, "UTF-8", stringEncoding);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_WSTRING")) { // STRING
       // Manual Field (value)
       org.apache.plc4x.java.s7.readwrite.utils.StaticHelper.serializeS7String(
-          writeBuffer, _value, stringLength, "UTF-16");
+          writeBuffer, _value, stringLength, "UTF-16", stringEncoding);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_TIME")) { // TIME
       // Simple Field (milliseconds)
       long milliseconds = (long) _value.getLong();
@@ -431,11 +437,15 @@ public class DataItem {
     }
   }
 
-  public static int getLengthInBytes(PlcValue _value, String dataProtocolId, Integer stringLength) {
-    return (int) Math.ceil((float) getLengthInBits(_value, dataProtocolId, stringLength) / 8.0);
+  public static int getLengthInBytes(
+      PlcValue _value, String dataProtocolId, Integer stringLength, String stringEncoding) {
+    return (int)
+        Math.ceil(
+            (float) getLengthInBits(_value, dataProtocolId, stringLength, stringEncoding) / 8.0);
   }
 
-  public static int getLengthInBits(PlcValue _value, String dataProtocolId, Integer stringLength) {
+  public static int getLengthInBits(
+      PlcValue _value, String dataProtocolId, Integer stringLength, String stringEncoding) {
     int sizeInBits = 0;
     if (EvaluationHelper.equals(dataProtocolId, "IEC61131_BOOL")) { // BOOL
       // Reserved Field
@@ -485,17 +495,17 @@ public class DataItem {
       // Simple Field (value)
       sizeInBits += 64;
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_CHAR")) { // CHAR
-      // Simple Field (value)
+      // Manual Field (value)
       sizeInBits += 8;
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_WCHAR")) { // CHAR
-      // Simple Field (value)
+      // Manual Field (value)
       sizeInBits += 16;
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_STRING")) { // STRING
       // Manual Field (value)
-      sizeInBits += (STR_LEN(_value)) + (2);
+      sizeInBits += (((stringLength) + (2))) * (8);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_WSTRING")) { // STRING
       // Manual Field (value)
-      sizeInBits += (((STR_LEN(_value)) * (2))) + (2);
+      sizeInBits += (((stringLength) + (2))) * (16);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_TIME")) { // TIME
       // Simple Field (milliseconds)
       sizeInBits += 32;
diff --git a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7PayloadReadVarResponse.java b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7PayloadReadVarResponse.java
index c83a8af4c6..17e1c818e9 100644
--- a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7PayloadReadVarResponse.java
+++ b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7PayloadReadVarResponse.java
@@ -107,7 +107,7 @@ public class S7PayloadReadVarResponse extends S7Payload implements Message {
         readCountArrayField(
             "items",
             new DataReaderComplexDefault<>(
-                () -> S7VarPayloadDataItem.staticParse(readBuffer, (boolean) (true)), readBuffer),
+                () -> S7VarPayloadDataItem.staticParse(readBuffer), readBuffer),
             CAST(parameter, S7ParameterReadVarResponse.class).getNumItems());
 
     readBuffer.closeContext("S7PayloadReadVarResponse");
diff --git a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
index f08cb90ecd..8334154158 100644
--- a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
+++ b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/S7VarPayloadDataItem.java
@@ -42,19 +42,12 @@ public class S7VarPayloadDataItem implements Message {
   protected final DataTransportSize transportSize;
   protected final byte[] data;
 
-  // Arguments.
-  protected final Boolean hasNext;
-
   public S7VarPayloadDataItem(
-      DataTransportErrorCode returnCode,
-      DataTransportSize transportSize,
-      byte[] data,
-      Boolean hasNext) {
+      DataTransportErrorCode returnCode, DataTransportSize transportSize, byte[] data) {
     super();
     this.returnCode = returnCode;
     this.transportSize = transportSize;
     this.data = data;
-    this.hasNext = hasNext;
   }
 
   public DataTransportErrorCode getReturnCode() {
@@ -109,10 +102,7 @@ public class S7VarPayloadDataItem implements Message {
 
     // Padding Field (padding)
     writePaddingField(
-        "padding",
-        (int) (((PADCOUNT(data, hasNext)) % (2))),
-        (short) 0x00,
-        writeUnsignedShort(writeBuffer, 8));
+        "padding", (int) (((COUNT(data)) % (2))), (short) 0x00, writeUnsignedShort(writeBuffer, 8));
 
     writeBuffer.popContext("S7VarPayloadDataItem");
   }
@@ -142,7 +132,7 @@ public class S7VarPayloadDataItem implements Message {
     }
 
     // Padding Field (padding)
-    int _timesPadding = (int) (((PADCOUNT(data, hasNext)) % (2)));
+    int _timesPadding = (int) (((COUNT(data)) % (2)));
     while (_timesPadding-- > 0) {
       lengthInBits += 8;
     }
@@ -153,25 +143,10 @@ public class S7VarPayloadDataItem implements Message {
   public static S7VarPayloadDataItem staticParse(ReadBuffer readBuffer, Object... args)
       throws ParseException {
     PositionAware positionAware = readBuffer;
-    if ((args == null) || (args.length != 1)) {
-      throw new PlcRuntimeException(
-          "Wrong number of arguments, expected 1, but got " + args.length);
-    }
-    Boolean hasNext;
-    if (args[0] instanceof Boolean) {
-      hasNext = (Boolean) args[0];
-    } else if (args[0] instanceof String) {
-      hasNext = Boolean.valueOf((String) args[0]);
-    } else {
-      throw new PlcRuntimeException(
-          "Argument 0 expected to be of type Boolean or a string which is parseable but was "
-              + args[0].getClass().getName());
-    }
-    return staticParse(readBuffer, hasNext);
+    return staticParse(readBuffer);
   }
 
-  public static S7VarPayloadDataItem staticParse(ReadBuffer readBuffer, Boolean hasNext)
-      throws ParseException {
+  public static S7VarPayloadDataItem staticParse(ReadBuffer readBuffer) throws ParseException {
     readBuffer.pullContext("S7VarPayloadDataItem");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
@@ -199,12 +174,12 @@ public class S7VarPayloadDataItem implements Message {
             Math.toIntExact(
                 ((transportSize.getSizeInBits()) ? CEIL((dataLength) / (8.0)) : dataLength)));
 
-    readPaddingField(readUnsignedShort(readBuffer, 8), (int) (((PADCOUNT(data, hasNext)) % (2))));
+    readPaddingField(readUnsignedShort(readBuffer, 8), (int) (((COUNT(data)) % (2))));
 
     readBuffer.closeContext("S7VarPayloadDataItem");
     // Create the instance
     S7VarPayloadDataItem _s7VarPayloadDataItem;
-    _s7VarPayloadDataItem = new S7VarPayloadDataItem(returnCode, transportSize, data, hasNext);
+    _s7VarPayloadDataItem = new S7VarPayloadDataItem(returnCode, transportSize, data);
     return _s7VarPayloadDataItem;
   }
 
diff --git a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/TransportSize.java b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/TransportSize.java
index 28940ae38e..a6ea4032f0 100644
--- a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/TransportSize.java
+++ b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/TransportSize.java
@@ -179,9 +179,9 @@ public enum TransportSize {
       (boolean) false,
       (short) 'X',
       (boolean) true,
-      null,
+      DataTransportSize.BYTE_WORD_DWORD,
       (String) "IEC61131_LINT",
-      TransportSize.INT),
+      null),
   ULINT(
       (short) 0x0D,
       (boolean) false,
@@ -192,9 +192,9 @@ public enum TransportSize {
       (boolean) false,
       (short) 'X',
       (boolean) true,
-      null,
+      DataTransportSize.BYTE_WORD_DWORD,
       (String) "IEC61131_ULINT",
-      TransportSize.INT),
+      null),
   REAL(
       (short) 0x0E,
       (boolean) true,
@@ -205,7 +205,7 @@ public enum TransportSize {
       (boolean) true,
       (short) 'D',
       (boolean) true,
-      DataTransportSize.REAL,
+      DataTransportSize.BYTE_WORD_DWORD,
       (String) "IEC61131_REAL",
       null),
   LREAL(
@@ -218,7 +218,7 @@ public enum TransportSize {
       (boolean) true,
       (short) 'X',
       (boolean) true,
-      null,
+      DataTransportSize.BYTE_WORD_DWORD,
       (String) "IEC61131_LREAL",
       TransportSize.REAL),
   CHAR(
@@ -244,7 +244,7 @@ public enum TransportSize {
       (boolean) true,
       (short) 'X',
       (boolean) true,
-      null,
+      DataTransportSize.BYTE_WORD_DWORD,
       (String) "IEC61131_WCHAR",
       null),
   STRING(
@@ -270,7 +270,7 @@ public enum TransportSize {
       (boolean) true,
       (short) 'X',
       (boolean) true,
-      null,
+      DataTransportSize.BYTE_WORD_DWORD,
       (String) "IEC61131_WSTRING",
       null),
   TIME(
@@ -281,7 +281,7 @@ public enum TransportSize {
       (short) 4,
       (boolean) true,
       (boolean) true,
-      (short) 'D',
+      (short) 'X',
       (boolean) true,
       null,
       (String) "IEC61131_TIME",
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/configuration/S7Configuration.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/configuration/S7Configuration.java
index 55c50bd0d6..ae7553812b 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/configuration/S7Configuration.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/configuration/S7Configuration.java
@@ -25,19 +25,25 @@ import org.apache.plc4x.java.spi.configuration.annotations.defaults.IntDefaultVa
 import org.apache.plc4x.java.transport.tcp.TcpTransportConfiguration;
 
 public class S7Configuration implements Configuration, TcpTransportConfiguration {
+    @ConfigurationParameter("local-group")
+    @IntDefaultValue(3)
+    public int localGroup = 3;
 
     @ConfigurationParameter("local-rack")
     @IntDefaultValue(1)
     public int localRack = 1;
 
-    @ConfigurationParameter("local-slot")
-    @IntDefaultValue(1)
-    public int localSlot = 1;
-    
     @ConfigurationParameter("local-tsap")
     @IntDefaultValue(0)
     public int localTsap = 0;
 
+    @ConfigurationParameter("local-slot")
+    @IntDefaultValue(1)
+    public int localSlot = 1;
+
+    @ConfigurationParameter("remote-group")
+    @IntDefaultValue(1)
+    public int remoteGroup = 1;
     @ConfigurationParameter("remote-rack")
     @IntDefaultValue(0)
     public int remoteRack = 0;
@@ -65,6 +71,31 @@ public class S7Configuration implements Configuration, TcpTransportConfiguration
     @ConfigurationParameter("controller-type")
     public String controllerType;
 
+    @ConfigurationParameter("timeout-request")
+    @IntDefaultValue(4000)
+    protected int timeoutRequest;
+    public int getLocalGroup() {
+        return localGroup;
+    }
+
+    public void setLocalGroup(int localGroup) {
+        this.localGroup = localGroup;
+    }
+    public int getLocalTsap() {
+        return localTsap;
+    }
+
+    public void setLocalTsap(int localTsap) {
+        this.localTsap = localTsap;
+    }
+    public int getRemoteGroup() {
+        return remoteGroup;
+    }
+
+    public void setRemoteGroup(int remoteGroup) {
+        this.remoteGroup = remoteGroup;
+    }
+
     public int getLocalRack() {
         return localRack;
     }
@@ -81,14 +112,6 @@ public class S7Configuration implements Configuration, TcpTransportConfiguration
         this.localSlot = localSlot;
     }
 
-    public int getLocalTsap() {
-        return localTsap;
-    }
-
-    public void setLocalTsap(int localTsap) {
-        this.localTsap = localTsap;
-    }
-    
     public int getRemoteRack() {
         return remoteRack;
     }
@@ -104,7 +127,6 @@ public class S7Configuration implements Configuration, TcpTransportConfiguration
     public void setRemoteSlot(int remoteSlot) {
         this.remoteSlot = remoteSlot;
     }
-
     public int getRemoteTsap() {
         return remoteTsap;
     }
@@ -112,7 +134,6 @@ public class S7Configuration implements Configuration, TcpTransportConfiguration
     public void setRemoteTsap(int remoteTsap) {
         this.remoteTsap = remoteTsap;
     }
-    
     public int getPduSize() {
         return pduSize;
     }
@@ -145,6 +166,12 @@ public class S7Configuration implements Configuration, TcpTransportConfiguration
         this.controllerType = controllerType;
     }
 
+    public int getTimeoutRequest() {
+        return timeoutRequest;
+    }
+    public void setTimeoutRequest(int timeoutRequest) {
+        this.timeoutRequest = timeoutRequest;
+    }
     /**
      * Per default port for the S7 protocol is 102.
      * @return 102
@@ -158,15 +185,18 @@ public class S7Configuration implements Configuration, TcpTransportConfiguration
     public String toString() {
         return "Configuration{" +
             "local-rack=" + localRack +
+            ", local-group=" + localGroup +
             ", local-slot=" + localSlot +
             ", local-tsap=" + localTsap +
+            ", remote-group=" + remoteGroup +
             ", remote-rack=" + remoteRack +
             ", remote-slot=" + remoteSlot +
             ", remote-tsap=" + remoteTsap +
             ", pduSize=" + pduSize +
             ", maxAmqCaller=" + maxAmqCaller +
             ", maxAmqCallee=" + maxAmqCallee +
-            ", controllerType='" + controllerType + '\'' +
+            ", controllerType='" + controllerType +
+            ", timeoutRequest='" + timeoutRequest + '\'' +
             '}';
     }
 
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/context/S7DriverContext.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/context/S7DriverContext.java
index 7b40d9b3d1..25edebf811 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/context/S7DriverContext.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/context/S7DriverContext.java
@@ -39,9 +39,9 @@ public class S7DriverContext implements DriverContext, HasConfiguration<S7Config
 
     @Override
     public void setConfiguration(S7Configuration configuration) {
-        this.callingTsapId = S7TsapIdEncoder.encodeS7TsapId(DeviceGroup.OTHERS,
+        this.callingTsapId = S7TsapIdEncoder.encodeS7TsapId(DeviceGroup.enumForValue((byte)configuration.localGroup),
             configuration.localRack, configuration.localSlot);
-        this.calledTsapId = S7TsapIdEncoder.encodeS7TsapId(DeviceGroup.PG_OR_PC,
+        this.calledTsapId = S7TsapIdEncoder.encodeS7TsapId(DeviceGroup.enumForValue((byte)configuration.remoteGroup),
             configuration.remoteRack, configuration.remoteSlot);
 
         if (configuration.localTsap > 0) {
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/optimizer/DefaultS7MessageProcessor.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/optimizer/DefaultS7MessageProcessor.java
index ce987e1090..8e4a51347a 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/optimizer/DefaultS7MessageProcessor.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/optimizer/DefaultS7MessageProcessor.java
@@ -48,11 +48,11 @@ public class DefaultS7MessageProcessor implements S7MessageProcessor {
     public static final int EMPTY_READ_REQUEST_SIZE = new S7MessageRequest(0, new S7ParameterReadVarRequest(
         Collections.emptyList()), null).getLengthInBytes();
     public static final int EMPTY_READ_RESPONSE_SIZE = new S7MessageResponseData(0, new S7ParameterReadVarResponse(
-        (short) 0), new S7PayloadReadVarResponse(Collections.emptyList(), null), (short) 0, (short) 0).getLengthInBytes();
+        (short) 0), new S7PayloadReadVarResponse(Collections.emptyList()), (short) 0, (short) 0).getLengthInBytes();
     public static final int EMPTY_WRITE_REQUEST_SIZE = new S7MessageRequest(0, new S7ParameterWriteVarRequest(
-        Collections.emptyList()), new S7PayloadWriteVarRequest(Collections.emptyList(), null)).getLengthInBytes();
+        Collections.emptyList()), new S7PayloadWriteVarRequest(Collections.emptyList())).getLengthInBytes();
     public static final int EMPTY_WRITE_RESPONSE_SIZE = new S7MessageResponseData(0, new S7ParameterWriteVarResponse(
-        (short) 0), new S7PayloadWriteVarResponse(Collections.emptyList(), null), (short) 0, (short) 0).getLengthInBytes();
+        (short) 0), new S7PayloadWriteVarResponse(Collections.emptyList()), (short) 0, (short) 0).getLengthInBytes();
 
     public DefaultS7MessageProcessor(AtomicInteger tpduGenerator) {
         this.tpduRefGen = tpduGenerator;
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/optimizer/S7Optimizer.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/optimizer/S7Optimizer.java
index 85c6d9d4f3..f5767654cf 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/optimizer/S7Optimizer.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/optimizer/S7Optimizer.java
@@ -24,6 +24,7 @@ import org.apache.plc4x.java.api.model.PlcTag;
 import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.s7.readwrite.*;
 import org.apache.plc4x.java.s7.readwrite.context.S7DriverContext;
+import org.apache.plc4x.java.s7.readwrite.tag.S7StringTag;
 import org.apache.plc4x.java.s7.readwrite.tag.S7Tag;
 import org.apache.plc4x.java.s7.readwrite.MemoryArea;
 import org.apache.plc4x.java.s7.readwrite.TransportSize;
@@ -65,7 +66,12 @@ public class S7Optimizer extends BaseOptimizer {
             S7Tag tag = (S7Tag) readRequest.getTag(tagName);
 
             int readRequestItemSize = S7_ADDRESS_ANY_SIZE;
-            int readResponseItemSize = 4 + (tag.getNumberOfElements() * tag.getDataType().getSizeInBytes());
+            int length = 1;
+            if(tag instanceof S7StringTag)
+            {
+                length = (((S7StringTag)tag).getStringLength() +2) * 8;
+            }
+            int readResponseItemSize = 4 + (tag.getNumberOfElements() * tag.getDataType().getSizeInBytes() * length);
             // If it's an odd number of bytes, add one to make it even
             if (readResponseItemSize % 2 == 1) {
                 readResponseItemSize++;
@@ -83,8 +89,10 @@ public class S7Optimizer extends BaseOptimizer {
             // If they would exceed, start a new request.
             else {
                 // Create a new PlcReadRequest containing the current tag item.
-                processedRequests.add(new DefaultPlcReadRequest(
-                    ((DefaultPlcReadRequest) readRequest).getReader(), curTags));
+                if(!curTags.isEmpty()) {
+                    processedRequests.add(new DefaultPlcReadRequest(
+                        ((DefaultPlcReadRequest) readRequest).getReader(), curTags));
+                }
 
                 // Reset the size and item lists.
                 curRequestSize = EMPTY_READ_REQUEST_SIZE + readRequestItemSize;
@@ -130,7 +138,12 @@ public class S7Optimizer extends BaseOptimizer {
             if (tag.getDataType() == TransportSize.BOOL) {
                 writeRequestItemSize += Math.ceil((double) tag.getNumberOfElements() / 8);
             } else {
-                writeRequestItemSize += (tag.getNumberOfElements() * tag.getDataType().getSizeInBytes());
+                int length = 1;
+                if(tag instanceof S7StringTag)
+                {
+                    length = (((S7StringTag)tag).getStringLength() + 2) * 8;
+                }
+                writeRequestItemSize += (tag.getNumberOfElements() * tag.getDataType().getSizeInBytes() * length);
             }
             // If it's an odd number of bytes, add one to make it even
             if (writeRequestItemSize % 2 == 1) {
@@ -150,8 +163,10 @@ public class S7Optimizer extends BaseOptimizer {
             // If adding them would exceed, start a new request.
             else {
                 // Create a new PlcWriteRequest containing the current tag item.
-                processedRequests.add(new DefaultPlcWriteRequest(
-                    ((DefaultPlcWriteRequest) writeRequest).getWriter(), curTags));
+                if(!curTags.isEmpty()) {
+                    processedRequests.add(new DefaultPlcWriteRequest(
+                        ((DefaultPlcWriteRequest) writeRequest).getWriter(), curTags));
+                }
 
                 // Reset the size and item lists.
                 curRequestSize = EMPTY_WRITE_REQUEST_SIZE + writeRequestItemSize;
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolEventLogic.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolEventLogic.java
index a46b496bdb..04828519a3 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolEventLogic.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolEventLogic.java
@@ -73,7 +73,7 @@ public class S7ProtocolEventLogic implements PlcSubscriber {
     
     public void start() {
         processor.start();
-        dispacher.start();    
+        dispacher.start();
     }
     
     public void stop(){
@@ -154,7 +154,7 @@ public class S7ProtocolEventLogic implements PlcSubscriber {
                     Logger.getLogger(S7ProtocolEventLogic.class.getName()).log(Level.SEVERE, null, ex);
                 }
             }
-            System.out.println("ObjectProcessor Bye!");            
+            logger.debug("ObjectProcessor Bye!");
         }
 
         public void doShutdown(){
@@ -203,7 +203,7 @@ public class S7ProtocolEventLogic implements PlcSubscriber {
                     Logger.getLogger(S7ProtocolEventLogic.class.getName()).log(Level.SEVERE, null, ex);
                 }
             }
-            System.out.println("EventDispacher Bye!");
+           logger.debug("EventDispacher Bye!");
         }
 
         public void doShutdown(){
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
index 5cda8f5018..b8b3a47e35 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
@@ -19,6 +19,7 @@
 package org.apache.plc4x.java.s7.readwrite.protocol;
 
 import org.apache.plc4x.java.api.model.PlcTag;
+import org.apache.plc4x.java.s7.readwrite.configuration.S7Configuration;
 import org.apache.plc4x.java.s7.readwrite.utils.S7PlcSubscriptionHandle;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -30,6 +31,7 @@ import org.apache.plc4x.java.api.messages.PlcResponse;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
+import org.apache.plc4x.java.spi.configuration.HasConfiguration;
 import org.apache.plc4x.java.spi.generation.*;
 import org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionTag;
 import org.apache.plc4x.java.spi.values.PlcNull;
@@ -58,15 +60,11 @@ import java.util.*;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.stream.IntStream;
-import org.apache.commons.lang3.concurrent.BasicThreadFactory;
-import org.apache.commons.lang3.tuple.MutablePair;
 
 import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
@@ -83,22 +81,12 @@ import org.apache.plc4x.java.spi.messages.DefaultPlcUnsubscriptionRequest;
  * So we need to limit those.
  * Thus, each request goes to a Work Queue and this Queue ensures, that only 3 are open at the same time.
  */
-public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
-
-    public static final Duration REQUEST_TIMEOUT = Duration.ofMillis(10000);
+public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> implements HasConfiguration<S7Configuration> {
 
     private final Logger logger = LoggerFactory.getLogger(S7ProtocolLogic.class);
-    private final AtomicInteger tpduGenerator = new AtomicInteger(10);
-    
-    /*
-     * Task group for managing connection redundancy.
-     */
-    private ExecutorService clientExecutorService = Executors.newFixedThreadPool(4, new BasicThreadFactory.Builder()
-                                                    .namingPattern("plc4x-app-thread-%d")
-                                                    .daemon(true)
-                                                    .priority(Thread.MAX_PRIORITY)
-                                                    .build());    
-    
+    private final AtomicInteger tpduGenerator = new AtomicInteger(1);
+
+    private S7Configuration configuration;
     /*
      * Take into account that the size of this buffer depends on the final device.
      * S7-300 goes from 20 to 300 and for S7-400 it goes from 300 to 10000.
@@ -114,17 +102,6 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
     private final S7PlcSubscriptionHandle usrHandle = new S7PlcSubscriptionHandle(EventType.USR, EventLogic);
     private final S7PlcSubscriptionHandle almHandle = new S7PlcSubscriptionHandle(EventType.ALM, EventLogic);
 
-    /*
-    * For the reconnection functionality by a "TimeOut" of the connection,
-    * you must keep track of open transactions. In general, an S7 device 
-    * supports a couple of simultaneous requests.
-    * The rhythm of execution must be determined by the TransactionManager.
-    * So far it is the way to indicate to the user that he must redo 
-    * his request.
-    */
-    private HashMap<Object,MutablePair<RequestTransactionManager.RequestTransaction, Object>> active_requests = new HashMap<>();
-
-    
     private S7DriverContext s7DriverContext;
     private RequestTransactionManager tm;
 
@@ -141,7 +118,10 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
         this.tm = new RequestTransactionManager(1);
         EventLogic.start();
     }
-
+    @Override
+    public void setConfiguration(S7Configuration configuration) {
+        this.configuration = configuration;
+    }
     @Override
     public void onConnect(ConversationContext<TPKTPacket> context) {
         if (context.isPassive()) {
@@ -164,7 +144,7 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
                 logger.warn("Timeout during Connection establishing, closing channel...");
                 context.getChannel().close();
             })
-            .expectResponse(TPKTPacket.class, REQUEST_TIMEOUT)
+            .expectResponse(TPKTPacket.class, Duration.ofMillis(configuration.getTimeoutRequest()))
             .check(p -> p.getPayload() instanceof COTPPacketConnectionResponse)
             .unwrap(p -> (COTPPacketConnectionResponse) p.getPayload())
             .handle(cotpPacketConnectionResponse -> {
@@ -175,7 +155,7 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
                         logger.warn("Timeout during Connection establishing, closing channel...");
                         context.getChannel().close();
                     })
-                    .expectResponse(TPKTPacket.class, REQUEST_TIMEOUT)
+                    .expectResponse(TPKTPacket.class, Duration.ofMillis(configuration.getTimeoutRequest()))
                     .unwrap(TPKTPacket::getPayload)
                     .only(COTPPacketData.class)
                     .unwrap(COTPPacket::getPayload)
@@ -212,7 +192,7 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
                                 logger.warn("Timeout during Connection establishing, closing channel...");
                                 context.getChannel().close();
                             })
-                            .expectResponse(TPKTPacket.class, REQUEST_TIMEOUT)
+                            .expectResponse(TPKTPacket.class, Duration.ofMillis(configuration.getTimeoutRequest()))
                             .check(p -> p.getPayload() instanceof COTPPacketData)
                             .unwrap(p -> ((COTPPacketData) p.getPayload()))
                             .check(p -> p.getPayload() instanceof S7MessageUserData)
@@ -227,27 +207,21 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
             });
     }
 
-    
+
   /*
-    * It performs the sequential and safe shutdown of the driver. 
+    * It performs the sequential and safe shutdown of the driver.
     * Completion of pending requests, executors and associated tasks.
-    */    
+    */
     @Override
     public void onDisconnect(ConversationContext<TPKTPacket> context) {
-        //1. Clear all pending requests and their associated transaction          
-        cleanFutures(); 
-        //2. Here we shutdown the local task executor.
-        clientExecutorService.shutdown();
-        //3. Performs the shutdown of the transaction executor.
         tm.shutdown();
-        //4. Finish the execution of the tasks for the handling of Events. 
+        //4. Finish the execution of the tasks for the handling of Events.
         EventLogic.stop();
-        //5. Executes the closing of the main channel.
-        context.getChannel().close();
-        //6. Here is the stop of any task or state machine that is added.        
+        context.fireDisconnected();
+        //6. Here is the stop of any task or state machine that is added.
     }
 
-   
+
     @Override
     public CompletableFuture<PlcReadResponse> read(PlcReadRequest readRequest) {
         DefaultPlcReadRequest request = (DefaultPlcReadRequest) readRequest;
@@ -289,22 +263,27 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
      */
     private CompletableFuture<S7Message> readInternal(S7MessageRequest request) {
         CompletableFuture<S7Message> future = new CompletableFuture<>();
-        int tpduId = tpduGenerator.getAndIncrement();
+        int thisTpduId = 0;
+        if (this.s7DriverContext.getControllerType() != S7ControllerType.S7_200)
+        {
+            thisTpduId = tpduGenerator.getAndIncrement();
+        }
+        final int tpduId = thisTpduId;
         // If we've reached the max value for a 16 bit transaction identifier, reset back to 1
-        if (tpduGenerator.get() == 0xFFFF) {
-            tpduGenerator.set(1);
+        if(tpduGenerator.get() == 0xFFFF) {
+            tpduGenerator.set(0);
         }
 
         // Create a new Request with correct tpuId (is not known before)
         S7MessageRequest s7MessageRequest = new S7MessageRequest(tpduId, request.getParameter(), request.getPayload());
 
-        TPKTPacket tpktPacket = new TPKTPacket(new COTPPacketData(null, s7MessageRequest, true, (short) tpduId, 9999));
+        TPKTPacket tpktPacket = new TPKTPacket(new COTPPacketData(null, s7MessageRequest, true, (short) tpduId));
         // Start a new request-transaction (Is ended in the response-handler)
         RequestTransactionManager.RequestTransaction transaction = tm.startRequest();
         transaction.submit(() -> context.sendRequest(tpktPacket)
             .onTimeout(new TransactionErrorCallback<>(future, transaction))
             .onError(new TransactionErrorCallback<>(future, transaction))
-            .expectResponse(TPKTPacket.class, REQUEST_TIMEOUT)
+            .expectResponse(TPKTPacket.class, Duration.ofMillis(configuration.getTimeoutRequest()))
             .check(p -> p.getPayload() instanceof COTPPacketData)
             .unwrap(p -> (COTPPacketData) p.getPayload())
             .check(p -> p.getPayload() != null)
@@ -326,17 +305,17 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
         List<S7VarPayloadDataItem> payloadItems = new ArrayList<>(request.getNumberOfTags());
 
         Iterator<String> iter = request.getTagNames().iterator();
-        
+
         String tagName = null;
         while(iter.hasNext()) {
             tagName = iter.next();
             final S7Tag tag = (S7Tag) request.getTag(tagName);
             final PlcValue plcValue = request.getPlcValue(tagName);
             parameterItems.add(new S7VarRequestParameterItemAddress(encodeS7Address(tag)));
-            payloadItems.add(serializePlcValue(tag, plcValue, iter.hasNext()));            
+            payloadItems.add(serializePlcValue(tag, plcValue, iter.hasNext()));
         }
-        
-        
+
+
 //        for (String tagName : request.getTagNames()) {
 //            final S7Tag tag = (S7Tag) request.getTag(tagName);
 //            final PlcValue plcValue = request.getPlcValue(tagName);
@@ -344,9 +323,9 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
 //            payloadItems.add(serializePlcValue(tag, plcValue));
 //
 //        }
-        
-        
-        
+
+
+
         final int tpduId = tpduGenerator.getAndIncrement();
         // If we've reached the max value for a 16 bit transaction identifier, reset back to 1
         if (tpduGenerator.get() == 0xFFFF) {
@@ -358,19 +337,19 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
                 null,
                 new S7MessageRequest(tpduId,
                     new S7ParameterWriteVarRequest(parameterItems),
-                    new S7PayloadWriteVarRequest(payloadItems, null)
+                    new S7PayloadWriteVarRequest(payloadItems)
                 ),
                 true,
-                (short) tpduId, 9999
+                (short) tpduId
             )
         );
-        
+
         // Start a new request-transaction (Is ended in the response-handler)
         RequestTransactionManager.RequestTransaction transaction = tm.startRequest();
         transaction.submit(() -> context.sendRequest(tpktPacket)
             .onTimeout(new TransactionErrorCallback<>(future, transaction))
             .onError(new TransactionErrorCallback<>(future, transaction))
-            .expectResponse(TPKTPacket.class, REQUEST_TIMEOUT)
+            .expectResponse(TPKTPacket.class, Duration.ofMillis(configuration.getTimeoutRequest()))
             .check(p -> p.getPayload() instanceof COTPPacketData)
             .unwrap(p -> ((COTPPacketData) p.getPayload()))
             .unwrap(COTPPacket::getPayload)
@@ -434,15 +413,15 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
         TPKTPacket tpktPacket = new TPKTPacket(new COTPPacketData(null,
             new S7MessageUserData(tpduId,
                 new S7ParameterUserData(parameterItems),
-                new S7PayloadUserData(payloadItems, null)),
-            true, (short) tpduId, 9999));
+                new S7PayloadUserData(payloadItems)),
+            true, (short) tpduId));
 
         // Start a new request-transaction (Is ended in the response-handler)
         RequestTransactionManager.RequestTransaction transaction = tm.startRequest();
         transaction.submit(() -> context.sendRequest(tpktPacket)
             .onTimeout(new TransactionErrorCallback<>(future, transaction))
             .onError(new TransactionErrorCallback<>(future, transaction))
-            .expectResponse(TPKTPacket.class, REQUEST_TIMEOUT)
+            .expectResponse(TPKTPacket.class, Duration.ofMillis(configuration.getTimeoutRequest()))
             .check(p -> p.getPayload() instanceof COTPPacketData)
             .unwrap(p -> ((COTPPacketData) p.getPayload()))
             .unwrap(COTPPacket::getPayload)
@@ -734,8 +713,8 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
             new S7ParameterUserDataItemCPUFunctions((short) 0x11, (byte) 0x4, (byte) 0x4, (short) 0x01, (short) 0x00, null, null, null)
         )), new S7PayloadUserData(Collections.singletonList(
             new S7PayloadUserDataItemCpuFunctionReadSzlRequest(DataTransportErrorCode.OK, DataTransportSize.OCTET_STRING, new SzlId(SzlModuleTypeClass.CPU, (byte) 0x00, SzlSublist.MODULE_IDENTIFICATION), 0x0000)
-        ), null));
-        COTPPacketData cotpPacketData = new COTPPacketData(null, identifyRemoteMessage, true, (short) 2, 9999);
+        )));
+        COTPPacketData cotpPacketData = new COTPPacketData(null, identifyRemoteMessage, true, (short) 2);
         return new TPKTPacket(cotpPacketData);
     }
 
@@ -763,19 +742,18 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
             new S7ParameterSetupCommunication(
                 s7DriverContext.getMaxAmqCaller(), s7DriverContext.getMaxAmqCallee(), s7DriverContext.getPduSize());
         S7Message s7Message = new S7MessageRequest(0, s7ParameterSetupCommunication,
-            null);       
-        COTPPacketData cotpPacketData = new COTPPacketData(null, s7Message, true, (short) 1, 9999);
-
+            null);
+        COTPPacketData cotpPacketData = new COTPPacketData(null, s7Message, true, (short) 1);
         return new TPKTPacket(cotpPacketData);
     }
 
     private COTPPacketConnectionRequest createCOTPConnectionRequest(int calledTsapId, int callingTsapId, COTPTpduSize cotpTpduSize) {
         return new COTPPacketConnectionRequest(
             Arrays.asList(
-                new COTPParameterCallingTsap(callingTsapId,(short) 0),
-                new COTPParameterCalledTsap(calledTsapId, (short) 0),
-                new COTPParameterTpduSize(cotpTpduSize, (short) 0)
-            ), null, (short) 0x0000, (short) 0x000F, COTPProtocolClass.CLASS_0, 0);
+                new COTPParameterCallingTsap(callingTsapId),
+                new COTPParameterCalledTsap(calledTsapId),
+                new COTPParameterTpduSize(cotpTpduSize)
+            ), null, (short) 0x0000, (short) 0x000F, COTPProtocolClass.CLASS_0);
     }
 
     private PlcResponse decodeReadResponse(S7Message responseMessage, PlcReadRequest plcReadRequest) throws PlcProtocolException {
@@ -921,18 +899,18 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
             int stringLength = (tag instanceof S7StringTag) ? ((S7StringTag) tag).getStringLength() : 254;
             ByteBuffer byteBuffer = null;
             for (int i = 0; i < tag.getNumberOfElements(); i++) {
-                final int lengthInBits = DataItem.getLengthInBits(plcValue.getIndex(i), tag.getDataType().getDataProtocolId(), stringLength);
-                final WriteBufferByteBased writeBuffer = new WriteBufferByteBased((int) Math.ceil(((float) lengthInBits) / 8.0f));
-                DataItem.staticSerialize(writeBuffer, plcValue.getIndex(i), tag.getDataType().getDataProtocolId(), stringLength);
+                final int lengthInBytes = DataItem.getLengthInBytes(plcValue.getIndex(i), tag.getDataType().getDataProtocolId(), stringLength, tag.getStringEncoding());
+                final WriteBufferByteBased writeBuffer = new WriteBufferByteBased(lengthInBytes);
+                DataItem.staticSerialize(writeBuffer, plcValue.getIndex(i), tag.getDataType().getDataProtocolId(), stringLength, tag.getStringEncoding());
                 // Allocate enough space for all items.
                 if (byteBuffer == null) {
-                    byteBuffer = ByteBuffer.allocate(writeBuffer.getBytes().length * tag.getNumberOfElements());
+                    byteBuffer = ByteBuffer.allocate(lengthInBytes * tag.getNumberOfElements());
                 }
                 byteBuffer.put(writeBuffer.getBytes());
             }
             if (byteBuffer != null) {
                 byte[] data = byteBuffer.array();
-                return new S7VarPayloadDataItem(DataTransportErrorCode.OK, transportSize, data, hasNext);
+                return new S7VarPayloadDataItem(DataTransportErrorCode.OK, transportSize, data/*, hasNext*/);
             }
         } catch (SerializationException e) {
             logger.warn("Error serializing tag item of type: '{}'", tag.getDataType().name(), e);
@@ -946,13 +924,13 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
             int stringLength = (tag instanceof S7StringTag) ? ((S7StringTag) tag).getStringLength() : 254;
             if (tag.getNumberOfElements() == 1) {
                 return DataItem.staticParse(readBuffer, tag.getDataType().getDataProtocolId(),
-                    stringLength);
+                    stringLength, tag.getStringEncoding());
             } else {
                 // Fetch all
                 final PlcValue[] resultItems = IntStream.range(0, tag.getNumberOfElements()).mapToObj(i -> {
                     try {
                         return DataItem.staticParse(readBuffer, tag.getDataType().getDataProtocolId(),
-                            stringLength);
+                            stringLength, tag.getStringEncoding());
                     } catch (ParseException e) {
                         logger.warn("Error parsing tag item of type: '{}' (at position {}})", tag.getDataType().name(), i, e);
                     }
@@ -1036,17 +1014,34 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
         // For these date-types we have to convert the requests to simple byte-array requests
         // As otherwise the S7 will deny them with "Data type not supported" replies.
         if ((transportSize == TransportSize.TIME) /*|| (transportSize == TransportSize.S7_S5TIME)*/ ||
-            (transportSize == TransportSize.LTIME) || (transportSize == TransportSize.DATE) ||
-            (transportSize == TransportSize.TIME_OF_DAY) || (transportSize == TransportSize.DATE_AND_TIME)) {
+            (transportSize == TransportSize.LINT) ||
+            (transportSize == TransportSize.ULINT) ||
+            (transportSize == TransportSize.LWORD) ||
+            (transportSize == TransportSize.LREAL) ||
+            (transportSize == TransportSize.REAL) ||
+            (transportSize == TransportSize.LTIME) ||
+            (transportSize == TransportSize.DATE) ||
+            (transportSize == TransportSize.TIME_OF_DAY) ||
+            (transportSize == TransportSize.DATE_AND_TIME)
+        ) {
             numElements = numElements * transportSize.getSizeInBytes();
+            //((S7Field) field).setDataType(transportSize);
             transportSize = TransportSize.BYTE;
         }
+        if (transportSize == TransportSize.CHAR) {
+            transportSize = TransportSize.BYTE;
+            numElements = numElements * transportSize.getSizeInBytes();
+        }
+        if (transportSize == TransportSize.WCHAR) {
+            transportSize = TransportSize.BYTE;
+            numElements = numElements * transportSize.getSizeInBytes() * 2;
+        }
         if (transportSize == TransportSize.STRING) {
-            transportSize = TransportSize.CHAR;
+            transportSize = TransportSize.BYTE;
             int stringLength = (s7Tag instanceof S7StringTag) ? ((S7StringTag) s7Tag).getStringLength() : 254;
             numElements = numElements * (stringLength + 2);
         } else if (transportSize == TransportSize.WSTRING) {
-            transportSize = TransportSize.CHAR;
+            transportSize = TransportSize.BYTE;
             int stringLength = (s7Tag instanceof S7StringTag) ? ((S7StringTag) s7Tag).getStringLength() : 254;
             numElements = numElements * (stringLength + 2) * 2;
         }
@@ -1079,27 +1074,4 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
             future.completeExceptionally(e);
         }
     }
-    
-    private void cleanFutures(){
-        //TODO: Debe ser ejecutado si la conexion esta levanta.
-        active_requests.forEach((f,p)->{
-            CompletableFuture<Object> cf = (CompletableFuture<Object>) f;
-            try {
-                if (!cf.isDone()) {
-                    logger.info("CF");
-                    cf.cancel(true);
-                    logger.info("ClientCF");
-                    ((CompletableFuture<Object>) p.getRight()).completeExceptionally(new PlcRuntimeException("Disconnected"));                     
-                    logger.info("TM");
-                    p.getLeft().endRequest();
-                };
-            } catch (Exception ex){
-                logger.info(ex.toString());
-            }
-        });
-        active_requests.clear();   
-
-    }    
-    
-
 }
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/tag/S7StringTag.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/tag/S7StringTag.java
index 2435717c44..b4285ba0fb 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/tag/S7StringTag.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/tag/S7StringTag.java
@@ -36,8 +36,9 @@ public class S7StringTag extends S7Tag {
     protected S7StringTag(@JsonProperty("dataType") TransportSize dataType, @JsonProperty("memoryArea") MemoryArea memoryArea,
                           @JsonProperty("blockNumber") int blockNumber, @JsonProperty("byteOffset") int byteOffset,
                           @JsonProperty("bitOffset") byte bitOffset, @JsonProperty("numElements") int numElements,
-                          @JsonProperty("stringLength") int stringLength) {
-        super(dataType, memoryArea, blockNumber, byteOffset, bitOffset, numElements);
+                          @JsonProperty("stringLength") int stringLength,
+                          @JsonProperty("stringEncoding") String stringEncoding) {
+        super(dataType, memoryArea, blockNumber, byteOffset, bitOffset, numElements,stringEncoding);
         this.stringLength = stringLength;
     }
 
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/tag/S7Tag.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/tag/S7Tag.java
index 2a78a33da6..5a92175fb1 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/tag/S7Tag.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/tag/S7Tag.java
@@ -47,24 +47,23 @@ public class S7Tag implements PlcTag, Serializable {
 
     //byteOffset theoretically can reach up to 2097151 ... see checkByteOffset() below --> 7digits
     private static final Pattern ADDRESS_PATTERN =
-        Pattern.compile("^%(?<memoryArea>.)(?<transferSizeCode>[XBWD]?)(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:(?<dataType>[a-zA-Z_]+)(\\[(?<numElements>\\d+)])?");
+        Pattern.compile("^%(?<memoryArea>.)(?<transferSizeCode>[XBWD]?)(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:(?<dataType>[a-zA-Z_]+)(\\[(?<numElements>\\d+)])?(\\|(?<stringEncoding>[a-z0-9A-Z_-]+))?");
 
     //blockNumber usually has its max hat around 64000 --> 5digits
     private static final Pattern DATA_BLOCK_ADDRESS_PATTERN =
-        Pattern.compile("^%DB(?<blockNumber>\\d{1,5}).DB(?<transferSizeCode>[XBWD]?)(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:(?<dataType>[a-zA-Z_]+)(\\[(?<numElements>\\d+)])?");
+        Pattern.compile("^%DB(?<blockNumber>\\d{1,5}).DB(?<transferSizeCode>[XBWD]?)(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:(?<dataType>[a-zA-Z_]+)(\\[(?<numElements>\\d+)])?(\\|(?<stringEncoding>[a-z0-9A-Z_-]+))?");
 
     private static final Pattern DATA_BLOCK_SHORT_PATTERN =
-        Pattern.compile("^%DB(?<blockNumber>\\d{1,5}):(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:(?<dataType>[a-zA-Z_]+)(\\[(?<numElements>\\d+)])?");
+        Pattern.compile("^%DB(?<blockNumber>\\d{1,5}):(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:(?<dataType>[a-zA-Z_]+)(\\[(?<numElements>\\d+)])?(\\|(?<stringEncoding>[a-z0-9A-Z_-]+))?");
 
     private static final Pattern DATA_BLOCK_STRING_ADDRESS_PATTERN =
-        Pattern.compile("^%DB(?<blockNumber>\\d{1,5}).DB(?<transferSizeCode>[XBWD]?)(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:(?<dataType>STRING|WSTRING)\\((?<stringLength>\\d{1,3})\\)(\\[(?<numElements>\\d+)])?");
+        Pattern.compile("^%DB(?<blockNumber>\\d{1,5}).DB(?<transferSizeCode>[XBWD]?)(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:(?<dataType>STRING|WSTRING)\\((?<stringLength>\\d{1,3})\\)(\\[(?<numElements>\\d+)])?(\\|(?<stringEncoding>[a-z0-9A-Z_-]+))?");
 
     private static final Pattern DATA_BLOCK_STRING_SHORT_PATTERN =
-        Pattern.compile("^%DB(?<blockNumber>\\d{1,5}):(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:(?<dataType>STRING|WSTRING)\\((?<stringLength>\\d{1,3})\\)(\\[(?<numElements>\\d+)])?");
+        Pattern.compile("^%DB(?<blockNumber>\\d{1,5}):(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:(?<dataType>STRING|WSTRING)\\((?<stringLength>\\d{1,3})\\)(\\[(?<numElements>\\d+)])?(\\|(?<stringEncoding>[a-z0-9A-Z_-]+))?");
 
     private static final Pattern PLC_PROXY_ADDRESS_PATTERN =
-        Pattern.compile("[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}");
-
+        Pattern.compile("[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}(\\|(?<stringEncoding>[a-z0-9A-Z_-]+))?");
     private static final String DATA_TYPE = "dataType";
     private static final String STRING_LENGTH = "stringLength";
     private static final String TRANSFER_SIZE_CODE = "transferSizeCode";
@@ -73,6 +72,7 @@ public class S7Tag implements PlcTag, Serializable {
     private static final String BIT_OFFSET = "bitOffset";
     private static final String NUM_ELEMENTS = "numElements";
     private static final String MEMORY_AREA = "memoryArea";
+    private static final String STRING_ENCODING = "stringEncoding";
 
     private final TransportSize dataType;
     private final MemoryArea memoryArea;
@@ -81,16 +81,20 @@ public class S7Tag implements PlcTag, Serializable {
     private final byte bitOffset;
     private final int numElements;
 
+    private final String stringEncoding;
+
     @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
     protected S7Tag(@JsonProperty("dataType") TransportSize dataType, @JsonProperty("memoryArea") MemoryArea memoryArea,
                     @JsonProperty("blockNumber") int blockNumber, @JsonProperty("byteOffset") int byteOffset,
-                    @JsonProperty("bitOffset") byte bitOffset, @JsonProperty("numElements") int numElements) {
+                    @JsonProperty("bitOffset") byte bitOffset, @JsonProperty("numElements") int numElements,
+                    @JsonProperty("stringEncoding") String stringEncoding) {
         this.dataType = dataType;
         this.memoryArea = memoryArea;
         this.blockNumber = blockNumber;
         this.byteOffset = byteOffset;
         this.bitOffset = bitOffset;
         this.numElements = numElements;
+        this.stringEncoding = stringEncoding;
     }
 
     @Override
@@ -135,6 +139,10 @@ public class S7Tag implements PlcTag, Serializable {
         return bitOffset;
     }
 
+    public String getStringEncoding() {
+        return stringEncoding;
+    }
+    @Override
     public int getNumberOfElements() {
         return numElements;
     }
@@ -162,7 +170,7 @@ public class S7Tag implements PlcTag, Serializable {
             if (matcher.group(BIT_OFFSET) != null) {
                 bitOffset = Byte.parseByte(matcher.group(BIT_OFFSET));
             } else if (dataType == TransportSize.BOOL) {
-                throw new PlcInvalidTagException("Expected bit offset for BOOL parameters.");
+                //throw new PlcInvalidTagException("Expected bit offset for BOOL parameters.");
             }
             int numElements = 1;
             if (matcher.group(NUM_ELEMENTS) != null) {
@@ -173,8 +181,16 @@ public class S7Tag implements PlcTag, Serializable {
                 throw new PlcInvalidTagException("Transfer size code '" + transferSizeCode +
                     "' doesn't match specified data type '" + dataType.name() + "'");
             }
-
-            return new S7StringTag(dataType, memoryArea, blockNumber, byteOffset, bitOffset, numElements, stringLength);
+            String stringEncoding = matcher.group(STRING_ENCODING);
+            if (stringEncoding==null || "".equals(stringEncoding))
+            {
+                stringEncoding = "UTF-8";
+                if (dataType == TransportSize.WSTRING || dataType == TransportSize.WCHAR)
+                {
+                    stringEncoding = "UTF-16";
+                }
+            }
+            return new S7StringTag(dataType, memoryArea, blockNumber, byteOffset, bitOffset, numElements, stringLength, stringEncoding);
         } else if ((matcher = DATA_BLOCK_STRING_SHORT_PATTERN.matcher(tagString)).matches()) {
             TransportSize dataType = TransportSize.valueOf(matcher.group(DATA_TYPE));
             int stringLength = Integer.parseInt(matcher.group(STRING_LENGTH));
@@ -186,9 +202,17 @@ public class S7Tag implements PlcTag, Serializable {
             if (matcher.group(NUM_ELEMENTS) != null) {
                 numElements = Integer.parseInt(matcher.group(NUM_ELEMENTS));
             }
-
+            String stringEncoding = matcher.group(STRING_ENCODING);
+            if (stringEncoding==null || "".equals(stringEncoding))
+            {
+                stringEncoding = "UTF-8";
+                if (dataType == TransportSize.WSTRING || dataType == TransportSize.WCHAR)
+                {
+                    stringEncoding = "UTF-16";
+                }
+            }
             return new S7StringTag(dataType, memoryArea, blockNumber,
-                byteOffset, bitOffset, numElements, stringLength);
+                byteOffset, bitOffset, numElements, stringLength, stringEncoding);
         } else if ((matcher = DATA_BLOCK_ADDRESS_PATTERN.matcher(tagString)).matches()) {
             TransportSize dataType = TransportSize.valueOf(matcher.group(DATA_TYPE));
             MemoryArea memoryArea = MemoryArea.DATA_BLOCKS;
@@ -210,8 +234,16 @@ public class S7Tag implements PlcTag, Serializable {
                 throw new PlcInvalidTagException("Transfer size code '" + transferSizeCode +
                     "' doesn't match specified data type '" + dataType.name() + "'");
             }
-
-            return new S7Tag(dataType, memoryArea, blockNumber, byteOffset, bitOffset, numElements);
+            String stringEncoding = matcher.group(STRING_ENCODING);
+            if (stringEncoding==null || "".equals(stringEncoding))
+            {
+                stringEncoding = "UTF-8";
+                if (dataType == TransportSize.WSTRING || dataType == TransportSize.WCHAR)
+                {
+                    stringEncoding = "UTF-16";
+                }
+            }
+            return new S7Tag(dataType, memoryArea, blockNumber, byteOffset, bitOffset, numElements, stringEncoding);
         } else if ((matcher = DATA_BLOCK_SHORT_PATTERN.matcher(tagString)).matches()) {
             TransportSize dataType = TransportSize.valueOf(matcher.group(DATA_TYPE));
             MemoryArea memoryArea = MemoryArea.DATA_BLOCKS;
@@ -221,15 +253,23 @@ public class S7Tag implements PlcTag, Serializable {
             if (matcher.group(BIT_OFFSET) != null) {
                 bitOffset = Byte.parseByte(matcher.group(BIT_OFFSET));
             } else if (dataType == TransportSize.BOOL) {
-                throw new PlcInvalidTagException("Expected bit offset for BOOL parameters.");
+                //throw new PlcInvalidTagException("Expected bit offset for BOOL parameters.");
             }
             int numElements = 1;
             if (matcher.group(NUM_ELEMENTS) != null) {
                 numElements = Integer.parseInt(matcher.group(NUM_ELEMENTS));
             }
-
-            return new S7Tag(dataType, memoryArea, blockNumber, byteOffset, bitOffset, numElements);
-        } else if (PLC_PROXY_ADDRESS_PATTERN.matcher(tagString).matches()) {
+            String stringEncoding = matcher.group(STRING_ENCODING);
+            if (stringEncoding==null || "".equals(stringEncoding))
+            {
+                stringEncoding = "UTF-8";
+                if (dataType == TransportSize.WSTRING || dataType == TransportSize.WCHAR)
+                {
+                    stringEncoding = "UTF-16";
+                }
+            }
+            return new S7Tag(dataType, memoryArea, blockNumber, byteOffset, bitOffset, numElements, stringEncoding);
+        } else if ((matcher = PLC_PROXY_ADDRESS_PATTERN.matcher(tagString)).matches()) {
             try {
                 byte[] addressData = Hex.decodeHex(tagString.replaceAll("[-]", ""));
                 ReadBuffer rb = new ReadBufferByteBased(addressData);
@@ -240,10 +280,18 @@ public class S7Tag implements PlcTag, Serializable {
                     if ((s7AddressAny.getTransportSize() != TransportSize.BOOL) && s7AddressAny.getBitAddress() != 0) {
                         throw new PlcInvalidTagException("A bit offset other than 0 is only supported for type BOOL");
                     }
-
+                    String stringEncoding = matcher.group(STRING_ENCODING);
+                    if (stringEncoding==null || "".equals(stringEncoding))
+                    {
+                        stringEncoding = "UTF-8";
+                        if (s7AddressAny.getTransportSize() == TransportSize.WSTRING || s7AddressAny.getTransportSize() == TransportSize.WCHAR)
+                        {
+                            stringEncoding = "UTF-16";
+                        }
+                    }
                     return new S7Tag(s7AddressAny.getTransportSize(), s7AddressAny.getArea(),
                         s7AddressAny.getDbNumber(), s7AddressAny.getByteAddress(),
-                        s7AddressAny.getBitAddress(), s7AddressAny.getNumberOfElements());
+                        s7AddressAny.getBitAddress(), s7AddressAny.getNumberOfElements(), stringEncoding);
                 } else {
                     throw new PlcInvalidTagException("Unsupported address type.");
                 }
@@ -259,7 +307,7 @@ public class S7Tag implements PlcTag, Serializable {
             if (matcher.group(BIT_OFFSET) != null) {
                 bitOffset = Byte.parseByte(matcher.group(BIT_OFFSET));
             } else if (dataType == TransportSize.BOOL) {
-                throw new PlcInvalidTagException("Expected bit offset for BOOL parameters.");
+                //throw new PlcInvalidTagException("Expected bit offset for BOOL parameters.");
             }
             int numElements = 1;
             if (matcher.group(NUM_ELEMENTS) != null) {
@@ -273,8 +321,17 @@ public class S7Tag implements PlcTag, Serializable {
             if ((dataType != TransportSize.BOOL) && bitOffset != 0) {
                 throw new PlcInvalidTagException("A bit offset other than 0 is only supported for type BOOL");
             }
+            String stringEncoding = matcher.group(STRING_ENCODING);
+            if (stringEncoding==null || "".equals(stringEncoding))
+            {
+                stringEncoding = "UTF-8";
+                if (dataType == TransportSize.WSTRING || dataType == TransportSize.WCHAR)
+                {
+                    stringEncoding = "UTF-16";
+                }
+            }
 
-            return new S7Tag(dataType, memoryArea, (short) 0, byteOffset, bitOffset, numElements);
+            return new S7Tag(dataType, memoryArea, (short) 0, byteOffset, bitOffset, numElements, stringEncoding);
         }
         throw new PlcInvalidTagException("Unable to parse address: " + tagString);
     }
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/utils/StaticHelper.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/utils/StaticHelper.java
index 3fda942897..f1ab55296d 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/utils/StaticHelper.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/utils/StaticHelper.java
@@ -36,14 +36,22 @@ import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.ReadBuffer;
 import org.apache.plc4x.java.spi.generation.SerializationException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
+import org.apache.plc4x.java.spi.values.PlcList;
+import org.apache.plc4x.java.spi.values.PlcWCHAR;
 
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.nio.ByteBuffer;
+import java.nio.charset.CharacterCodingException;
 import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
 import java.nio.charset.StandardCharsets;
 import java.time.Duration;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.temporal.ChronoUnit;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.logging.Level;
@@ -127,6 +135,87 @@ import java.util.regex.Pattern;
  */
 
 public class StaticHelper {
+    private static final String[] DEFAULTCHARSETS = {"ASCII", "UTF-8", "GBK", "GB2312", "BIG5", "GB18030"};
+
+    public static Charset detectCharset(String firstMaTch, byte[] bytes) {
+
+        Charset charset = null;
+        if (firstMaTch!=null && !"".equals(firstMaTch))
+        {
+            try {
+                charset = Charset.forName(firstMaTch.replaceAll("[^a-zA-Z0-9]", ""));
+            }catch (Exception ignored) {
+            }
+            return charset;
+        }
+        for (String charsetName : DEFAULTCHARSETS) {
+            charset = detectCharset(bytes, Charset.forName(charsetName), bytes.length);
+            if (charset != null) {
+                break;
+            }
+        }
+
+        return charset;
+    }
+
+    private static Charset detectCharset(byte[] bytes, Charset charset, int length) {
+        try {
+            BufferedInputStream input = new BufferedInputStream(new ByteArrayInputStream(bytes, 0, length));
+
+            CharsetDecoder decoder = charset.newDecoder();
+            decoder.reset();
+
+            byte[] buffer = new byte[512];
+            boolean identified = false;
+            while (input.read(buffer) != -1 && !identified) {
+                identified = identify(buffer, decoder);
+            }
+
+            input.close();
+
+            if (identified) {
+                return charset;
+            } else {
+                return null;
+            }
+
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    private static boolean identify(byte[] bytes, CharsetDecoder decoder) {
+        try {
+            decoder.decode(ByteBuffer.wrap(bytes));
+        } catch (CharacterCodingException e) {
+            return false;
+        }
+        return true;
+    }
+    public static Charset getEncoding(String firstMaTch, String str) {
+        if (str == null || str.trim().length() < 1) {
+            return null;
+        }
+        Charset charset = null;
+        if (firstMaTch!=null && !"".equals(firstMaTch))
+        {
+            try {
+                charset = Charset.forName(firstMaTch.replaceAll("[^a-zA-Z0-9]", ""));
+            }catch (Exception ignored) {
+            }
+            return charset;
+        }
+        for (String encode : DEFAULTCHARSETS) {
+            try {
+                Charset charset1 = Charset.forName(encode);
+                if (str.equals(new String(str.getBytes(charset1), charset1))) {
+                    return charset1;
+                }
+            } catch (Exception er) {
+            }
+        }
+        return null;
+    }
 
     public enum OB {
         FREE_CYC(0X0000, "OB1 Free cycle"),
@@ -1931,7 +2020,7 @@ public class StaticHelper {
         throw new NotImplementedException("Serializing DATE_AND_TIME not implemented");
     }
 
-    public static String parseS7Char(ReadBuffer io, String encoding) throws ParseException {
+    public static String parseS7Char(ReadBuffer io, String encoding, String stringEncoding) throws ParseException{
         if ("UTF-8".equalsIgnoreCase(encoding)) {
             return io.readString(8, WithOption.WithEncoding(encoding));
         } else if ("UTF-16".equalsIgnoreCase(encoding)) {
@@ -1941,14 +2030,14 @@ public class StaticHelper {
         }
     }
 
-    public static String parseS7String(ReadBuffer io, int stringLength, String encoding) {
+    public static String parseS7String(ReadBuffer io, int stringLength, String encoding, String stringEncoding) {
         try {
             if ("UTF-8".equalsIgnoreCase(encoding)) {
                 // This is the maximum number of bytes a string can be long.
                 short maxLength = io.readUnsignedShort(8);
                 // This is the total length of the string on the PLC (Not necessarily the number of characters read)
                 short totalStringLength = io.readUnsignedShort(8);
-
+                totalStringLength = (short) Math.min(maxLength, totalStringLength);
                 final byte[] byteArray = new byte[totalStringLength];
                 for (int i = 0; (i < stringLength) && io.hasMore(8); i++) {
                     final byte curByte = io.readByte();
@@ -1963,13 +2052,25 @@ public class StaticHelper {
                         break;
                     }
                 }
-                return new String(byteArray, StandardCharsets.UTF_8);
+                Charset charset = detectCharset(null,byteArray);
+                if (charset == null) {
+                    try {
+                        charset = Charset.forName(stringEncoding.replaceAll("[^a-zA-Z0-9]", ""));
+                    }catch (Exception ignored) {
+                    }
+                    if (charset == null) {
+                        charset = StandardCharsets.UTF_8;
+                    }
+                }
+                String substr = new String(byteArray, charset);
+                substr = substr.replaceAll("[^\u0020-\u9FA5]", "");
+                return substr;
             } else if ("UTF-16".equalsIgnoreCase(encoding)) {
                 // This is the maximum number of bytes a string can be long.
                 int maxLength = io.readUnsignedInt(16);
                 // This is the total length of the string on the PLC (Not necessarily the number of characters read)
                 int totalStringLength = io.readUnsignedInt(16);
-
+                totalStringLength = Math.min(maxLength, totalStringLength);
                 final byte[] byteArray = new byte[totalStringLength * 2];
                 for (int i = 0; (i < stringLength) && io.hasMore(16); i++) {
                     final short curShort = io.readShort(16);
@@ -1985,7 +2086,17 @@ public class StaticHelper {
                         break;
                     }
                 }
-                return new String(byteArray, StandardCharsets.UTF_16);
+                Charset charset = detectCharset(stringEncoding,byteArray);
+                if (charset == null) {
+                    try {
+                        charset = Charset.forName(stringEncoding.replaceAll("[^a-zA-Z0-9]", ""));
+                    }catch (Exception ignored) {
+                    }
+                    if (charset == null) {
+                        charset = StandardCharsets.UTF_16;
+                    }
+                }
+                return new String(byteArray, charset);
             } else {
                 throw new PlcRuntimeException("Unsupported string encoding " + encoding);
             }
@@ -1997,12 +2108,29 @@ public class StaticHelper {
     /*
      * A variable of data type CHAR (character) occupies one byte.
      */
-    public static void serializeS7Char(WriteBuffer io, PlcValue value, String encoding) {
-        // TODO: Need to implement the serialization or we can't write strings
+    public static void serializeS7Char(WriteBuffer io, PlcValue value, String encoding, String stringEncoding) {
+        if (value instanceof PlcList) {
+            PlcList list = (PlcList) value;
+            list.getList().forEach(v -> writeChar(io, v, encoding,stringEncoding));
+        } else {
+            writeChar(io, value, encoding,stringEncoding);
+        }
+    }
+    private static void writeChar(WriteBuffer io, PlcValue value, String encoding, String stringEncoding) {
         if ("UTF-8".equalsIgnoreCase(encoding)) {
-            //return io.readString(8, encoding);
+            try {
+                byte valueByte = value.getByte();
+                io.writeByte(valueByte);
+            } catch (SerializationException e) {
+                throw new PlcRuntimeException("writeChar error");
+            }
         } else if ("UTF-16".equalsIgnoreCase(encoding)) {
-            //return io.readString(16, encoding);
+            try {
+                byte[] bytes = ((PlcWCHAR) value).getBytes();
+                io.writeByteArray(bytes);
+            } catch (SerializationException e) {
+                throw new PlcRuntimeException("writeWChar error");
+            }
         } else {
             throw new PlcRuntimeException("Unsupported encoding");
         }
@@ -2032,23 +2160,57 @@ public class StaticHelper {
      * If your application does not handle S7string, you can handle
      * the String as char arrays from your application.
      */
-    public static void serializeS7String(WriteBuffer io, PlcValue value, int stringLength, String encoding) {
-        int k = 0xFF & ((stringLength > 250) ? 250 : stringLength);
-        int m = 0xFF & value.getString().length();
-        m = (m > k) ? k : m;
-        byte[] chars = new byte[m];
-        for (int i = 0; i < m; ++i) {
-            char c = value.getString().charAt(i);
-            chars[i] = (byte) c;
+    public static void serializeS7String(WriteBuffer io, PlcValue value, int stringLength, String encoding, String stringEncoding) {
+        stringLength = Math.min(stringLength, 254);
+        String valueString = (String) value.getObject();
+        valueString = valueString == null ? "" : valueString;
+        if ("AUTO".equalsIgnoreCase(stringEncoding))
+        {
+            stringEncoding = null;
+        }
+        Charset charsetTemp = getEncoding(stringEncoding,valueString);
+        if ("UTF-8".equalsIgnoreCase(encoding)) {
+            if (charsetTemp == null) {
+                charsetTemp = StandardCharsets.UTF_8;
+            }
+            final byte[] raw = valueString.getBytes(charsetTemp);
+            try {
+                io.writeByte((byte) stringLength);
+                io.writeByte((byte) raw.length);
+                for (int i = 0; i < stringLength; i++) {
+                    if (i >= raw.length) {
+                        io.writeByte((byte) 0x00);
+                    } else {
+                        io.writeByte( raw[i]);
+                    }
+                }
+            }
+            catch (SerializationException ex) {
+                Logger.getLogger(StaticHelper.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        } else if ("UTF-16".equalsIgnoreCase(encoding)) {
+            if (charsetTemp == null) {
+                charsetTemp = StandardCharsets.UTF_16;
+            }
+            final byte[] raw = valueString.getBytes(charsetTemp);
+            try {
+                io.writeUnsignedInt(16, stringLength);
+                io.writeUnsignedInt(16, raw.length / 2);
+                for (int i = 0; i < stringLength * 2; i++) {
+                    if (i >= raw.length) {
+                        io.writeByte((byte) 0x00);
+                    } else {
+                        io.writeByte( raw[i]);
+                    }
+                }
+            }
+            catch (SerializationException ex) {
+                Logger.getLogger(StaticHelper.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        } else {
+            throw new PlcRuntimeException("Unsupported string encoding " + encoding);
         }
 
-        try {
-            io.writeByte((byte)(k & 0xFF));
-            io.writeByte((byte)(m & 0xFF));
-            io.writeByteArray(chars);
-        } catch (SerializationException ex) {
-            Logger.getLogger(StaticHelper.class.getName()).log(Level.SEVERE, null, ex);
-        }
     }
 
 }
diff --git a/plc4j/drivers/s7/src/test/java/S7IoTest.java b/plc4j/drivers/s7/src/test/java/S7IoTest.java
index a9ceea4a72..2c23628e3d 100644
--- a/plc4j/drivers/s7/src/test/java/S7IoTest.java
+++ b/plc4j/drivers/s7/src/test/java/S7IoTest.java
@@ -331,7 +331,7 @@ public class S7IoTest {
 
         TPKTPacket tpktPacket = new TPKTPacket(
             new COTPPacketData(
-                Collections.singletonList(new COTPParameterTpduSize(COTPTpduSize.SIZE_4096, (short) 0)),
+                Collections.singletonList(new COTPParameterTpduSize(COTPTpduSize.SIZE_4096)),
                 new S7MessageResponseData(
                     11,
                     new S7ParameterReadVarResponse((short) 1),
@@ -340,16 +340,15 @@ public class S7IoTest {
                             new S7VarPayloadDataItem(
                                 DataTransportErrorCode.OK,
                                 DataTransportSize.BIT,
-                                new byte[]{0x1},
-                                    false
+                                new byte[]{0x1}
                             )
-                        ), null
+                        )
                     ),
                     (short) 0,
                     (short) 0
                 ),
                 false,
-                (short) 13, 0
+                (short) 13
             )
         );
         // To string
diff --git a/plc4j/drivers/s7/src/test/resources/logback-test.xml b/plc4j/drivers/s7/src/test/resources/logback-test.xml
index 33ae65561c..3020916362 100644
--- a/plc4j/drivers/s7/src/test/resources/logback-test.xml
+++ b/plc4j/drivers/s7/src/test/resources/logback-test.xml
@@ -27,7 +27,7 @@
     </encoder>
   </appender>
 
-  <root level="error">
+  <root level="debug">
     <appender-ref ref="STDOUT" />
   </root>
 
diff --git a/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedConnection.java b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedConnection.java
index 515d3e1eb1..b533477fd3 100644
--- a/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedConnection.java
+++ b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedConnection.java
@@ -18,31 +18,16 @@
  */
 package org.apache.plc4x.java.simulated.connection;
 
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.PlcReadResponse;
-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.PlcUnsubscriptionRequest;
-import org.apache.plc4x.java.api.messages.PlcUnsubscriptionResponse;
-import org.apache.plc4x.java.api.messages.PlcWriteRequest;
-import org.apache.plc4x.java.api.messages.PlcWriteResponse;
+import org.apache.plc4x.java.api.messages.*;
 import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
-import org.apache.plc4x.java.api.model.PlcSubscriptionTag;
 import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
+import org.apache.plc4x.java.api.model.PlcSubscriptionTag;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.simulated.tag.SimulatedTag;
 import org.apache.plc4x.java.simulated.tag.SimulatedTagHandler;
 import org.apache.plc4x.java.spi.connection.AbstractPlcConnection;
-import org.apache.plc4x.java.spi.messages.DefaultPlcReadResponse;
-import org.apache.plc4x.java.spi.messages.DefaultPlcSubscriptionEvent;
-import org.apache.plc4x.java.spi.messages.DefaultPlcSubscriptionResponse;
-import org.apache.plc4x.java.spi.messages.DefaultPlcUnsubscriptionResponse;
-import org.apache.plc4x.java.spi.messages.DefaultPlcWriteResponse;
-import org.apache.plc4x.java.spi.messages.PlcReader;
-import org.apache.plc4x.java.spi.messages.PlcSubscriber;
-import org.apache.plc4x.java.spi.messages.PlcWriter;
+import org.apache.plc4x.java.spi.messages.*;
 import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
 import org.apache.plc4x.java.spi.model.DefaultPlcConsumerRegistration;
 import org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionHandle;
@@ -51,12 +36,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.time.Instant;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Consumer;
@@ -65,7 +45,7 @@ import java.util.function.Consumer;
  * Connection to a test device.
  * This class is not thread-safe.
  */
-public class SimulatedConnection extends AbstractPlcConnection implements PlcReader, PlcWriter, PlcSubscriber {
+public class SimulatedConnection extends AbstractPlcConnection {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(SimulatedConnection.class);
 
diff --git a/plc4j/examples/hello-connectivity-mqtt/src/main/java/org/apache/plc4x/java/examples/connectivity/mqtt/MqttConnector.java b/plc4j/examples/hello-connectivity-mqtt/src/main/java/org/apache/plc4x/java/examples/connectivity/mqtt/MqttConnector.java
index 54c2b203c4..09d036d93c 100644
--- a/plc4j/examples/hello-connectivity-mqtt/src/main/java/org/apache/plc4x/java/examples/connectivity/mqtt/MqttConnector.java
+++ b/plc4j/examples/hello-connectivity-mqtt/src/main/java/org/apache/plc4x/java/examples/connectivity/mqtt/MqttConnector.java
@@ -24,10 +24,10 @@ import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import com.hivemq.client.mqtt.MqttClient;
 import com.hivemq.client.mqtt.datatypes.MqttQos;
-import com.hivemq.client.mqtt.mqtt3.Mqtt3RxClient;
-import com.hivemq.client.mqtt.mqtt3.message.connect.connack.Mqtt3ConnAck;
-import com.hivemq.client.mqtt.mqtt3.message.publish.Mqtt3Publish;
-import com.hivemq.client.mqtt.mqtt3.message.publish.Mqtt3PublishResult;
+import com.hivemq.client.mqtt.mqtt5.Mqtt5RxClient;
+import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAck;
+import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish;
+import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5PublishResult;
 import io.reactivex.Flowable;
 import io.reactivex.Single;
 import org.apache.commons.lang3.StringUtils;
@@ -43,6 +43,7 @@ import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.IOException;
+import java.net.URL;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
@@ -53,14 +54,18 @@ public class MqttConnector {
     private Configuration config;
 
     private MqttConnector(String propsPath) {
-        if(StringUtils.isEmpty(propsPath)) {
+        if (StringUtils.isEmpty(propsPath)) {
             logger.error("Empty configuration file parameter");
             throw new IllegalArgumentException("Empty configuration file parameter");
         }
         File propsFile = new File(propsPath);
-        if(!(propsFile.exists() && propsFile.isFile())) {
-            logger.error("Invalid configuration file {}", propsFile.getPath());
-            throw new IllegalArgumentException("Invalid configuration file " + propsFile.getPath());
+        if (!(propsFile.exists() && propsFile.isFile())) {
+            URL url = getClass().getClassLoader().getResource(propsPath);
+            if (url == null) {
+                logger.error("Invalid configuration file {}", propsFile.getPath());
+                throw new IllegalArgumentException("Invalid configuration file " + propsFile.getPath());
+            }
+            propsFile = new File(url.getFile());
         }
         ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
         try {
@@ -72,15 +77,15 @@ public class MqttConnector {
 
     private void run() throws PlcException {
         // Create a new MQTT client.
-        final Mqtt3RxClient client = MqttClient.builder()
+        final Mqtt5RxClient client = MqttClient.builder()
             .identifier(UUID.randomUUID().toString())
             .serverHost(config.getMqttConfig().getServerHost())
             .serverPort(config.getMqttConfig().getServerPort())
-            .useMqttVersion3()
+            .useMqttVersion5()
             .buildRx();
 
         // Connect to the MQTT broker.
-        final Single<Mqtt3ConnAck> connAckSingle = client.connect().timeout(10, TimeUnit.SECONDS);
+        final Single<Mqtt5ConnAck> connAckSingle = client.connect().timeout(10, TimeUnit.SECONDS);
 
         // Connect to the PLC.
         try (PlcConnection plcConnection = PlcDriverManager.getDefault().getConnectionManager().getConnection(config.getPlcConfig().getConnection())) {
@@ -99,30 +104,36 @@ public class MqttConnector {
             PlcReadRequest readRequest = builder.build();
 
             // Send a message containing the PLC read response.
-            Flowable<Mqtt3Publish> messagesToPublish = Flowable.generate(emitter -> {
-                PlcReadResponse response = readRequest.execute().get();
-                String jsonPayload = getPayload(response);
-                final Mqtt3Publish publishMessage = Mqtt3Publish.builder()
-                    .topic(config.getMqttConfig().getTopicName())
-                    .qos(MqttQos.AT_LEAST_ONCE)
-                    .payload(jsonPayload.getBytes())
-                    .build();
-                emitter.onNext(publishMessage);
+            Flowable<Mqtt5Publish> messagesToPublish = Flowable.generate(emitter -> {
+                readRequest.execute().whenComplete((response, err) -> {
+                    String jsonPayload = new JsonObject().toString();
+                    if (err == null) {
+                        jsonPayload = getPayload(response);
+                    }
+
+                    final Mqtt5Publish publishMessage = Mqtt5Publish.builder()
+                        .topic(config.getMqttConfig().getTopicName())
+                        .qos(MqttQos.AT_LEAST_ONCE)
+                        .payload(jsonPayload.getBytes())
+                        .build();
+                    emitter.onNext(publishMessage);
+                });
+
             });
 
             // Emit 1 message only every 100 milliseconds.
             messagesToPublish = messagesToPublish.zipWith(Flowable.interval(
                 config.getPollingInterval(), TimeUnit.MILLISECONDS), (publish, aLong) -> publish);
 
-            final Single<Mqtt3ConnAck> connectScenario = connAckSingle
-                .doOnSuccess(connAck -> System.out.println("Connected with return code " + connAck.getReturnCode()))
+            final Single<Mqtt5ConnAck> connectScenario = connAckSingle
+                .doOnSuccess(connAck -> System.out.println("Connected with return code " + connAck.getReasonCode()))
                 .doOnError(throwable -> System.out.println("Connection failed, " + throwable.getMessage()));
 
-            final Flowable<Mqtt3PublishResult> publishScenario = client.publish(messagesToPublish)
+            final Flowable<Mqtt5PublishResult> publishScenario = client.publish(messagesToPublish)
                 .doOnNext(publishResult -> System.out.println(
                     "Publish acknowledged: " + new String(publishResult.getPublish().getPayloadAsBytes())));
 
-            connectScenario.toCompletable().andThen(publishScenario).blockingSubscribe();
+            connectScenario.ignoreElement().andThen(publishScenario).blockingSubscribe();
         } catch (Exception e) {
             throw new PlcException("Error creating connection to " + config.getPlcConfig().getConnection(), e);
         }
@@ -143,10 +154,11 @@ public class MqttConnector {
     }
 
     public static void main(String[] args) throws Exception {
-        if(args.length != 1) {
-            System.out.println("Usage: MqttConnector {path-to-mqtt-connector.yml}");
+        String fileName = "mqtt-connector.yml";
+        if (args.length >= 1) {
+            fileName = args[0];
         }
-        MqttConnector mqttConnector = new MqttConnector(args[0]);
+        MqttConnector mqttConnector = new MqttConnector(fileName);
         mqttConnector.run();
     }
 
diff --git a/plc4j/examples/hello-connectivity-mqtt/src/main/resources/mqtt-connector.yml b/plc4j/examples/hello-connectivity-mqtt/src/main/resources/mqtt-connector.yml
new file mode 100644
index 0000000000..1bccd427a9
--- /dev/null
+++ b/plc4j/examples/hello-connectivity-mqtt/src/main/resources/mqtt-connector.yml
@@ -0,0 +1,35 @@
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+---
+mqtt:
+  topic-name: plc4x/test-topic
+  server-host: test.mosquitto.org
+  server-port: 1883
+plc:
+  connection: simulated://127.0.0.1
+  addresses:
+    - name: intParam
+      address: RANDOM/foo:INT
+      size: 1
+      type: java.lang.Integer
+    - name: intParam2
+      address: RANDOM/bar:INT
+      size: 1
+      type: java.lang.Integer
+polling-interval: 2000
diff --git a/plc4j/examples/hello-influx-data-collection/src/main/java/org/apache/plc4x/java/examples/helloinflux/HelloInflux.java b/plc4j/examples/hello-influx-data-collection/src/main/java/org/apache/plc4x/java/examples/helloinflux/HelloInflux.java
index d89e4d35ea..1cd49b5e1b 100644
--- a/plc4j/examples/hello-influx-data-collection/src/main/java/org/apache/plc4x/java/examples/helloinflux/HelloInflux.java
+++ b/plc4j/examples/hello-influx-data-collection/src/main/java/org/apache/plc4x/java/examples/helloinflux/HelloInflux.java
@@ -61,7 +61,7 @@ public class HelloInflux {
 
     public void run() {
         InfluxDBClient dbConnection = connectToDb();
-        WriteApi writeApi = dbConnection.getWriteApi();
+        WriteApi writeApi = dbConnection.makeWriteApi();
         try {
             PlcConnection plcConnection = connectToPlc();
 
diff --git a/plc4j/examples/hello-world-kotlin/pom.xml b/plc4j/examples/hello-world-kotlin/pom.xml
index 6931049aa0..771e2e82bf 100644
--- a/plc4j/examples/hello-world-kotlin/pom.xml
+++ b/plc4j/examples/hello-world-kotlin/pom.xml
@@ -54,7 +54,7 @@
     <!--dependency>
       <groupId>org.apache.plc4x</groupId>
       <artifactId>plc4j-driver-modbus</artifactId>
-      <version>0.10.0-SNAPSHOT</version>
+      <version>0.11.0-SNAPSHOT</version>
       <scope>runtime</scope>
     </dependency-->
 
diff --git a/plc4j/integrations/apache-kafka/pom.xml b/plc4j/integrations/apache-kafka/pom.xml
index 6f6fcebc12..75fd02e15f 100644
--- a/plc4j/integrations/apache-kafka/pom.xml
+++ b/plc4j/integrations/apache-kafka/pom.xml
@@ -32,7 +32,7 @@
   <description>Integration module for integrating PLC4X into Apache Kafka (Kafka-Connect-Plugin)</description>
 
   <properties>
-    <kafka.version>3.2.0</kafka.version>
+    <kafka.version>3.2.3</kafka.version>
     <kafka.connect.maven.plugin.version>0.12.0</kafka.connect.maven.plugin.version>
   </properties>
 
diff --git a/plc4j/integrations/opcua-server/pom.xml b/plc4j/integrations/opcua-server/pom.xml
index ee1a38db54..17ef31bfce 100644
--- a/plc4j/integrations/opcua-server/pom.xml
+++ b/plc4j/integrations/opcua-server/pom.xml
@@ -168,18 +168,18 @@
       <scope>runtime</scope>
     </dependency>
 
-    <!-- Logging dependancies -->
+    <!-- Logging dependencies -->
     <dependency>
       <groupId>org.bouncycastle</groupId>
-      <artifactId>bcmail-jdk15on</artifactId>
+      <artifactId>bcmail-jdk18on</artifactId>
     </dependency>
     <dependency>
       <groupId>org.bouncycastle</groupId>
-      <artifactId>bcpkix-jdk15on</artifactId>
+      <artifactId>bcpkix-jdk18on</artifactId>
     </dependency>
     <dependency>
       <groupId>org.bouncycastle</groupId>
-      <artifactId>bcprov-jdk15on</artifactId>
+      <artifactId>bcprov-jdk18on</artifactId>
     </dependency>
 
     <dependency>
diff --git a/plc4j/integrations/opcua-server/src/main/java/org/apache/plc4x/java/opcuaserver/backend/Plc4xCommunication.java b/plc4j/integrations/opcua-server/src/main/java/org/apache/plc4x/java/opcuaserver/backend/Plc4xCommunication.java
index e2ff465107..e7c5a81dc3 100644
--- a/plc4j/integrations/opcua-server/src/main/java/org/apache/plc4x/java/opcuaserver/backend/Plc4xCommunication.java
+++ b/plc4j/integrations/opcua-server/src/main/java/org/apache/plc4x/java/opcuaserver/backend/Plc4xCommunication.java
@@ -18,7 +18,9 @@
  */
 package org.apache.plc4x.java.opcuaserver.backend;
 
+import org.apache.plc4x.java.DefaultPlcDriverManager;
 import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.PlcConnectionManager;
 import org.apache.plc4x.java.api.PlcDriverManager;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
@@ -53,9 +55,7 @@ import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.
 
 
 public class Plc4xCommunication extends AbstractLifecycle {
-
-    private PlcDriverManager driverManager;
-    private CachedPlcConnectionManager cachedPlcConnectionManager;
+    private PlcConnectionManager plcConnectionManager;
     private final Logger logger = LoggerFactory.getLogger(getClass());
     private final Integer DEFAULT_TIMEOUT = 1000000;
     private final Integer DEFAULT_RETRY_BACKOFF = 5000;
@@ -71,7 +71,7 @@ public class Plc4xCommunication extends AbstractLifecycle {
 
     @Override
     protected void onStartup() {
-        setDriverManager(PlcDriverManager.getDefault());
+        setConnectionManager(CachedPlcConnectionManager.getBuilder(new DefaultPlcDriverManager()).build());
     }
 
     @Override
@@ -79,17 +79,16 @@ public class Plc4xCommunication extends AbstractLifecycle {
         //Do Nothing
     }
 
-    public PlcDriverManager getDriverManager() {
-        return driverManager;
+    public PlcConnectionManager getConnectionManager() {
+        return plcConnectionManager;
     }
 
-    public void setDriverManager(PlcDriverManager driverManager) {
-        this.driverManager = driverManager;
-        this.cachedPlcConnectionManager = CachedPlcConnectionManager.getBuilder(driverManager.getConnectionManager()).build();
+    public void setConnectionManager(PlcConnectionManager connectionManager) {
+        this.plcConnectionManager = connectionManager;
     }
 
     public PlcTag getTag(String tag, String connectionString) throws PlcConnectionException {
-        return driverManager.getDriverForUrl(connectionString).prepareTag(tag);
+        return plcConnectionManager.getDriverManager().getDriverForUrl(connectionString).prepareTag(tag);
     }
 
     public void addTag(DataItem item) {
@@ -156,7 +155,7 @@ public class Plc4xCommunication extends AbstractLifecycle {
 
             //Try to connect to PLC
             try {
-                connection = cachedPlcConnectionManager.getConnection(connectionString);
+                connection = plcConnectionManager.getConnection(connectionString);
                 logger.debug(connectionString + " Connected");
             } catch (PlcConnectionException e) {
                 logger.error("Failed to connect to device, error raised - " + e);
@@ -248,7 +247,7 @@ public class Plc4xCommunication extends AbstractLifecycle {
     }
 
     public void setValue(String tag, String value, String connectionString) {
-        try (PlcConnection connection = cachedPlcConnectionManager.getConnection(connectionString)) {
+        try (PlcConnection connection = plcConnectionManager.getConnection(connectionString)) {
             if (!connection.getMetadata().canWrite()) {
                 logger.error("This connection doesn't support writing.");
                 return;
diff --git a/plc4j/integrations/opcua-server/src/main/java/org/apache/plc4x/java/opcuaserver/backend/Plc4xNamespace.java b/plc4j/integrations/opcua-server/src/main/java/org/apache/plc4x/java/opcuaserver/backend/Plc4xNamespace.java
index fd4d6e9188..87f2fe6047 100644
--- a/plc4j/integrations/opcua-server/src/main/java/org/apache/plc4x/java/opcuaserver/backend/Plc4xNamespace.java
+++ b/plc4j/integrations/opcua-server/src/main/java/org/apache/plc4x/java/opcuaserver/backend/Plc4xNamespace.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.opcuaserver.configuration.Configuration;
 import org.apache.plc4x.java.opcuaserver.configuration.DeviceConfiguration;
 import org.apache.plc4x.java.opcuaserver.configuration.Tag;
+import org.apache.plc4x.java.utils.cache.CachedPlcConnectionManager;
 import org.eclipse.milo.opcua.sdk.core.AccessLevel;
 import org.eclipse.milo.opcua.sdk.core.Reference;
 import org.eclipse.milo.opcua.sdk.core.ValueRank;
@@ -184,9 +185,9 @@ public class Plc4xNamespace extends ManagedNamespaceWithLifecycle {
         for (DataItem item : dataItems) {
             plc4xServer.addTag(item);
 
-            if (plc4xServer.getDriverManager() == null) {
+            if (plc4xServer.getConnectionManager() == null) {
                 plc4xServer.removeTag(item);
-                plc4xServer.setDriverManager(new DefaultPlcDriverManager());
+                plc4xServer.setConnectionManager(CachedPlcConnectionManager.getBuilder(new DefaultPlcDriverManager()).build());
             }
         }
 
diff --git a/plc4j/pom.xml b/plc4j/pom.xml
index 192b24edba..4af3e39966 100644
--- a/plc4j/pom.xml
+++ b/plc4j/pom.xml
@@ -126,6 +126,9 @@
               <goal>check</goal>
             </goals>
             <configuration>
+              <excludes>
+                <exclude>**/Identifiers</exclude>
+              </excludes>
               <!-- TODO: Turn this on as soon as possible. -->
               <haltOnFailure>false</haltOnFailure>
               <rules>
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/Plc4xNettyWrapper.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/Plc4xNettyWrapper.java
index 33ef316673..e6007b9a50 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/Plc4xNettyWrapper.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/Plc4xNettyWrapper.java
@@ -22,6 +22,9 @@ import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.ChannelPipeline;
 import io.netty.handler.codec.MessageToMessageCodec;
+import io.netty.util.HashedWheelTimer;
+import io.netty.util.Timeout;
+import io.netty.util.Timer;
 import io.vavr.control.Either;
 import org.apache.plc4x.java.api.authentication.PlcAuthentication;
 import org.apache.plc4x.java.spi.configuration.Configuration;
@@ -39,6 +42,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.function.Consumer;
 import java.util.function.Function;
@@ -53,13 +57,12 @@ public class Plc4xNettyWrapper<T> extends MessageToMessageCodec<T, Object> {
     private final PlcAuthentication authentication;
 
     private final Queue<HandlerRegistration> registeredHandlers;
-    private final ChannelPipeline pipeline;
+    private Timer timer = null;
     private final boolean passive;
 
     public Plc4xNettyWrapper(ChannelPipeline pipeline, boolean passive, Plc4xProtocolBase<T> protocol,
                              PlcAuthentication authentication, Class<T> clazz) {
         super(clazz, Object.class);
-        this.pipeline = pipeline;
         this.passive = passive;
         this.registeredHandlers = new ConcurrentLinkedQueue<>();
         this.protocolBase = protocol;
@@ -105,6 +108,7 @@ public class Plc4xNettyWrapper<T> extends MessageToMessageCodec<T, Object> {
             public SendRequestContext<T> sendRequest(T packet) {
                 return new DefaultSendRequestContext<>(handler -> {
                     logger.trace("Adding Response Handler ...");
+                    handler.setTimeoutHandle(createTimeout(handler));
                     registeredHandlers.add(handler);
                 }, packet, this);
             }
@@ -113,13 +117,33 @@ public class Plc4xNettyWrapper<T> extends MessageToMessageCodec<T, Object> {
             public ExpectRequestContext<T> expectRequest(Class<T> clazz, Duration timeout) {
                 return new DefaultExpectRequestContext<>(handler -> {
                     logger.trace("Adding Request Handler ...");
+                    handler.setTimeoutHandle(createTimeout(handler));
                     registeredHandlers.add(handler);
                 }, clazz, timeout, this);
             }
 
         });
     }
-
+    private Timeout createTimeout(HandlerRegistration handler)
+    {
+        Timer createdTimer = this.protocolBase.timer;
+        if(createdTimer==null) {
+            if(this.timer == null) {
+                this.timer = new HashedWheelTimer();
+            }
+            createdTimer = this.timer;
+        }
+        return createdTimer.newTimeout(tt -> {
+            if (tt.isCancelled()) {
+                return;
+            }
+            if( registeredHandlers.remove(handler))
+            {
+                handler.cancel();
+                handler.getOnTimeoutConsumer().accept(new TimeoutException());
+            }
+        }, handler.getTimeout().toMillis(), TimeUnit.MILLISECONDS);
+    }
     @Override
     protected void encode(ChannelHandlerContext channelHandlerContext, Object msg, List<Object> list) throws Exception {
 //        logger.trace("Encoding {}", plcRequestContainer);
@@ -145,21 +169,15 @@ public class Plc4xNettyWrapper<T> extends MessageToMessageCodec<T, Object> {
             HandlerRegistration registration = iter.next();
             // Check if the handler can still be used or should be removed
             // Was cancelled?
+            if(registration.getTimeoutHandle()!=null && !registration.getTimeoutHandle().isCancelled()) {
+                registration.getTimeoutHandle().cancel();
+            }
             if (registration.isCancelled()) {
                 logger.debug("Removing {} as it was cancelled!", registration);
                 iter.remove();
                 continue;
             }
-            // Timeout?
-            final Instant now = Instant.now();
-            if (registration.getTimeoutAt().isBefore(now)) {
-                logger.debug("Removing {} as its timed out (timeout of {} was set till {} and now is {})",
-                    registration, registration.getTimeout(), registration.getTimeoutAt(), now);
-                // pass timeout back to caller so it can do ie. transaction compensation
-                registration.getOnTimeoutConsumer().accept(new TimeoutException());
-                iter.remove();
-                continue;
-            }
+
             logger.trace("Checking handler {} for Object of type {}", registration, t.getClass().getSimpleName());
             if (registration.getExpectClazz().isInstance(t)) {
                 logger.trace("Handler {} has right expected type {}, checking condition", registration, registration.getExpectClazz().getSimpleName());
@@ -207,6 +225,10 @@ public class Plc4xNettyWrapper<T> extends MessageToMessageCodec<T, Object> {
             this.protocolBase.onDiscover(new DefaultConversationContext<>(ctx, authentication, passive));
         } else if (evt instanceof CloseConnectionEvent) {
             this.protocolBase.close(new DefaultConversationContext<>(ctx, authentication, passive));
+            if(this.timer!=null) {
+                this.timer.stop();
+                this.timer = null;
+            }
         } else {
             super.userEventTriggered(ctx, evt);
         }
@@ -268,6 +290,7 @@ public class Plc4xNettyWrapper<T> extends MessageToMessageCodec<T, Object> {
         public SendRequestContext<T1> sendRequest(T1 packet) {
             return new DefaultSendRequestContext<>(handler -> {
                 logger.trace("Adding Response Handler ...");
+                handler.setTimeoutHandle(createTimeout(handler));
                 registeredHandlers.add(handler);
             }, packet, this);
         }
@@ -276,6 +299,7 @@ public class Plc4xNettyWrapper<T> extends MessageToMessageCodec<T, Object> {
         public ExpectRequestContext<T1> expectRequest(Class<T1> clazz, Duration timeout) {
             return new DefaultExpectRequestContext<>(handler -> {
                 logger.trace("Adding Request Handler ...");
+                handler.setTimeoutHandle(createTimeout(handler));
                 registeredHandlers.add(handler);
             }, clazz, timeout, this);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/Plc4xProtocolBase.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/Plc4xProtocolBase.java
index dbbabb51e8..cf7bf45811 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/Plc4xProtocolBase.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/Plc4xProtocolBase.java
@@ -18,6 +18,7 @@
  */
 package org.apache.plc4x.java.spi;
 
+import io.netty.util.Timer;
 import org.apache.commons.lang3.NotImplementedException;
 import org.apache.plc4x.java.api.messages.*;
 import org.apache.plc4x.java.spi.context.DriverContext;
@@ -28,6 +29,8 @@ public abstract class Plc4xProtocolBase<T> {
 
     protected ConversationContext<T> context;
 
+    protected Timer timer;
+
     protected DriverContext driverContext;
 
     public void setDriverContext(DriverContext driverContext) {
@@ -42,6 +45,10 @@ public abstract class Plc4xProtocolBase<T> {
         this.context = context;
     }
 
+    public void setTimer(Timer timer) {
+        this.timer = timer;
+    }
+
     public void onConnect(ConversationContext<T> context) {
         // Intentionally do nothing here
     }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/ChannelFactory.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/ChannelFactory.java
index cd034bda35..69801c3908 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/ChannelFactory.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/ChannelFactory.java
@@ -21,10 +21,11 @@ package org.apache.plc4x.java.spi.connection;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelPipeline;
+import io.netty.util.Timer;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 
 public interface ChannelFactory {
-
+    Timer getTimer();
     Channel createChannel(ChannelHandler channelHandler) throws PlcConnectionException;
 
     boolean isPassive();
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java
index 7e30104318..e2221492d0 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java
@@ -28,6 +28,7 @@ import org.apache.plc4x.java.api.exceptions.PlcIoException;
 import org.apache.plc4x.java.api.listener.ConnectionStateListener;
 import org.apache.plc4x.java.api.listener.EventListener;
 import org.apache.plc4x.java.api.value.PlcValueHandler;
+import org.apache.plc4x.java.spi.Plc4xProtocolBase;
 import org.apache.plc4x.java.spi.configuration.Configuration;
 import org.apache.plc4x.java.spi.configuration.ConfigurationFactory;
 import org.apache.plc4x.java.spi.events.*;
@@ -123,6 +124,7 @@ public class DefaultNettyPlcConnection extends AbstractPlcConnection implements
             channel = channelFactory.createChannel(getChannelHandler(sessionSetupCompleteFuture, sessionDisconnectCompleteFuture, sessionDiscoveredCompleteFuture));
             channel.closeFuture().addListener(future -> {
                 if (!sessionSetupCompleteFuture.isDone()) {
+                    channel.pipeline().fireUserEventTriggered(new CloseConnectionEvent());
                     sessionSetupCompleteFuture.completeExceptionally(
                         new PlcIoException("Connection terminated by remote"));
                 }
@@ -152,6 +154,11 @@ public class DefaultNettyPlcConnection extends AbstractPlcConnection implements
      */
     @Override
     public void close() throws PlcConnectionException {
+        if(channel == null)
+        {
+            connected = false;
+            return;
+        }
         logger.debug("Closing connection to PLC, await for disconnect = {}", awaitSessionDisconnectComplete);
         channel.pipeline().fireUserEventTriggered(new DisconnectEvent());
         try {
@@ -212,22 +219,45 @@ public class DefaultNettyPlcConnection extends AbstractPlcConnection implements
                         } else if (evt instanceof DisconnectedEvent) {
                             sessionDisconnectCompleteFuture.complete(null);
                             eventListeners.forEach(ConnectionStateListener::disconnected);
+                            super.userEventTriggered(ctx, evt);
                         } else if (evt instanceof DiscoveredEvent) {
                             sessionDiscoverCompleteFuture.complete(((DiscoveredEvent) evt).getConfiguration());
+                        } else if (evt instanceof ConnectEvent) {
+                            if (!sessionSetupCompleteFuture.isCompletedExceptionally()) {
+                                if (awaitSessionSetupComplete) {
+                                    setProtocol(stackConfigurer.configurePipeline(configuration, pipeline,  getAuthentication(),
+                                        channelFactory.isPassive()));
+                                }
+                                super.userEventTriggered(ctx, evt);
+                            }
                         } else {
                             super.userEventTriggered(ctx, evt);
                         }
                     }
                 });
+                pipeline.addLast(new ChannelInboundHandlerAdapter() {
+                                     @Override
+                                     public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws PlcConnectionException {
+                                         logger.error("unknown error, close the connection", cause);
+                                         close();
+                                     }
+                                 }
+                );
                 // Initialize via Transport Layer
                 channelFactory.initializePipeline(pipeline);
                 // Initialize Protocol Layer
-                setProtocol(stackConfigurer.configurePipeline(configuration, pipeline, getAuthentication(),
-                    channelFactory.isPassive()));
+                if (!awaitSessionSetupComplete) {
+                    setProtocol(stackConfigurer.configurePipeline(configuration, pipeline, getAuthentication(),
+                        channelFactory.isPassive()));
+                }
             }
         };
     }
-
+    @Override
+    public void setProtocol(Plc4xProtocolBase<?> protocol) {
+        super.setProtocol(protocol);
+        protocol.setTimer(channelFactory.getTimer());
+    }
     protected void sendChannelCreatedEvent() {
         logger.trace("Channel was created, firing ChannelCreated Event");
         // Send an event to the pipeline telling the Protocol filters what's going on.
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/NettyChannelFactory.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/NettyChannelFactory.java
index 8c9d6f9128..8220ae60d1 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/NettyChannelFactory.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/NettyChannelFactory.java
@@ -24,6 +24,8 @@ import io.netty.channel.ChannelFuture;
 import io.netty.channel.ChannelHandler;
 import io.netty.channel.EventLoopGroup;
 import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.util.HashedWheelTimer;
+import io.netty.util.Timer;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,6 +44,14 @@ public abstract class NettyChannelFactory implements ChannelFactory {
 
     private static final Logger logger = LoggerFactory.getLogger(NettyChannelFactory.class);
 
+    protected static HashedWheelTimer timer = new HashedWheelTimer();
+    @Override
+    public Timer getTimer(){
+        if(timer==null){
+            timer = new HashedWheelTimer();
+        }
+        return timer;
+    }
     private final Map<Channel, EventLoopGroup> eventLoops = new ConcurrentHashMap<>();
 
     /**
@@ -151,6 +161,8 @@ public abstract class NettyChannelFactory implements ChannelFactory {
             EventLoopGroup eventExecutors = eventLoops.get(channel);
             eventLoops.remove(channel);
             eventExecutors.shutdownGracefully().awaitUninterruptibly();
+            timer.stop();
+            timer = null;
             logger.info("Worker Group was closed successfully!");
         } else {
             logger.warn("Trying to remove EventLoop for Channel {} but have none stored", channel);
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferByteBased.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferByteBased.java
index 9f918cdc81..2c28e8608b 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferByteBased.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferByteBased.java
@@ -45,10 +45,12 @@ public class WriteBufferByteBased implements WriteBuffer, BufferCommons {
         this.byteOrder = byteOrder;
     }
 
+    @Override
     public ByteOrder getByteOrder() {
         return byteOrder;
     }
 
+    @Override
     public void setByteOrder(ByteOrder byteOrder) {
         this.byteOrder = byteOrder;
     }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/internal/HandlerRegistration.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/internal/HandlerRegistration.java
index 7dc9216d8b..bef8bc6f07 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/internal/HandlerRegistration.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/internal/HandlerRegistration.java
@@ -18,13 +18,12 @@
  */
 package org.apache.plc4x.java.spi.internal;
 
+import io.netty.util.Timeout;
 import io.vavr.control.Either;
 
 import java.time.Duration;
-import java.time.Instant;
 import java.util.Deque;
 import java.util.concurrent.TimeoutException;
-import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.function.Function;
@@ -46,7 +45,7 @@ public class HandlerRegistration {
 
     private final BiConsumer<?, ? extends Throwable> errorConsumer;
     private final Duration timeout;
-    private final Instant timeoutAt;
+    private Timeout timeoutHandle;
 
     private volatile boolean cancelled = false;
     private volatile boolean handled = false;
@@ -58,7 +57,6 @@ public class HandlerRegistration {
         this.onTimeoutConsumer = onTimeoutConsumer;
         this.errorConsumer = errorConsumer;
         this.timeout = timeout;
-        this.timeoutAt = Instant.now().plus(timeout);
     }
 
     public Deque<Either<Function<?, ?>, Predicate<?>>> getCommands() {
@@ -85,8 +83,12 @@ public class HandlerRegistration {
         return timeout;
     }
 
-    public Instant getTimeoutAt() {
-        return timeoutAt;
+    public void setTimeoutHandle(Timeout timeoutHandle) {
+        this.timeoutHandle = timeoutHandle;
+    }
+
+    public Timeout getTimeoutHandle() {
+        return timeoutHandle;
     }
 
     public void cancel() {
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
index 2a5b2953e4..91f2605b67 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
@@ -27,6 +27,7 @@ import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.model.PlcTag;
+import org.apache.plc4x.java.api.types.PlcValueType;
 import org.apache.plc4x.java.spi.codegen.WithOption;
 import org.apache.plc4x.java.spi.generation.SerializationException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
@@ -93,6 +94,7 @@ public class DefaultPlcWriteRequest implements PlcWriteRequest, Serializable {
         return tags.values().stream().map(TagValueItem::getTag).collect(Collectors.toCollection(LinkedList::new));
     }
 
+    @Override
     @JsonIgnore
     public PlcValue getPlcValue(String name) {
         return tags.get(name).getValue();
@@ -194,6 +196,9 @@ public class DefaultPlcWriteRequest implements PlcWriteRequest, Serializable {
                 PlcTag tag = tagValues.getLeft().get();
                 Object[] value = tagValues.getRight();
                 PlcValue plcValue = valueHandler.newPlcValue(tag, value);
+                if(tag.getPlcValueType()== PlcValueType.NULL){
+                    tag.setPlcValueType(plcValue.getPlcValueType());
+                }
                 parsedTags.put(name, new TagValueItem(tag, plcValue));
             });
             return new DefaultPlcWriteRequest(writer, parsedTags);
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/model/DefaultPlcSubscriptionTag.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/model/DefaultPlcSubscriptionTag.java
index 8d4f3d41f5..9fb29c0246 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/model/DefaultPlcSubscriptionTag.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/model/DefaultPlcSubscriptionTag.java
@@ -59,7 +59,7 @@ public class DefaultPlcSubscriptionTag implements PlcSubscriptionTag {
     public List<ArrayInfo> getArrayInfo() {
         return plcTag.getArrayInfo();
     }
-
+    @Override
     public PlcSubscriptionType getPlcSubscriptionType() {
         return plcSubscriptionType;
     }
@@ -67,7 +67,7 @@ public class DefaultPlcSubscriptionTag implements PlcSubscriptionTag {
     public PlcTag getTag() {
         return plcTag;
     }
-
+    @Override
     public Optional<Duration> getDuration() {
         return Optional.ofNullable(duration);
     }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/transaction/RequestTransactionManager.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/transaction/RequestTransactionManager.java
index 3592ff2e55..4fba021075 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/transaction/RequestTransactionManager.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/transaction/RequestTransactionManager.java
@@ -18,21 +18,16 @@
  */
 package org.apache.plc4x.java.spi.transaction;
 
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.slf4j.MDC;
 
 import java.util.Objects;
 import java.util.Queue;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
+import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Consumer;
-import org.apache.commons.lang3.concurrent.BasicThreadFactory;
 
 /**
  * This is a limited Queue of Requests, a Protocol can use.
@@ -49,25 +44,23 @@ public class RequestTransactionManager {
     private static final Logger logger = LoggerFactory.getLogger(RequestTransactionManager.class);
 
     /** Executor that performs all operations */
-    //static final ExecutorService executor = Executors.newScheduledThreadPool(4);
-
-    final ExecutorService executor = Executors.newFixedThreadPool(4, new BasicThreadFactory.Builder()
-                                                    .namingPattern("plc4x-tm-thread-%d")
-                                                    .daemon(true)
-                                                    .priority(Thread.MAX_PRIORITY)
-                                                    .build());    
-    
+    private final ExecutorService executor;
     private final Set<RequestTransaction> runningRequests;
     /** How many Transactions are allowed to run at the same time? */
     private int numberOfConcurrentRequests;
     /** Assigns each request a Unique Transaction Id, especially important for failure handling */
-    private AtomicInteger transactionId = new AtomicInteger(0);
+    private final AtomicInteger transactionId = new AtomicInteger(0);
     /** Important, this is a FIFO Queue for Fairness! */
-    private Queue<RequestTransaction> workLog = new ConcurrentLinkedQueue<>();
+    private final Queue<RequestTransaction> workLog = new ConcurrentLinkedQueue<>();
 
     public RequestTransactionManager(int numberOfConcurrentRequests) {
         this.numberOfConcurrentRequests = numberOfConcurrentRequests;
         // Immutable Map
+        executor = new ThreadPoolExecutor(0, numberOfConcurrentRequests,
+            0L, TimeUnit.MILLISECONDS,
+            new LinkedBlockingQueue<>(1024),
+            new BasicThreadFactory.Builder().namingPattern("RequestTransactionManager-pool-%d").daemon(true).build(),
+            new ThreadPoolExecutor.AbortPolicy());;
         runningRequests = ConcurrentHashMap.newKeySet();
     }
 
@@ -91,13 +84,13 @@ public class RequestTransactionManager {
         // As we might have increased the number, try to send some more requests.
         processWorklog();
     }
-    
+
     /*
     * It allows the sequential shutdown of the associated driver.
     */
     public void shutdown(){
         executor.shutdown();
-    }    
+    }
 
     public void submit(Consumer<RequestTransaction> context) {
         RequestTransaction transaction = startRequest();
@@ -114,7 +107,7 @@ public class RequestTransactionManager {
         processWorklog();
     }
 
-    private void processWorklog() {
+    private synchronized void processWorklog() {
         while (runningRequests.size() < getNumberOfConcurrentRequests() && !workLog.isEmpty()) {
             RequestTransaction next = workLog.poll();
             if (next != null) {
@@ -219,11 +212,11 @@ public class RequestTransactionManager {
             this.delegate = delegate;
         }
 
-        //TODO: Check MDC used. Created exception in Hop application        
+        //TODO: Check MDC used. Created exception in Hop application
         @Override
         public void run() {
             //try (final MDC.MDCCloseable closeable = MDC.putCloseable("plc4x.transactionId", Integer.toString(transactionId))) {
-            try{    
+            try{
                 logger.trace("Start execution of transaction {}", transactionId);
                 delegate.run();
                 logger.trace("Completed execution of transaction {}", transactionId);
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBOOL.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBOOL.java
index ed8e9b4b7f..6ebac62822 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBOOL.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBOOL.java
@@ -56,6 +56,8 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
             return new PlcBOOL((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcBOOL((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcBOOL(((Number) value).intValue());
         } else {
             return new PlcBOOL((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBYTE.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBYTE.java
index c950f4cc76..0f5b0ddff0 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBYTE.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBYTE.java
@@ -57,6 +57,8 @@ public class PlcBYTE extends PlcIECValue<Short> {
             return new PlcBYTE((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcBYTE((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcBYTE(((Number) value).intValue());
         } else {
             return new PlcBYTE((String) value);
         }
@@ -69,9 +71,9 @@ public class PlcBYTE extends PlcIECValue<Short> {
     }
 
     public PlcBYTE(Byte value) {
-        if ((value < minValue) || (value > maxValue)) {
-            throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
-        }
+        //if ((value < minValue) || (value > maxValue)) {
+        //    throw new PlcInvalidFieldException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
+        //}
         this.value = value.shortValue();
         this.isNullable = false;
     }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcCHAR.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcCHAR.java
index 54da8290b8..317633c8f5 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcCHAR.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcCHAR.java
@@ -58,6 +58,8 @@ public class PlcCHAR extends PlcIECValue<Short> {
             return new PlcCHAR((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcCHAR((BigDecimal) value);
+        } else if (value instanceof Character) {
+            return new PlcCHAR((Character) value);
         } else {
             return new PlcCHAR((String) value);
         }
@@ -72,92 +74,128 @@ public class PlcCHAR extends PlcIECValue<Short> {
     public PlcCHAR(Character value) {
         super();
         Integer val = (int) value;
+        this.value = val.shortValue();
+        this.isNullable = false;
+        /*
         if ((val >= minValue) && (val <= maxValue)) {
             this.value = val.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
         }
+        */
     }
 
     public PlcCHAR(Byte value) {
         super();
+        this.value = value.shortValue();
+        this.isNullable = false;
+        /*
         if ((value >= minValue) && (value <= maxValue)) {
             this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
         }
+        */
     }
 
     public PlcCHAR(Short value) {
         super();
+        this.value = value;
+        this.isNullable = false;
+        /*
         if ((value >= minValue) && (value <= maxValue)) {
             this.value = value;
             this.isNullable = false;
         } else {
             throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
         }
+        */
     }
 
     public PlcCHAR(Integer value) {
         super();
+        this.value = value.shortValue();
+        this.isNullable = false;
+        /*
         if ((value >= minValue) && (value <= maxValue)) {
             this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
         }
+        */
     }
 
     public PlcCHAR(Long value) {
         super();
+        this.value = value.shortValue();
+        this.isNullable = false;
+        /*
         if ((value >= minValue) && (value <= maxValue)) {
             this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
         }
+        */
     }
 
     public PlcCHAR(Float value) {
         super();
+        this.value = value.shortValue();
+        this.isNullable = false;
+        /*
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
             this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
         }
+        */
     }
 
     public PlcCHAR(Double value) {
         super();
+        this.value = value.shortValue();
+        this.isNullable = false;
+        /*
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
             this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
         }
+        */
     }
 
     public PlcCHAR(BigInteger value) {
         super();
+        this.value = value.shortValue();
+        this.isNullable = true;
+        /*
         if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
             this.value = value.shortValue();
             this.isNullable = true;
         } else {
             throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
         }
+        */
     }
 
     public PlcCHAR(BigDecimal value) {
         super();
+        this.value = value.shortValue();
+        this.isNullable = true;
+        /*
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
             this.value = value.shortValue();
             this.isNullable = true;
         } else {
             throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
         }
+        */
     }
 
     public PlcCHAR(String value) {
@@ -169,12 +207,15 @@ public class PlcCHAR extends PlcIECValue<Short> {
                 s = " ";
             }
             short val = (short) s.charAt(0);
+            this.isNullable = false;
+            /*
             if ((val >= minValue) && (val <= maxValue)) {
                 this.value = val;
                 this.isNullable = false;
             } else {
                 throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
             }
+            */
         } catch (Exception e) {
             throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
         }
@@ -183,12 +224,16 @@ public class PlcCHAR extends PlcIECValue<Short> {
     @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
     public PlcCHAR(@JsonProperty("value") short value) {
         super();
+        this.value = value;
+        this.isNullable = false;
+        /*
         if ((value >= minValue) && (value <= maxValue)) {
             this.value = value;
             this.isNullable = false;
         } else {
             throw new PlcInvalidTagException(String.format(VALUE_OUT_OF_RANGE, value, minValue, maxValue, this.getClass().getSimpleName()));
         }
+        */
     }
 
     @Override
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java
index 03863dd3b0..3498ee73fe 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java
@@ -30,6 +30,8 @@ import org.apache.plc4x.java.spi.generation.WriteBuffer;
 
 import java.nio.charset.StandardCharsets;
 import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcDATE_AND_TIME extends PlcSimpleValue<LocalDateTime> {
@@ -41,6 +43,37 @@ public class PlcDATE_AND_TIME extends PlcSimpleValue<LocalDateTime> {
             return new PlcDATE_AND_TIME(LocalDateTime.ofInstant(
                 Instant.ofEpochSecond((long) value), ZoneId.systemDefault()));
         }
+        if (value instanceof Instant) {
+            return new PlcDATE_AND_TIME(((Instant) value).toEpochMilli());
+        }
+        if (value instanceof LocalDate) {
+            return new PlcDATE_AND_TIME(((LocalDate) value).atStartOfDay(ZoneId.of("UTC")).toLocalDateTime());
+        } else if (value instanceof String) {
+            String strValue = (String) value;
+            LocalDateTime date;
+            try {
+                date = LocalDateTime.parse(strValue);
+            } catch (DateTimeParseException e) {
+                try {
+                    date = LocalDateTime.parse(strValue, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+                } catch (DateTimeParseException e1) {
+                    try {
+                        date = LocalDateTime.parse(strValue, DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss"));
+                    } catch (DateTimeParseException e2) {
+                        try {
+                            date = LocalDateTime.parse(strValue, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+                        } catch (DateTimeParseException e3) {
+                            try {
+                                date = LocalDateTime.parse(strValue, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                            } catch (DateTimeParseException e4) {
+                                date = LocalDateTime.parse(strValue, DateTimeFormatter.ofPattern("yyyyMMdd"));
+                            }
+                        }
+                    }
+                }
+            }
+            return new PlcDATE_AND_TIME(date);
+        }
         throw new PlcRuntimeException("Invalid value type");
     }
 
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDINT.java
index 5bedf773f1..8f689d9731 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDINT.java
@@ -56,6 +56,8 @@ public class PlcDINT extends PlcIECValue<Integer> {
             return new PlcDINT((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcDINT((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcDINT(((Number) value).intValue());
         } else {
             return new PlcDINT((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDWORD.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDWORD.java
index b3649f686c..94b973d37a 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDWORD.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDWORD.java
@@ -57,6 +57,8 @@ public class PlcDWORD extends PlcIECValue<Long> {
             return new PlcDWORD((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcDWORD((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcDWORD(((Number) value).longValue());
         } else {
             return new PlcDWORD((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcINT.java
index eafd49ba48..1286f40c0d 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcINT.java
@@ -56,6 +56,8 @@ public class PlcINT extends PlcIECValue<Short> {
             return new PlcINT((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcINT((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcINT(((Number) value).intValue());
         } else {
             return new PlcINT((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLINT.java
index dcdea8c6de..1f787b7fe8 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLINT.java
@@ -56,6 +56,8 @@ public class PlcLINT extends PlcIECValue<Long> {
             return new PlcLINT((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcLINT((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcLINT(((Number) value).intValue());
         } else {
             return new PlcLINT((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLREAL.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLREAL.java
index 23d6cc8f75..2938b02939 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLREAL.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLREAL.java
@@ -56,6 +56,8 @@ public class PlcLREAL extends PlcIECValue<Double> {
             return new PlcLREAL((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcLREAL((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcLREAL(((Number) value).doubleValue());
         } else {
             return new PlcLREAL((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java
index 60502992ce..2cecf53ac0 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java
@@ -28,9 +28,12 @@ import org.apache.plc4x.java.spi.codegen.WithOption;
 import org.apache.plc4x.java.spi.generation.SerializationException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 
+import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.nio.charset.StandardCharsets;
 import java.time.Duration;
+import java.time.Period;
+import java.time.format.DateTimeParseException;
 import java.time.temporal.ChronoUnit;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
@@ -46,6 +49,19 @@ public class PlcLTIME extends PlcSimpleValue<Duration> {
         } else if(value instanceof BigInteger) {
             // TODO: Not 100% correct, we're loosing precision here
             return new PlcLTIME(Duration.of(((BigInteger) value).longValue(), ChronoUnit.NANOS));
+        } else if (value instanceof Number) {
+            return new PlcLTIME(((Number) value).longValue());
+        } else if (value instanceof String) {
+            try {
+                return new PlcLTIME(Duration.parse((String) value));
+            } catch (DateTimeParseException e) {
+                try {
+                    return new PlcLTIME(Period.parse((String) value).get(ChronoUnit.NANOS));
+                }catch (DateTimeParseException e1)
+                {
+                    return new PlcLTIME(new BigDecimal((String) value).longValue());
+                }
+            }
         }
         throw new PlcRuntimeException("Invalid value type");
     }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLWORD.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLWORD.java
index e4959ec3c9..c5c941853a 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLWORD.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLWORD.java
@@ -55,6 +55,8 @@ public class PlcLWORD extends PlcIECValue<BigInteger> {
             return new PlcLWORD((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcLWORD((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcLWORD(((Number) value).longValue());
         } else {
             return new PlcLWORD((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSINT.java
index 96c067d467..99842a9ae5 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSINT.java
@@ -56,6 +56,8 @@ public class PlcSINT extends PlcIECValue<Byte> {
             return new PlcSINT((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcSINT((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcSINT(((Number) value).longValue());
         } else {
             return new PlcSINT((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java
index 23fb48004e..90482c3b9a 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java
@@ -28,8 +28,11 @@ import org.apache.plc4x.java.spi.codegen.WithOption;
 import org.apache.plc4x.java.spi.generation.SerializationException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 
+import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
 import java.time.Duration;
+import java.time.Period;
+import java.time.format.DateTimeParseException;
 import java.time.temporal.ChronoUnit;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
@@ -42,6 +45,19 @@ public class PlcTIME extends PlcSimpleValue<Duration> {
             return new PlcTIME(Duration.of((long) value, ChronoUnit.MILLIS));
         } else if (value instanceof Long) {
             return new PlcTIME(Duration.of((long) value, ChronoUnit.MILLIS));
+        } else if (value instanceof Number) {
+            return new PlcTIME(((Number) value).longValue());
+        } else if (value instanceof String) {
+            try {
+                return new PlcTIME(Duration.parse((String) value));
+            } catch (DateTimeParseException e) {
+                try {
+                    return new PlcTIME(Period.parse((String) value).get(ChronoUnit.MILLIS));
+                }catch (DateTimeParseException e1)
+                {
+                    return new PlcTIME(new BigDecimal((String) value).longValue());
+                }
+            }
         }
         throw new PlcRuntimeException("Invalid value type");
     }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
index 17aae62d54..551d511b66 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
@@ -29,7 +29,9 @@ import org.apache.plc4x.java.spi.generation.SerializationException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 
 import java.nio.charset.StandardCharsets;
+import java.time.Instant;
 import java.time.LocalTime;
+import java.time.ZoneId;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcTIME_OF_DAY extends PlcSimpleValue<LocalTime> {
@@ -39,6 +41,8 @@ public class PlcTIME_OF_DAY extends PlcSimpleValue<LocalTime> {
             return new PlcTIME_OF_DAY((LocalTime) value);
         } else if(value instanceof Long) {
             return new PlcTIME_OF_DAY((Long) value);
+        } else if (value instanceof Number) {
+            return new PlcTIME_OF_DAY(((Number) value).longValue());
         }
         throw new PlcRuntimeException("Invalid value type");
     }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUDINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUDINT.java
index e93a1cc45f..2eb2ec45da 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUDINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUDINT.java
@@ -56,6 +56,8 @@ public class PlcUDINT extends PlcIECValue<Long> {
             return new PlcUDINT((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcUDINT((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcUDINT(((Number) value).longValue());
         } else {
             return new PlcUDINT((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUINT.java
index e1561e004f..6e43ca5732 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUINT.java
@@ -56,6 +56,8 @@ public class PlcUINT extends PlcIECValue<Integer> {
             return new PlcUINT((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcUINT((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcUINT(((Number) value).longValue());
         } else {
             return new PlcUINT((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcULINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcULINT.java
index 8a951fb774..f24daba875 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcULINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcULINT.java
@@ -54,6 +54,8 @@ public class PlcULINT extends PlcIECValue<BigInteger> {
             return new PlcULINT((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcULINT((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcULINT(((Number) value).longValue());
         } else {
             return new PlcULINT((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUSINT.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUSINT.java
index 6a5a076e2a..ab4cf79e9d 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUSINT.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcUSINT.java
@@ -56,6 +56,8 @@ public class PlcUSINT extends PlcIECValue<Short> {
             return new PlcUSINT((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcUSINT((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcUSINT(((Number) value).intValue());
         } else {
             return new PlcUSINT((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcValueHandler.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcValueHandler.java
index d1691f051b..1d22cc4352 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcValueHandler.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcValueHandler.java
@@ -18,17 +18,23 @@
  */
 package org.apache.plc4x.java.spi.values;
 
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidTagException;
 import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
 import org.apache.plc4x.java.api.exceptions.PlcUnsupportedDataTypeException;
 import org.apache.plc4x.java.api.model.PlcTag;
 import org.apache.plc4x.java.api.value.PlcValue;
 
+import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.time.Duration;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 public class PlcValueHandler implements org.apache.plc4x.java.api.value.PlcValueHandler {
 
@@ -58,6 +64,15 @@ public class PlcValueHandler implements org.apache.plc4x.java.api.value.PlcValue
 
     public static PlcValue of(Object[] values) {
         if (values.length != 1) {
+            Object vo = ((Object[]) values)[0];
+            if (vo instanceof PlcCHAR) {
+                String v = Arrays.stream(values).map(Objects::toString).collect(Collectors.joining());
+                return PlcSTRING.of(v);
+            }
+            if (vo instanceof PlcWCHAR) {
+                String v = Arrays.stream(values).map(Objects::toString).collect(Collectors.joining());
+                return PlcSTRING.of(v);
+            }
             PlcList list = new PlcList();
             for (Object value : values) {
                 list.add(of(new Object[]{value}));
@@ -83,6 +98,16 @@ public class PlcValueHandler implements org.apache.plc4x.java.api.value.PlcValue
         if (value instanceof Long) {
             return PlcLINT.of(value);
         }
+        if (value instanceof BigInteger) {
+            try {
+                return new PlcLINT((BigInteger) value);
+            }catch (PlcInvalidTagException e) {
+                return new PlcULINT((BigInteger) value);
+            }
+        }
+        if (value instanceof BigDecimal) {
+            return new PlcLINT((BigDecimal) value);
+        }
         if (value instanceof Float) {
             return PlcREAL.of(value);
         }
@@ -116,13 +141,12 @@ public class PlcValueHandler implements org.apache.plc4x.java.api.value.PlcValue
         return of(tag, new Object[]{value});
     }
 
-
     public static PlcValue of(PlcTag tag, Object[] values) {
         if (values.length == 1) {
             Object value = values[0];
-            if(tag.getPlcValueType() == null) {
+            if (tag.getPlcValueType() == null) {
                 // TODO: This is a hacky shortcut ..
-                if(value instanceof PlcValue) {
+                if (value instanceof PlcValue) {
                     return (PlcValue) value;
                 }
                 return new PlcNull();
@@ -131,16 +155,14 @@ public class PlcValueHandler implements org.apache.plc4x.java.api.value.PlcValue
                 case BOOL:
                     return PlcBOOL.of(value);
                 case BYTE:
-                    if(value instanceof Short) {
-                        return new PlcBYTE((short) value);
-                    } else if(value instanceof Integer) {
-                        return new PlcBYTE(((Integer) value).shortValue());
-                    } else if(value instanceof Long) {
-                        return new PlcBYTE(((Long) value).shortValue());
-                    } else if(value instanceof BigInteger) {
-                        return new PlcBYTE(((BigInteger) value).shortValue());
+                    if (tag.getNumberOfElements() > 1) {
+                        if (value instanceof byte[]) {
+                            return of(tag, ArrayUtils.toObject((byte[]) value));
+                        } else if (value instanceof String && ((String) value).contains(",")) {
+                            return of(tag, stringToByteArray((String) value));
+                        }
                     }
-                    throw new PlcRuntimeException("BYTE requires short");
+                    return PlcBYTE.of(value);
                 case SINT:
                     return PlcSINT.of(value);
                 case USINT:
@@ -150,13 +172,13 @@ public class PlcValueHandler implements org.apache.plc4x.java.api.value.PlcValue
                 case UINT:
                     return PlcUINT.of(value);
                 case WORD:
-                    if(value instanceof Short) {
+                    if (value instanceof Short) {
                         return new PlcWORD((int) value);
-                    } else if(value instanceof Integer) {
+                    } else if (value instanceof Integer) {
                         return new PlcWORD((int) value);
-                    } else if(value instanceof Long) {
+                    } else if (value instanceof Long) {
                         return new PlcWORD(((Long) value).intValue());
-                    } else if(value instanceof BigInteger) {
+                    } else if (value instanceof BigInteger) {
                         return new PlcWORD(((BigInteger) value).intValue());
                     }
                     throw new PlcRuntimeException("WORD requires int");
@@ -165,13 +187,13 @@ public class PlcValueHandler implements org.apache.plc4x.java.api.value.PlcValue
                 case UDINT:
                     return PlcUDINT.of(value);
                 case DWORD:
-                    if(value instanceof Short) {
+                    if (value instanceof Short) {
                         return new PlcDWORD((long) value);
-                    } else if(value instanceof Integer) {
+                    } else if (value instanceof Integer) {
                         return new PlcDWORD((long) value);
-                    } else if(value instanceof Long) {
+                    } else if (value instanceof Long) {
                         return new PlcDWORD((long) value);
-                    } else if(value instanceof BigInteger) {
+                    } else if (value instanceof BigInteger) {
                         return new PlcDWORD(((BigInteger) value).longValue());
                     }
                     throw new PlcRuntimeException("DWORD requires long");
@@ -180,13 +202,13 @@ public class PlcValueHandler implements org.apache.plc4x.java.api.value.PlcValue
                 case ULINT:
                     return PlcULINT.of(value);
                 case LWORD:
-                    if(value instanceof Short) {
+                    if (value instanceof Short) {
                         return new PlcLWORD(BigInteger.valueOf((long) value));
-                    } else if(value instanceof Integer) {
+                    } else if (value instanceof Integer) {
                         return new PlcLWORD(BigInteger.valueOf((long) value));
-                    } else if(value instanceof Long) {
+                    } else if (value instanceof Long) {
                         return new PlcLWORD(BigInteger.valueOf((long) value));
-                    } else if(value instanceof BigInteger) {
+                    } else if (value instanceof BigInteger) {
                         return new PlcLWORD((BigInteger) value);
                     }
                     throw new PlcRuntimeException("LWORD requires BigInteger");
@@ -225,4 +247,15 @@ public class PlcValueHandler implements org.apache.plc4x.java.api.value.PlcValue
     public static PlcValue customDataType(Object[] values) {
         return of(values);
     }
+
+    private static byte[] stringToByteArray(String stringBytes) {
+        String[] byteValues = stringBytes.substring(1, stringBytes.length() - 1).split(",");
+        byte[] bytes = new byte[byteValues.length];
+
+        for (int i = 0, len = bytes.length; i < len; i++) {
+            int intvalue = Integer.parseInt(byteValues[i].trim());
+            bytes[i] = (byte) (intvalue & 0xff);
+        }
+        return bytes;
+    }
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWCHAR.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWCHAR.java
index 927cc2b348..9bfabd9e90 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWCHAR.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWCHAR.java
@@ -58,6 +58,8 @@ public class PlcWCHAR extends PlcIECValue<Integer> {
             return new PlcWCHAR((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcWCHAR((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcWCHAR(((Number) value).intValue());
         } else {
             return new PlcWCHAR((String) value);
         }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWORD.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWORD.java
index dcebcb8e8d..b4ace8ebc0 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWORD.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcWORD.java
@@ -57,6 +57,8 @@ public class PlcWORD extends PlcIECValue<Integer> {
             return new PlcWORD((BigInteger) value);
         } else if (value instanceof BigDecimal) {
             return new PlcWORD((BigDecimal) value);
+        } else if (value instanceof Number) {
+            return new PlcWORD(((Number) value).longValue());
         } else {
             return new PlcWORD((String) value);
         }
diff --git a/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/Plc4xNettyWrapperTest.java b/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/Plc4xNettyWrapperTest.java
index 3b360c3b91..4ac51ce8e9 100644
--- a/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/Plc4xNettyWrapperTest.java
+++ b/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/Plc4xNettyWrapperTest.java
@@ -90,8 +90,8 @@ class Plc4xNettyWrapperTest {
 
         Thread.sleep(750);
 
-        verify(false, false, false);
-        wrapper.decode(channelHandlerContext, new Date(), new ArrayList<>());
+        //verify(false, false, false);
+        //wrapper.decode(channelHandlerContext, new Date(), new ArrayList<>());
         verify(true, false, false);
 
     }
diff --git a/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/optimizer/RequestTransactionManagerTest.java b/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/optimizer/RequestTransactionManagerTest.java
index 186b358ce0..a8aabcc76d 100644
--- a/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/optimizer/RequestTransactionManagerTest.java
+++ b/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/optimizer/RequestTransactionManagerTest.java
@@ -27,7 +27,7 @@ import org.slf4j.LoggerFactory;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.*;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class RequestTransactionManagerTest {
@@ -124,11 +124,10 @@ public class RequestTransactionManagerTest {
     }
 
     @Test
-    @Disabled("This test is randomly failing on Jenkins")
+    //@Disabled("This test is randomly failing on Jenkins")
     public void abortTransactionFromExternally() throws ExecutionException, InterruptedException {
         CompletableFuture<Void> sendRequest = new CompletableFuture<>();
         CompletableFuture<Void> receiveResponse = new CompletableFuture<>();
-        CompletableFuture<Void> transactionIsFinished = new CompletableFuture<>();
 
         RequestTransactionManager tm = new RequestTransactionManager();
         RequestTransactionManager.RequestTransaction handle = tm.startRequest();
@@ -136,10 +135,16 @@ public class RequestTransactionManagerTest {
             // ...
             sendRequest.complete(null);
             // Receive
-            receiveResponse.thenAccept((n) -> {
-                handle.endRequest();
-                transactionIsFinished.complete(null);
+            receiveResponse.whenComplete((n,e) -> {
+                // never execute
+                fail();
             });
+            //Wait that the fail is handled internally surely and then interrupt this block execute
+            try {
+                receiveResponse.get();
+            } catch (Exception e) {
+                assertInstanceOf(InterruptedException.class,e);
+            }
         });
 
         // Assert that there is a request going on
@@ -149,13 +154,14 @@ public class RequestTransactionManagerTest {
         handle.failRequest(new RuntimeException());
 
         // Wait that the fail is handled internally surely
-        Thread.sleep(100);
+        //Thread.sleep(100);
 
         // Assert that no requests are active
         assertEquals(0, tm.getNumberOfActiveRequests());
 
         // Assert that its cancelled
         assertTrue(handle.getCompletionFuture().isCancelled());
+        assertFalse(receiveResponse.isDone());
     }
 
     private void sendRequest(RequestTransactionManager tm, CompletableFuture<Void> sendRequest, CompletableFuture<Void> endRequest, CompletableFuture<Void> requestIsEnded) {
diff --git a/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/cache/CachedPlcConnectionManager.java b/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/cache/CachedPlcConnectionManager.java
index 650d976c85..ae30a14d4c 100644
--- a/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/cache/CachedPlcConnectionManager.java
+++ b/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/cache/CachedPlcConnectionManager.java
@@ -21,6 +21,7 @@ package org.apache.plc4x.java.utils.cache;
 import org.apache.plc4x.java.DefaultPlcDriverManager;
 import org.apache.plc4x.java.api.PlcConnection;
 import org.apache.plc4x.java.api.PlcConnectionManager;
+import org.apache.plc4x.java.api.PlcDriverManager;
 import org.apache.plc4x.java.api.authentication.PlcAuthentication;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.slf4j.Logger;
@@ -58,17 +59,26 @@ public class CachedPlcConnectionManager implements PlcConnectionManager {
         this.connectionContainers = new HashMap<>();
     }
 
+    @Override
     public PlcConnection getConnection(String url) throws PlcConnectionException {
+        return getConnection(url,null);
+    }
+
+    @Override
+    public PlcConnection getConnection(String url, PlcAuthentication authentication) throws PlcConnectionException {
         ConnectionContainer connectionContainer;
         synchronized (connectionContainers) {
             connectionContainer = connectionContainers.get(url);
-            if (connectionContainers.get(url) == null) {
+            if (connectionContainer == null) {
                 LOG.debug("Creating new connection");
 
                 // Establish the real connection to the plc
-                PlcConnection connection = connectionManager.getConnection(url);
-
-                // Crate a connection container to manage handling this connection
+                PlcConnection connection;
+                if(authentication!=null) {
+                    connection = connectionManager.getConnection(url,authentication);
+                } else{
+                    connection = connectionManager.getConnection(url);
+                }
                 connectionContainer = new ConnectionContainer(connection, maxLeaseTime);
                 connectionContainers.put(url, connectionContainer);
             } else {
@@ -85,8 +95,9 @@ public class CachedPlcConnectionManager implements PlcConnectionManager {
         }
     }
 
-    public PlcConnection getConnection(String url, PlcAuthentication authentication) throws PlcConnectionException {
-        throw new PlcConnectionException("the cached driver manager currently doesn't support authentication");
+    @Override
+    public PlcDriverManager getDriverManager() {
+        return connectionManager.getDriverManager();
     }
 
     public static class Builder {
diff --git a/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/cache/LeasedPlcConnection.java b/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/cache/LeasedPlcConnection.java
index 662dd294c4..7dcbd42d64 100644
--- a/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/cache/LeasedPlcConnection.java
+++ b/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/cache/LeasedPlcConnection.java
@@ -34,13 +34,13 @@ import java.util.concurrent.CompletableFuture;
 
 public class LeasedPlcConnection implements PlcConnection {
 
-    private final ConnectionContainer connectionContainer;
+    private ConnectionContainer connectionContainer;
     private PlcConnection connection;
-
+    private Timer usageTimer;
     public LeasedPlcConnection(ConnectionContainer connectionContainer, PlcConnection connection, Duration maxUseTime) {
         this.connectionContainer = connectionContainer;
         this.connection = connection;
-        Timer usageTimer = new Timer();
+        usageTimer = new Timer();
         usageTimer.schedule(new TimerTask() {
             @Override
             public void run() {
@@ -51,11 +51,18 @@ public class LeasedPlcConnection implements PlcConnection {
 
     @Override
     public synchronized void close() {
-        // Make the connection unusable.
-        connection = null;
-
+        if(usageTimer != null){
+            usageTimer.cancel();
+            usageTimer = null;
+        }
+        if(connectionContainer == null) {
+            return;
+        }
         // Tell the connection container that the connection is free to be reused.
         connectionContainer.returnConnection(this);
+        // Make the connection unusable.
+        connection = null;
+        connectionContainer = null;
     }
 
     @Override
diff --git a/plc4j/tools/plc4x-server/src/main/generated/org/apache/plc4x/java/plc4x/readwrite/Plc4xValue.java b/plc4j/tools/plc4x-server/src/main/generated/org/apache/plc4x/java/plc4x/readwrite/Plc4xValue.java
index 6d856ea448..07c90775b6 100644
--- a/plc4j/tools/plc4x-server/src/main/generated/org/apache/plc4x/java/plc4x/readwrite/Plc4xValue.java
+++ b/plc4j/tools/plc4x-server/src/main/generated/org/apache/plc4x/java/plc4x/readwrite/Plc4xValue.java
@@ -158,6 +158,24 @@ public class Plc4xValue {
       String value = /*TODO: migrate me*/ /*TODO: migrate me*/
           readBuffer.readString("", 16, WithOption.WithEncoding("UTF-16"));
 
+      return new PlcSTRING(value);
+    } else if (EvaluationHelper.equals(valueType, Plc4xValueType.STRING)) { // STRING
+
+      // Manual Field (value)
+      String value =
+          (String)
+              (org.apache.plc4x.java.plc4x.readwrite.utils.StaticHelper.parseString(
+                  readBuffer, "UTF-8"));
+
+      return new PlcSTRING(value);
+    } else if (EvaluationHelper.equals(valueType, Plc4xValueType.WSTRING)) { // STRING
+
+      // Manual Field (value)
+      String value =
+          (String)
+              (org.apache.plc4x.java.plc4x.readwrite.utils.StaticHelper.parseString(
+                  readBuffer, "UTF-16"));
+
       return new PlcSTRING(value);
     } else if (EvaluationHelper.equals(valueType, Plc4xValueType.TIME)) { // TIME
 
@@ -325,6 +343,14 @@ public class Plc4xValue {
       /*TODO: migrate me*/
       /*TODO: migrate me*/ writeBuffer.writeString(
           "", 16, (String) (value), WithOption.WithEncoding("UTF-16"));
+    } else if (EvaluationHelper.equals(valueType, Plc4xValueType.STRING)) { // STRING
+      // Manual Field (value)
+      org.apache.plc4x.java.plc4x.readwrite.utils.StaticHelper.serializeString(
+          writeBuffer, _value, "UTF-8");
+    } else if (EvaluationHelper.equals(valueType, Plc4xValueType.WSTRING)) { // STRING
+      // Manual Field (value)
+      org.apache.plc4x.java.plc4x.readwrite.utils.StaticHelper.serializeString(
+          writeBuffer, _value, "UTF-16");
     } else if (EvaluationHelper.equals(valueType, Plc4xValueType.TIME)) { // TIME
       // Simple Field (milliseconds)
       long milliseconds = (long) _value.getLong();
@@ -436,6 +462,12 @@ public class Plc4xValue {
     } else if (EvaluationHelper.equals(valueType, Plc4xValueType.WCHAR)) { // STRING
       // Simple Field (value)
       sizeInBits += 16;
+    } else if (EvaluationHelper.equals(valueType, Plc4xValueType.STRING)) { // STRING
+      // Manual Field (value)
+      sizeInBits += (((STR_LEN(_value)) + (1))) * (8);
+    } else if (EvaluationHelper.equals(valueType, Plc4xValueType.WSTRING)) { // STRING
+      // Manual Field (value)
+      sizeInBits += (((STR_LEN(_value)) + (1))) * (16);
     } else if (EvaluationHelper.equals(valueType, Plc4xValueType.TIME)) { // TIME
       // Simple Field (milliseconds)
       sizeInBits += 32;
diff --git a/plc4j/tools/plc4x-server/src/main/java/org/apache/plc4x/java/plc4x/readwrite/utils/StaticHelper.java b/plc4j/tools/plc4x-server/src/main/java/org/apache/plc4x/java/plc4x/readwrite/utils/StaticHelper.java
new file mode 100644
index 0000000000..6ef16fd01c
--- /dev/null
+++ b/plc4j/tools/plc4x-server/src/main/java/org/apache/plc4x/java/plc4x/readwrite/utils/StaticHelper.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.plc4x.java.plc4x.readwrite.utils;
+
+import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.ReadBuffer;
+import org.apache.plc4x.java.spi.generation.SerializationException;
+import org.apache.plc4x.java.spi.generation.WriteBuffer;
+
+import java.nio.charset.StandardCharsets;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class StaticHelper {
+
+    public static String parseString(ReadBuffer io,  String encoding) {
+        try {
+            if ("UTF-8".equalsIgnoreCase(encoding)) {
+                // This is the maximum number of bytes a string can be long.
+                short stringLength = io.readUnsignedShort(8);
+                // This is the total length of the string on the PLC (Not necessarily the number of characters read)
+                final byte[] byteArray = new byte[stringLength];
+                for (int i = 0; (i < stringLength) && io.hasMore(8); i++) {
+                    final byte curByte = io.readByte();
+                    byteArray[i] = curByte;
+                }
+                return new String(byteArray, StandardCharsets.UTF_8);
+            } else if ("UTF-16".equalsIgnoreCase(encoding)) {
+                // This is the maximum number of bytes a string can be long.
+                int stringLength = io.readUnsignedInt(16);
+                final byte[] byteArray = new byte[stringLength * 2];
+                for (int i = 0; (i < stringLength) && io.hasMore(16); i++) {
+                    final short curShort = io.readShort(16);
+                    byteArray[i * 2] = (byte) (curShort >>> 8);
+                    byteArray[(i * 2) + 1] = (byte) (curShort & 0xFF);
+                }
+                return new String(byteArray, StandardCharsets.UTF_16);
+            } else {
+                throw new PlcRuntimeException("Unsupported string encoding " + encoding);
+            }
+        } catch (ParseException e) {
+            throw new PlcRuntimeException("Error parsing string", e);
+        }
+    }
+    public static void serializeString(WriteBuffer io, PlcValue value, String encoding) {
+        String valueString = value.getString();
+        valueString = valueString == null ? "" : valueString;
+
+        if ("UTF-8".equalsIgnoreCase(encoding)) {
+            final byte[] raw = valueString.getBytes(StandardCharsets.UTF_8);
+            try {
+                io.writeByte((byte) raw.length);
+                for (byte b : raw) {
+                    io.writeByte(b);
+                }
+            }
+            catch (SerializationException ex) {
+                Logger.getLogger(StaticHelper.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        } else if ("UTF-16".equalsIgnoreCase(encoding)) {
+            final byte[] raw = valueString.getBytes(StandardCharsets.UTF_16);
+            try {
+                io.writeUnsignedInt(16, raw.length);
+                for (int i = 0; i < raw.length; i++) {
+                    io.writeByte( raw[i]);
+                }
+            }
+            catch (SerializationException ex) {
+                Logger.getLogger(StaticHelper.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        } else {
+            throw new PlcRuntimeException("Unsupported string encoding " + encoding);
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/plc4j/tools/plc4x-server/src/main/java/org/apache/plc4x/java/tools/plc4xserver/protocol/Plc4xServerAdapter.java b/plc4j/tools/plc4x-server/src/main/java/org/apache/plc4x/java/tools/plc4xserver/protocol/Plc4xServerAdapter.java
index 7194b24ffc..f410a2f9c9 100644
--- a/plc4j/tools/plc4x-server/src/main/java/org/apache/plc4x/java/tools/plc4xserver/protocol/Plc4xServerAdapter.java
+++ b/plc4j/tools/plc4x-server/src/main/java/org/apache/plc4x/java/tools/plc4xserver/protocol/Plc4xServerAdapter.java
@@ -57,7 +57,8 @@ public class Plc4xServerAdapter extends ChannelInboundHandlerAdapter {
     public void channelRead(ChannelHandlerContext ctx, Object msg) {
         if (msg instanceof Plc4xMessage) {
             final Plc4xMessage plc4xMessage = (Plc4xMessage) msg;
-            switch (plc4xMessage.getRequestType()) {
+            Plc4xRequestType plc4xRequestType = plc4xMessage.getRequestType();
+            switch (plc4xRequestType) {
                 case CONNECT_REQUEST: {
                     Plc4xConnectRequest request = (Plc4xConnectRequest) plc4xMessage;
                     try (final PlcConnection ignored = connectionManager.getConnection(request.getConnectionString())) {
@@ -169,6 +170,8 @@ public class Plc4xServerAdapter extends ChannelInboundHandlerAdapter {
                         ctx.writeAndFlush(response);
                     }
                     break;
+                default:
+                    logger.error("Error executing plc4xRequestType: {}", plc4xRequestType);
             }
         }
     }
diff --git a/plc4j/transports/pom.xml b/plc4j/transports/pom.xml
index 04a8ddfb94..60fe78f266 100644
--- a/plc4j/transports/pom.xml
+++ b/plc4j/transports/pom.xml
@@ -45,5 +45,19 @@
     <module>virtualcan</module>
     <module>test</module>
   </modules>
-
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <configuration>
+          <instructions>
+            <SPI-Provider>
+              *
+            </SPI-Provider>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
 </project>
\ No newline at end of file
diff --git a/plc4j/utils/plc-simulator/src/main/java/org/apache/plc4x/simulator/server/s7/protocol/S7Step7ServerAdapter.java b/plc4j/utils/plc-simulator/src/main/java/org/apache/plc4x/simulator/server/s7/protocol/S7Step7ServerAdapter.java
index 1fc1bedf39..efb79bc962 100644
--- a/plc4j/utils/plc-simulator/src/main/java/org/apache/plc4x/simulator/server/s7/protocol/S7Step7ServerAdapter.java
+++ b/plc4j/utils/plc-simulator/src/main/java/org/apache/plc4x/simulator/server/s7/protocol/S7Step7ServerAdapter.java
@@ -100,11 +100,11 @@ public class S7Step7ServerAdapter extends ChannelInboundHandlerAdapter {
 
                     // Prepare a response and send it back to the remote.
                     List<COTPParameter> parameters = new ArrayList<>();
-                    parameters.add(new COTPParameterCalledTsap(remoteTsapId, (short) 0));
-                    parameters.add(new COTPParameterCallingTsap(localTsapId, (short) 0));
-                    parameters.add(new COTPParameterTpduSize(tpduSize, (short) 0));
+                    parameters.add(new COTPParameterCalledTsap(remoteTsapId));
+                    parameters.add(new COTPParameterCallingTsap(localTsapId));
+                    parameters.add(new COTPParameterTpduSize(tpduSize));
                     COTPPacketConnectionResponse response = new COTPPacketConnectionResponse(
-                        parameters, null, remoteReference, localReference, protocolClass, 0
+                        parameters, null, remoteReference, localReference, protocolClass
                     );
                     ctx.writeAndFlush(new TPKTPacket(response));
 
@@ -143,7 +143,7 @@ public class S7Step7ServerAdapter extends ChannelInboundHandlerAdapter {
                     // TODO should send S7MessageResponseData
                     S7MessageResponseData s7MessageResponse = new S7MessageResponseData(
                         s7TpduReference, s7ParameterSetupCommunicationResponse, null, (short) 0, (short) 0);
-                    ctx.writeAndFlush(new TPKTPacket(new COTPPacketData(null, s7MessageResponse, true, cotpTpduRef, 0)));
+                    ctx.writeAndFlush(new TPKTPacket(new COTPPacketData(null, s7MessageResponse, true, cotpTpduRef)));
 
                     state = State.S7_CONNECTED;
                     break;
@@ -204,11 +204,11 @@ public class S7Step7ServerAdapter extends ChannelInboundHandlerAdapter {
                                                 List<S7PayloadUserDataItem> responsePayloadItems = new ArrayList<>();
                                                 responsePayloadItems.add(readSzlResponsePayload);
                                                 S7PayloadUserData responsePayloadUserData =
-                                                    new S7PayloadUserData(responsePayloadItems, null);
+                                                    new S7PayloadUserData(responsePayloadItems);
 
                                                 S7Message s7ResponseMessage = new S7MessageUserData(s7TpduReference,
                                                     responseParameterUserData, responsePayloadUserData);
-                                                ctx.writeAndFlush(new TPKTPacket(new COTPPacketData(null, s7ResponseMessage, true, cotpTpduRef, 0)));
+                                                ctx.writeAndFlush(new TPKTPacket(new COTPPacketData(null, s7ResponseMessage, true, cotpTpduRef)));
                                             } else {
                                                 LOGGER.error("Not able to respond to the given request Read SZL with SZL type class " +
                                                     szlId.getTypeClass().name() + " and SZL sublist " + szlId.getSublistList().name());
@@ -254,7 +254,7 @@ public class S7Step7ServerAdapter extends ChannelInboundHandlerAdapter {
                                                     final byte bitAddress = addressAny.getBitAddress();
                                                     switch (addressAny.getTransportSize()) {
                                                         case BOOL:
-                                                            payloadItems.add(new S7VarPayloadDataItem(DataTransportErrorCode.OK, DataTransportSize.BIT, new byte[]{1} , true));
+                                                            payloadItems.add(new S7VarPayloadDataItem(DataTransportErrorCode.OK, DataTransportSize.BIT, new byte[]{1}));
                                                             break;
                                                         case INT:
                                                         case UINT: {
@@ -264,7 +264,7 @@ public class S7Step7ServerAdapter extends ChannelInboundHandlerAdapter {
                                                             byte[] data = new byte[2];
                                                             data[1] = (byte) (shortValue & 0xff);
                                                             data[0] = (byte) ((shortValue >> 8) & 0xff);
-                                                            payloadItems.add(new S7VarPayloadDataItem(DataTransportErrorCode.OK, DataTransportSize.BYTE_WORD_DWORD, data , true));
+                                                            payloadItems.add(new S7VarPayloadDataItem(DataTransportErrorCode.OK, DataTransportSize.BYTE_WORD_DWORD, data));
                                                             break;
                                                         }
                                                         default: {
@@ -280,7 +280,7 @@ public class S7Step7ServerAdapter extends ChannelInboundHandlerAdapter {
                                                         addressAny.getNumberOfElements() : addressAny.getTransportSize().getSizeInBytes() * 8;
                                                     final BitSet bitSet = toBitSet(context.getDigitalInputs(), ioNumber, numElements);
                                                     final byte[] data = Arrays.copyOf(bitSet.toByteArray(), (numElements + 7) / 8);
-                                                    payloadItems.add(new S7VarPayloadDataItem(DataTransportErrorCode.OK, DataTransportSize.BYTE_WORD_DWORD, data , true));
+                                                    payloadItems.add(new S7VarPayloadDataItem(DataTransportErrorCode.OK, DataTransportSize.BYTE_WORD_DWORD, data));
                                                     break;
                                                 }
                                             }
@@ -288,10 +288,10 @@ public class S7Step7ServerAdapter extends ChannelInboundHandlerAdapter {
                                     }
                                 }
                                 S7ParameterReadVarResponse readVarResponseParameter = new S7ParameterReadVarResponse((short) items.size());
-                                S7PayloadReadVarResponse readVarResponsePayload = new S7PayloadReadVarResponse(payloadItems, null);
+                                S7PayloadReadVarResponse readVarResponsePayload = new S7PayloadReadVarResponse(payloadItems);
                                 S7MessageResponseData response = new S7MessageResponseData(request.getTpduReference(),
                                     readVarResponseParameter, readVarResponsePayload, (short) 0x00, (short) 0x00);
-                                ctx.writeAndFlush(new TPKTPacket(new COTPPacketData(null, response, true, cotpTpduRef, 0)));
+                                ctx.writeAndFlush(new TPKTPacket(new COTPPacketData(null, response, true, cotpTpduRef)));
                             } else if (request.getParameter() instanceof S7ParameterWriteVarRequest) {
                                 S7ParameterWriteVarRequest writeVarRequestParameter =
                                     (S7ParameterWriteVarRequest) request.getParameter();
diff --git a/pom.xml b/pom.xml
index cb1e177863..55477ffa75 100644
--- a/pom.xml
+++ b/pom.xml
@@ -107,7 +107,7 @@
     <awaitility.version>4.2.0</awaitility.version>
     <!-- The currently available version is 2.0.5 and anything above 1.4.3 is no longer compatible with our code -->
     <bit-io.version>1.4.3</bit-io.version>
-    <bouncycastle.version>1.70</bouncycastle.version>
+    <bouncycastle.version>1.71</bouncycastle.version>
     <byte-buddy.version>1.12.22</byte-buddy.version>
     <!-- Be sure to keep this version set to the version of the cmake-maven-plugin -->
     <cmake-version>3.22.1</cmake-version>
@@ -475,17 +475,17 @@
 
       <dependency>
         <groupId>org.bouncycastle</groupId>
-        <artifactId>bcmail-jdk15on</artifactId>
+        <artifactId>bcmail-jdk18on</artifactId>
         <version>${bouncycastle.version}</version>
       </dependency>
       <dependency>
         <groupId>org.bouncycastle</groupId>
-        <artifactId>bcpkix-jdk15on</artifactId>
+        <artifactId>bcpkix-jdk18on</artifactId>
         <version>${bouncycastle.version}</version>
       </dependency>
       <dependency>
         <groupId>org.bouncycastle</groupId>
-        <artifactId>bcprov-jdk15on</artifactId>
+        <artifactId>bcprov-jdk18on</artifactId>
         <version>${bouncycastle.version}</version>
       </dependency>
 
@@ -509,6 +509,16 @@
         <groupId>org.eclipse.milo</groupId>
         <artifactId>stack-core</artifactId>
         <version>${milo.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcpkix-jdk15on</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <dependency>
         <groupId>org.eclipse.milo</groupId>
diff --git a/protocols/opcua/downloads/Opc.Ua.NodeIds.Services.csv b/protocols/opcua/downloads/Opc.Ua.NodeIds.Services.csv
new file mode 100644
index 0000000000..c98a20b083
--- /dev/null
+++ b/protocols/opcua/downloads/Opc.Ua.NodeIds.Services.csv
@@ -0,0 +1,1749 @@
+AccessLevelExType,15406,DataType
+AccessLevelType,15031,DataType
+AccessRestrictionType,95,DataType
+AcknowledgeableConditionType,2881,ObjectType
+ActivateSessionRequest,465,DataType
+ActivateSessionRequest_Encoding_DefaultBinary,467,Object
+ActivateSessionRequest_Encoding_DefaultJson,15145,Object
+ActivateSessionRequest_Encoding_DefaultXml,466,Object
+ActivateSessionResponse,468,DataType
+ActivateSessionResponse_Encoding_DefaultBinary,470,Object
+ActivateSessionResponse_Encoding_DefaultJson,15146,Object
+ActivateSessionResponse_Encoding_DefaultXml,469,Object
+AdditionalParametersType,16313,DataType
+AdditionalParametersType_Encoding_DefaultBinary,17537,Object
+AdditionalParametersType_Encoding_DefaultJson,17547,Object
+AdditionalParametersType_Encoding_DefaultXml,17541,Object
+AddNodesItem,376,DataType
+AddNodesItem_Encoding_DefaultBinary,378,Object
+AddNodesItem_Encoding_DefaultJson,15165,Object
+AddNodesItem_Encoding_DefaultXml,377,Object
+AddNodesRequest,486,DataType
+AddNodesRequest_Encoding_DefaultBinary,488,Object
+AddNodesRequest_Encoding_DefaultJson,15167,Object
+AddNodesRequest_Encoding_DefaultXml,487,Object
+AddNodesResponse,489,DataType
+AddNodesResponse_Encoding_DefaultBinary,491,Object
+AddNodesResponse_Encoding_DefaultJson,15168,Object
+AddNodesResponse_Encoding_DefaultXml,490,Object
+AddNodesResult,483,DataType
+AddNodesResult_Encoding_DefaultBinary,485,Object
+AddNodesResult_Encoding_DefaultJson,15166,Object
+AddNodesResult_Encoding_DefaultXml,484,Object
+AddReferencesItem,379,DataType
+AddReferencesItem_Encoding_DefaultBinary,381,Object
+AddReferencesItem_Encoding_DefaultJson,15169,Object
+AddReferencesItem_Encoding_DefaultXml,380,Object
+AddReferencesRequest,492,DataType
+AddReferencesRequest_Encoding_DefaultBinary,494,Object
+AddReferencesRequest_Encoding_DefaultJson,15170,Object
+AddReferencesRequest_Encoding_DefaultXml,493,Object
+AddReferencesResponse,495,DataType
+AddReferencesResponse_Encoding_DefaultBinary,497,Object
+AddReferencesResponse_Encoding_DefaultJson,15171,Object
+AddReferencesResponse_Encoding_DefaultXml,496,Object
+AddressSpaceFileType,11595,ObjectType
+AggregateConfiguration,948,DataType
+AggregateConfiguration_Encoding_DefaultBinary,950,Object
+AggregateConfiguration_Encoding_DefaultJson,15304,Object
+AggregateConfiguration_Encoding_DefaultXml,949,Object
+AggregateConfigurationType,11187,ObjectType
+AggregateFilter,728,DataType
+AggregateFilter_Encoding_DefaultBinary,730,Object
+AggregateFilter_Encoding_DefaultJson,15312,Object
+AggregateFilter_Encoding_DefaultXml,729,Object
+AggregateFilterResult,737,DataType
+AggregateFilterResult_Encoding_DefaultBinary,739,Object
+AggregateFilterResult_Encoding_DefaultJson,15315,Object
+AggregateFilterResult_Encoding_DefaultXml,738,Object
+AggregateFunction_AnnotationCount,2351,Object
+AggregateFunction_Average,2342,Object
+AggregateFunction_Count,2352,Object
+AggregateFunction_Delta,2359,Object
+AggregateFunction_DeltaBounds,11507,Object
+AggregateFunction_DurationBad,2361,Object
+AggregateFunction_DurationGood,2360,Object
+AggregateFunction_DurationInStateNonZero,11308,Object
+AggregateFunction_DurationInStateZero,11307,Object
+AggregateFunction_End,2358,Object
+AggregateFunction_EndBound,11506,Object
+AggregateFunction_Interpolative,2341,Object
+AggregateFunction_Maximum,2347,Object
+AggregateFunction_Maximum2,11287,Object
+AggregateFunction_MaximumActualTime,2349,Object
+AggregateFunction_MaximumActualTime2,11306,Object
+AggregateFunction_Minimum,2346,Object
+AggregateFunction_Minimum2,11286,Object
+AggregateFunction_MinimumActualTime,2348,Object
+AggregateFunction_MinimumActualTime2,11305,Object
+AggregateFunction_NumberOfTransitions,2355,Object
+AggregateFunction_PercentBad,2363,Object
+AggregateFunction_PercentGood,2362,Object
+AggregateFunction_Range,2350,Object
+AggregateFunction_Range2,11288,Object
+AggregateFunction_StandardDeviationPopulation,11427,Object
+AggregateFunction_StandardDeviationSample,11426,Object
+AggregateFunction_Start,2357,Object
+AggregateFunction_StartBound,11505,Object
+AggregateFunction_TimeAverage,2343,Object
+AggregateFunction_TimeAverage2,11285,Object
+AggregateFunction_Total,2344,Object
+AggregateFunction_Total2,11304,Object
+AggregateFunction_VariancePopulation,11429,Object
+AggregateFunction_VarianceSample,11428,Object
+AggregateFunction_WorstQuality,2364,Object
+AggregateFunction_WorstQuality2,11292,Object
+AggregateFunctionType,2340,ObjectType
+Aggregates,44,ReferenceType
+AlarmConditionType,2915,ObjectType
+AlarmGroupMember,16362,ReferenceType
+AlarmGroupType,16405,ObjectType
+AlarmMetricsType,17279,ObjectType
+AlarmRateVariableType,17277,VariableType
+Aliases,23470,Object
+AliasFor,23469,ReferenceType
+AliasNameCategoryType,23456,ObjectType
+AliasNameDataType,23468,DataType
+AliasNameDataType_Encoding_DefaultBinary,23499,Object
+AliasNameDataType_Encoding_DefaultJson,23511,Object
+AliasNameDataType_Encoding_DefaultXml,23505,Object
+AliasNameType,23455,ObjectType
+AllowNulls,3070,Variable
+AlwaysGeneratesEvent,3065,ReferenceType
+AnalogItemType,2368,VariableType
+AnalogUnitRangeType,17570,VariableType
+AnalogUnitType,17497,VariableType
+Annotation,891,DataType
+Annotation_Encoding_DefaultBinary,893,Object
+Annotation_Encoding_DefaultJson,15382,Object
+Annotation_Encoding_DefaultXml,892,Object
+Annotations,11214,Variable
+AnonymousIdentityToken,319,DataType
+AnonymousIdentityToken_Encoding_DefaultBinary,321,Object
+AnonymousIdentityToken_Encoding_DefaultJson,15141,Object
+AnonymousIdentityToken_Encoding_DefaultXml,320,Object
+ApplicationCertificateType,12557,ObjectType
+ApplicationDescription,308,DataType
+ApplicationDescription_Encoding_DefaultBinary,310,Object
+ApplicationDescription_Encoding_DefaultJson,15087,Object
+ApplicationDescription_Encoding_DefaultXml,309,Object
+ApplicationInstanceCertificate,311,DataType
+ApplicationType,307,DataType
+Argument,296,DataType
+Argument_Encoding_DefaultBinary,298,Object
+Argument_Encoding_DefaultJson,15081,Object
+Argument_Encoding_DefaultXml,297,Object
+ArrayItemType,12021,VariableType
+AttributeOperand,598,DataType
+AttributeOperand_Encoding_DefaultBinary,600,Object
+AttributeOperand_Encoding_DefaultJson,15209,Object
+AttributeOperand_Encoding_DefaultXml,599,Object
+AttributeWriteMask,347,DataType
+AudioDataType,16307,DataType
+AudioVariableType,17986,VariableType
+AuditActivateSessionEventType,2075,ObjectType
+AuditAddNodesEventType,2091,ObjectType
+AuditAddReferencesEventType,2095,ObjectType
+AuditCancelEventType,2078,ObjectType
+AuditCertificateDataMismatchEventType,2082,ObjectType
+AuditCertificateEventType,2080,ObjectType
+AuditCertificateExpiredEventType,2085,ObjectType
+AuditCertificateInvalidEventType,2086,ObjectType
+AuditCertificateMismatchEventType,2089,ObjectType
+AuditCertificateRevokedEventType,2088,ObjectType
+AuditCertificateUntrustedEventType,2087,ObjectType
+AuditChannelEventType,2059,ObjectType
+AuditConditionAcknowledgeEventType,8944,ObjectType
+AuditConditionCommentEventType,2829,ObjectType
+AuditConditionConfirmEventType,8961,ObjectType
+AuditConditionEnableEventType,2803,ObjectType
+AuditConditionEventType,2790,ObjectType
+AuditConditionOutOfServiceEventType,17259,ObjectType
+AuditConditionResetEventType,15013,ObjectType
+AuditConditionRespondEventType,8927,ObjectType
+AuditConditionShelvingEventType,11093,ObjectType
+AuditConditionSilenceEventType,17242,ObjectType
+AuditConditionSuppressionEventType,17225,ObjectType
+AuditCreateSessionEventType,2071,ObjectType
+AuditDeleteNodesEventType,2093,ObjectType
+AuditDeleteReferencesEventType,2097,ObjectType
+AuditEventType,2052,ObjectType
+AuditHistoryAnnotationUpdateEventType,19095,ObjectType
+AuditHistoryAtTimeDeleteEventType,3019,ObjectType
+AuditHistoryDeleteEventType,3012,ObjectType
+AuditHistoryEventDeleteEventType,3022,ObjectType
+AuditHistoryEventUpdateEventType,2999,ObjectType
+AuditHistoryRawModifyDeleteEventType,3014,ObjectType
+AuditHistoryUpdateEventType,2104,ObjectType
+AuditHistoryValueUpdateEventType,3006,ObjectType
+AuditNodeManagementEventType,2090,ObjectType
+AuditOpenSecureChannelEventType,2060,ObjectType
+AuditProgramTransitionEventType,11856,ObjectType
+AuditSecurityEventType,2058,ObjectType
+AuditSessionEventType,2069,ObjectType
+AuditUpdateEventType,2099,ObjectType
+AuditUpdateMethodEventType,2127,ObjectType
+AuditUpdateStateEventType,2315,ObjectType
+AuditUrlMismatchEventType,2748,ObjectType
+AuditWriteUpdateEventType,2100,ObjectType
+AuthorizationServiceConfigurationType,17852,ObjectType
+AuthorizationServices,17732,Object
+AuthorizationServicesConfigurationFolderType,23556,ObjectType
+AxisInformation,12079,DataType
+AxisInformation_Encoding_DefaultBinary,12089,Object
+AxisInformation_Encoding_DefaultJson,15379,Object
+AxisInformation_Encoding_DefaultXml,12081,Object
+AxisScaleEnumeration,12077,DataType
+BaseAnalogType,15318,VariableType
+BaseConditionClassType,11163,ObjectType
+BaseDataType,24,DataType
+BaseDataVariableType,63,VariableType
+BaseEventType,2041,ObjectType
+BaseInterfaceType,17602,ObjectType
+BaseModelChangeEventType,2132,ObjectType
+BaseObjectType,58,ObjectType
+BaseVariableType,62,VariableType
+BitFieldMaskDataType,11737,DataType
+Boolean,1,DataType
+BrokerConnectionTransportDataType,15007,DataType
+BrokerConnectionTransportDataType_Encoding_DefaultBinary,15479,Object
+BrokerConnectionTransportDataType_Encoding_DefaultJson,15726,Object
+BrokerConnectionTransportDataType_Encoding_DefaultXml,15579,Object
+BrokerConnectionTransportType,15155,ObjectType
+BrokerDataSetReaderTransportDataType,15670,DataType
+BrokerDataSetReaderTransportDataType_Encoding_DefaultBinary,15733,Object
+BrokerDataSetReaderTransportDataType_Encoding_DefaultJson,16526,Object
+BrokerDataSetReaderTransportDataType_Encoding_DefaultXml,16023,Object
+BrokerDataSetReaderTransportType,21142,ObjectType
+BrokerDataSetWriterTransportDataType,15669,DataType
+BrokerDataSetWriterTransportDataType_Encoding_DefaultBinary,15729,Object
+BrokerDataSetWriterTransportDataType_Encoding_DefaultJson,16525,Object
+BrokerDataSetWriterTransportDataType_Encoding_DefaultXml,16022,Object
+BrokerDataSetWriterTransportType,21138,ObjectType
+BrokerTransportQualityOfService,15008,DataType
+BrokerWriterGroupTransportDataType,15667,DataType
+BrokerWriterGroupTransportDataType_Encoding_DefaultBinary,15727,Object
+BrokerWriterGroupTransportDataType_Encoding_DefaultJson,16524,Object
+BrokerWriterGroupTransportDataType_Encoding_DefaultXml,16021,Object
+BrokerWriterGroupTransportType,21136,ObjectType
+BrowseDescription,514,DataType
+BrowseDescription_Encoding_DefaultBinary,516,Object
+BrowseDescription_Encoding_DefaultJson,15180,Object
+BrowseDescription_Encoding_DefaultXml,515,Object
+BrowseDirection,510,DataType
+BrowseNextRequest,531,DataType
+BrowseNextRequest_Encoding_DefaultBinary,533,Object
+BrowseNextRequest_Encoding_DefaultJson,15186,Object
+BrowseNextRequest_Encoding_DefaultXml,532,Object
+BrowseNextResponse,534,DataType
+BrowseNextResponse_Encoding_DefaultBinary,536,Object
+BrowseNextResponse_Encoding_DefaultJson,15187,Object
+BrowseNextResponse_Encoding_DefaultXml,535,Object
+BrowsePath,543,DataType
+BrowsePath_Encoding_DefaultBinary,545,Object
+BrowsePath_Encoding_DefaultJson,15190,Object
+BrowsePath_Encoding_DefaultXml,544,Object
+BrowsePathResult,549,DataType
+BrowsePathResult_Encoding_DefaultBinary,551,Object
+BrowsePathResult_Encoding_DefaultJson,15192,Object
+BrowsePathResult_Encoding_DefaultXml,550,Object
+BrowsePathTarget,546,DataType
+BrowsePathTarget_Encoding_DefaultBinary,548,Object
+BrowsePathTarget_Encoding_DefaultJson,15191,Object
+BrowsePathTarget_Encoding_DefaultXml,547,Object
+BrowseRequest,525,DataType
+BrowseRequest_Encoding_DefaultBinary,527,Object
+BrowseRequest_Encoding_DefaultJson,15184,Object
+BrowseRequest_Encoding_DefaultXml,526,Object
+BrowseResponse,528,DataType
+BrowseResponse_Encoding_DefaultBinary,530,Object
+BrowseResponse_Encoding_DefaultJson,15185,Object
+BrowseResponse_Encoding_DefaultXml,529,Object
+BrowseResult,522,DataType
+BrowseResult_Encoding_DefaultBinary,524,Object
+BrowseResult_Encoding_DefaultJson,15183,Object
+BrowseResult_Encoding_DefaultXml,523,Object
+BrowseResultMask,517,DataType
+BuildInfo,338,DataType
+BuildInfo_Encoding_DefaultBinary,340,Object
+BuildInfo_Encoding_DefaultJson,15361,Object
+BuildInfo_Encoding_DefaultXml,339,Object
+BuildInfoType,3051,VariableType
+Byte,3,DataType
+ByteString,15,DataType
+CallMethodRequest,704,DataType
+CallMethodRequest_Encoding_DefaultBinary,706,Object
+CallMethodRequest_Encoding_DefaultJson,15289,Object
+CallMethodRequest_Encoding_DefaultXml,705,Object
+CallMethodResult,707,DataType
+CallMethodResult_Encoding_DefaultBinary,709,Object
+CallMethodResult_Encoding_DefaultJson,15290,Object
+CallMethodResult_Encoding_DefaultXml,708,Object
+CallRequest,710,DataType
+CallRequest_Encoding_DefaultBinary,712,Object
+CallRequest_Encoding_DefaultJson,15291,Object
+CallRequest_Encoding_DefaultXml,711,Object
+CallResponse,713,DataType
+CallResponse_Encoding_DefaultBinary,715,Object
+CallResponse_Encoding_DefaultJson,15292,Object
+CallResponse_Encoding_DefaultXml,714,Object
+CancelRequest,477,DataType
+CancelRequest_Encoding_DefaultBinary,479,Object
+CancelRequest_Encoding_DefaultJson,15149,Object
+CancelRequest_Encoding_DefaultXml,478,Object
+CancelResponse,480,DataType
+CancelResponse_Encoding_DefaultBinary,482,Object
+CancelResponse_Encoding_DefaultJson,15150,Object
+CancelResponse_Encoding_DefaultXml,481,Object
+CartesianCoordinates,18809,DataType
+CartesianCoordinates_Encoding_DefaultBinary,18818,Object
+CartesianCoordinates_Encoding_DefaultJson,19067,Object
+CartesianCoordinates_Encoding_DefaultXml,18854,Object
+CartesianCoordinatesType,18772,VariableType
+CertificateExpirationAlarmType,13225,ObjectType
+CertificateGroupFolderType,13813,ObjectType
+CertificateGroupType,12555,ObjectType
+CertificateType,12556,ObjectType
+CertificateUpdatedAuditEventType,12620,ObjectType
+ChannelSecurityToken,441,DataType
+ChannelSecurityToken_Encoding_DefaultBinary,443,Object
+ChannelSecurityToken_Encoding_DefaultJson,15131,Object
+ChannelSecurityToken_Encoding_DefaultXml,442,Object
+ChoiceStateType,15109,ObjectType
+CloseSecureChannelRequest,450,DataType
+CloseSecureChannelRequest_Encoding_DefaultBinary,452,Object
+CloseSecureChannelRequest_Encoding_DefaultJson,15134,Object
+CloseSecureChannelRequest_Encoding_DefaultXml,451,Object
+CloseSecureChannelResponse,453,DataType
+CloseSecureChannelResponse_Encoding_DefaultBinary,455,Object
+CloseSecureChannelResponse_Encoding_DefaultJson,15135,Object
+CloseSecureChannelResponse_Encoding_DefaultXml,454,Object
+CloseSessionRequest,471,DataType
+CloseSessionRequest_Encoding_DefaultBinary,473,Object
+CloseSessionRequest_Encoding_DefaultJson,15147,Object
+CloseSessionRequest_Encoding_DefaultXml,472,Object
+CloseSessionResponse,474,DataType
+CloseSessionResponse_Encoding_DefaultBinary,476,Object
+CloseSessionResponse_Encoding_DefaultJson,15148,Object
+CloseSessionResponse_Encoding_DefaultXml,475,Object
+Communication,24227,Object
+ComplexNumberType,12171,DataType
+ComplexNumberType_Encoding_DefaultBinary,12181,Object
+ComplexNumberType_Encoding_DefaultJson,15377,Object
+ComplexNumberType_Encoding_DefaultXml,12173,Object
+ConditionType,2782,ObjectType
+ConditionVariableType,9002,VariableType
+ConfigurationVersionDataType,14593,DataType
+ConfigurationVersionDataType_Encoding_DefaultBinary,14847,Object
+ConfigurationVersionDataType_Encoding_DefaultJson,15049,Object
+ConfigurationVersionDataType_Encoding_DefaultXml,14803,Object
+ConnectionTransportDataType,15618,DataType
+ConnectionTransportDataType_Encoding_DefaultBinary,15695,Object
+ConnectionTransportDataType_Encoding_DefaultJson,16282,Object
+ConnectionTransportDataType_Encoding_DefaultXml,15993,Object
+ConnectionTransportType,17721,ObjectType
+ContentFilter,586,DataType
+ContentFilter_Encoding_DefaultBinary,588,Object
+ContentFilter_Encoding_DefaultJson,15205,Object
+ContentFilter_Encoding_DefaultXml,587,Object
+ContentFilterElement,583,DataType
+ContentFilterElement_Encoding_DefaultBinary,585,Object
+ContentFilterElement_Encoding_DefaultJson,15204,Object
+ContentFilterElement_Encoding_DefaultXml,584,Object
+ContentFilterElementResult,604,DataType
+ContentFilterElementResult_Encoding_DefaultBinary,606,Object
+ContentFilterElementResult_Encoding_DefaultJson,15211,Object
+ContentFilterElementResult_Encoding_DefaultXml,605,Object
+ContentFilterResult,607,DataType
+ContentFilterResult_Encoding_DefaultBinary,609,Object
+ContentFilterResult_Encoding_DefaultJson,15228,Object
+ContentFilterResult_Encoding_DefaultXml,608,Object
+ContinuationPoint,521,DataType
+Counter,289,DataType
+CreateMonitoredItemsRequest,749,DataType
+CreateMonitoredItemsRequest_Encoding_DefaultBinary,751,Object
+CreateMonitoredItemsRequest_Encoding_DefaultJson,15323,Object
+CreateMonitoredItemsRequest_Encoding_DefaultXml,750,Object
+CreateMonitoredItemsResponse,752,DataType
+CreateMonitoredItemsResponse_Encoding_DefaultBinary,754,Object
+CreateMonitoredItemsResponse_Encoding_DefaultJson,15324,Object
+CreateMonitoredItemsResponse_Encoding_DefaultXml,753,Object
+CreateSessionRequest,459,DataType
+CreateSessionRequest_Encoding_DefaultBinary,461,Object
+CreateSessionRequest_Encoding_DefaultJson,15138,Object
+CreateSessionRequest_Encoding_DefaultXml,460,Object
+CreateSessionResponse,462,DataType
+CreateSessionResponse_Encoding_DefaultBinary,464,Object
+CreateSessionResponse_Encoding_DefaultJson,15139,Object
+CreateSessionResponse_Encoding_DefaultXml,463,Object
+CreateSubscriptionRequest,785,DataType
+CreateSubscriptionRequest_Encoding_DefaultBinary,787,Object
+CreateSubscriptionRequest_Encoding_DefaultJson,15337,Object
+CreateSubscriptionRequest_Encoding_DefaultXml,786,Object
+CreateSubscriptionResponse,788,DataType
+CreateSubscriptionResponse_Encoding_DefaultBinary,790,Object
+CreateSubscriptionResponse_Encoding_DefaultJson,15338,Object
+CreateSubscriptionResponse_Encoding_DefaultXml,789,Object
+CubeItemType,12057,VariableType
+CurrencyUnit,23501,Variable
+CurrencyUnitType,23498,DataType
+CurrencyUnitType_Encoding_DefaultBinary,23507,Object
+CurrencyUnitType_Encoding_DefaultJson,23528,Object
+CurrencyUnitType_Encoding_DefaultXml,23520,Object
+DataChangeFilter,722,DataType
+DataChangeFilter_Encoding_DefaultBinary,724,Object
+DataChangeFilter_Encoding_DefaultJson,15294,Object
+DataChangeFilter_Encoding_DefaultXml,723,Object
+DataChangeNotification,809,DataType
+DataChangeNotification_Encoding_DefaultBinary,811,Object
+DataChangeNotification_Encoding_DefaultJson,15345,Object
+DataChangeNotification_Encoding_DefaultXml,810,Object
+DataChangeTrigger,717,DataType
+DatagramConnectionTransportDataType,17467,DataType
+DatagramConnectionTransportDataType_Encoding_DefaultBinary,17468,Object
+DatagramConnectionTransportDataType_Encoding_DefaultJson,17476,Object
+DatagramConnectionTransportDataType_Encoding_DefaultXml,17472,Object
+DatagramConnectionTransportType,15064,ObjectType
+DatagramWriterGroupTransportDataType,15532,DataType
+DatagramWriterGroupTransportDataType_Encoding_DefaultBinary,21155,Object
+DatagramWriterGroupTransportDataType_Encoding_DefaultJson,21203,Object
+DatagramWriterGroupTransportDataType_Encoding_DefaultXml,21179,Object
+DatagramWriterGroupTransportType,21133,ObjectType
+DataItemType,2365,VariableType
+DataSetFieldContentMask,15583,DataType
+DataSetFieldFlags,15904,DataType
+DataSetFolderType,14477,ObjectType
+DataSetMetaDataType,14523,DataType
+DataSetMetaDataType_Encoding_DefaultBinary,124,Object
+DataSetMetaDataType_Encoding_DefaultJson,15050,Object
+DataSetMetaDataType_Encoding_DefaultXml,14794,Object
+DataSetOrderingType,20408,DataType
+DataSetReaderDataType,15623,DataType
+DataSetReaderDataType_Encoding_DefaultBinary,15703,Object
+DataSetReaderDataType_Encoding_DefaultJson,16286,Object
+DataSetReaderDataType_Encoding_DefaultXml,16007,Object
+DataSetReaderMessageDataType,15629,DataType
+DataSetReaderMessageDataType_Encoding_DefaultBinary,15706,Object
+DataSetReaderMessageDataType_Encoding_DefaultJson,16288,Object
+DataSetReaderMessageDataType_Encoding_DefaultXml,16009,Object
+DataSetReaderMessageType,21104,ObjectType
+DataSetReaderTransportDataType,15628,DataType
+DataSetReaderTransportDataType_Encoding_DefaultBinary,15705,Object
+DataSetReaderTransportDataType_Encoding_DefaultJson,16287,Object
+DataSetReaderTransportDataType_Encoding_DefaultXml,16008,Object
+DataSetReaderTransportType,15319,ObjectType
+DataSetReaderType,15306,ObjectType
+DataSetToWriter,14936,ReferenceType
+DataSetWriterDataType,15597,DataType
+DataSetWriterDataType_Encoding_DefaultBinary,15682,Object
+DataSetWriterDataType_Encoding_DefaultJson,16156,Object
+DataSetWriterDataType_Encoding_DefaultXml,15955,Object
+DataSetWriterMessageDataType,15605,DataType
+DataSetWriterMessageDataType_Encoding_DefaultBinary,15688,Object
+DataSetWriterMessageDataType_Encoding_DefaultJson,16158,Object
+DataSetWriterMessageDataType_Encoding_DefaultXml,15987,Object
+DataSetWriterMessageType,21096,ObjectType
+DataSetWriterTransportDataType,15598,DataType
+DataSetWriterTransportDataType_Encoding_DefaultBinary,15683,Object
+DataSetWriterTransportDataType_Encoding_DefaultJson,16157,Object
+DataSetWriterTransportDataType_Encoding_DefaultXml,15956,Object
+DataSetWriterTransportType,15305,ObjectType
+DataSetWriterType,15298,ObjectType
+DataTypeAttributes,370,DataType
+DataTypeAttributes_Encoding_DefaultBinary,372,Object
+DataTypeAttributes_Encoding_DefaultJson,15161,Object
+DataTypeAttributes_Encoding_DefaultXml,371,Object
+DataTypeDefinition,97,DataType
+DataTypeDefinition_Encoding_DefaultBinary,121,Object
+DataTypeDefinition_Encoding_DefaultJson,15063,Object
+DataTypeDefinition_Encoding_DefaultXml,14797,Object
+DataTypeDescription,14525,DataType
+DataTypeDescription_Encoding_DefaultBinary,125,Object
+DataTypeDescription_Encoding_DefaultJson,15057,Object
+DataTypeDescription_Encoding_DefaultXml,14796,Object
+DataTypeDescriptionType,69,VariableType
+DataTypeDictionaryType,72,VariableType
+DataTypeEncodingType,76,ObjectType
+DataTypeNode,282,DataType
+DataTypeNode_Encoding_DefaultBinary,284,Object
+DataTypeNode_Encoding_DefaultJson,15079,Object
+DataTypeNode_Encoding_DefaultXml,283,Object
+DataTypeSchemaHeader,15534,DataType
+DataTypeSchemaHeader_Encoding_DefaultBinary,15676,Object
+DataTypeSchemaHeader_Encoding_DefaultJson,16151,Object
+DataTypeSchemaHeader_Encoding_DefaultXml,15950,Object
+DataTypesFolder,90,Object
+DataTypeSystemType,75,ObjectType
+DataValue,23,DataType
+Date,293,DataType
+DateString,12881,DataType
+DateTime,13,DataType
+DeadbandType,718,DataType
+Decimal,50,DataType
+DecimalDataType,17861,DataType
+DecimalDataType_Encoding_DefaultBinary,17863,Object
+DecimalDataType_Encoding_DefaultJson,15045,Object
+DecimalDataType_Encoding_DefaultXml,17862,Object
+DecimalString,12878,DataType
+DefaultBinary,3062,Object
+DefaultInstanceBrowseName,17605,Variable
+DefaultXml,3063,Object
+DeleteAtTimeDetails,689,DataType
+DeleteAtTimeDetails_Encoding_DefaultBinary,691,Object
+DeleteAtTimeDetails_Encoding_DefaultJson,15284,Object
+DeleteAtTimeDetails_Encoding_DefaultXml,690,Object
+DeleteEventDetails,692,DataType
+DeleteEventDetails_Encoding_DefaultBinary,694,Object
+DeleteEventDetails_Encoding_DefaultJson,15285,Object
+DeleteEventDetails_Encoding_DefaultXml,693,Object
+DeleteMonitoredItemsRequest,779,DataType
+DeleteMonitoredItemsRequest_Encoding_DefaultBinary,781,Object
+DeleteMonitoredItemsRequest_Encoding_DefaultJson,15335,Object
+DeleteMonitoredItemsRequest_Encoding_DefaultXml,780,Object
+DeleteMonitoredItemsResponse,782,DataType
+DeleteMonitoredItemsResponse_Encoding_DefaultBinary,784,Object
+DeleteMonitoredItemsResponse_Encoding_DefaultJson,15336,Object
+DeleteMonitoredItemsResponse_Encoding_DefaultXml,783,Object
+DeleteNodesItem,382,DataType
+DeleteNodesItem_Encoding_DefaultBinary,384,Object
+DeleteNodesItem_Encoding_DefaultJson,15172,Object
+DeleteNodesItem_Encoding_DefaultXml,383,Object
+DeleteNodesRequest,498,DataType
+DeleteNodesRequest_Encoding_DefaultBinary,500,Object
+DeleteNodesRequest_Encoding_DefaultJson,15173,Object
+DeleteNodesRequest_Encoding_DefaultXml,499,Object
+DeleteNodesResponse,501,DataType
+DeleteNodesResponse_Encoding_DefaultBinary,503,Object
+DeleteNodesResponse_Encoding_DefaultJson,15174,Object
+DeleteNodesResponse_Encoding_DefaultXml,502,Object
+DeleteRawModifiedDetails,686,DataType
+DeleteRawModifiedDetails_Encoding_DefaultBinary,688,Object
+DeleteRawModifiedDetails_Encoding_DefaultJson,15283,Object
+DeleteRawModifiedDetails_Encoding_DefaultXml,687,Object
+DeleteReferencesItem,385,DataType
+DeleteReferencesItem_Encoding_DefaultBinary,387,Object
+DeleteReferencesItem_Encoding_DefaultJson,15175,Object
+DeleteReferencesItem_Encoding_DefaultXml,386,Object
+DeleteReferencesRequest,504,DataType
+DeleteReferencesRequest_Encoding_DefaultBinary,506,Object
+DeleteReferencesRequest_Encoding_DefaultJson,15176,Object
+DeleteReferencesRequest_Encoding_DefaultXml,505,Object
+DeleteReferencesResponse,507,DataType
+DeleteReferencesResponse_Encoding_DefaultBinary,509,Object
+DeleteReferencesResponse_Encoding_DefaultJson,15177,Object
+DeleteReferencesResponse_Encoding_DefaultXml,508,Object
+DeleteSubscriptionsRequest,845,DataType
+DeleteSubscriptionsRequest_Encoding_DefaultBinary,847,Object
+DeleteSubscriptionsRequest_Encoding_DefaultJson,15359,Object
+DeleteSubscriptionsRequest_Encoding_DefaultXml,846,Object
+DeleteSubscriptionsResponse,848,DataType
+DeleteSubscriptionsResponse_Encoding_DefaultBinary,850,Object
+DeleteSubscriptionsResponse_Encoding_DefaultJson,15360,Object
+DeleteSubscriptionsResponse_Encoding_DefaultXml,849,Object
+DeviceFailureEventType,2131,ObjectType
+DiagnosticInfo,25,DataType
+DiagnosticsLevel,19723,DataType
+DialogConditionType,2830,ObjectType
+Dictionaries,17594,Object
+DictionaryEntryType,17589,ObjectType
+DictionaryFolderType,17591,ObjectType
+DiscoveryConfiguration,12890,DataType
+DiscoveryConfiguration_Encoding_DefaultBinary,12900,Object
+DiscoveryConfiguration_Encoding_DefaultJson,15105,Object
+DiscoveryConfiguration_Encoding_DefaultXml,12892,Object
+DiscrepancyAlarmType,17080,ObjectType
+DiscreteAlarmType,10523,ObjectType
+DiscreteItemType,2372,VariableType
+Double,11,DataType
+DoubleComplexNumberType,12172,DataType
+DoubleComplexNumberType_Encoding_DefaultBinary,12182,Object
+DoubleComplexNumberType_Encoding_DefaultJson,15378,Object
+DoubleComplexNumberType_Encoding_DefaultXml,12174,Object
+Duplex,24210,DataType
+Duration,290,DataType
+DurationString,12879,DataType
+EccApplicationCertificateType,23537,ObjectType
+EccBrainpoolP256r1ApplicationCertificateType,23540,ObjectType
+EccBrainpoolP384r1ApplicationCertificateType,23541,ObjectType
+EccCurve25519ApplicationCertificateType,23542,ObjectType
+EccCurve448ApplicationCertificateType,23543,ObjectType
+EccEncryptedSecret,17546,DataType
+EccNistP256ApplicationCertificateType,23538,ObjectType
+EccNistP384ApplicationCertificateType,23539,ObjectType
+ElementOperand,592,DataType
+ElementOperand_Encoding_DefaultBinary,594,Object
+ElementOperand_Encoding_DefaultJson,15207,Object
+ElementOperand_Encoding_DefaultXml,593,Object
+ElseGuardVariableType,15317,VariableType
+EndpointConfiguration,331,DataType
+EndpointConfiguration_Encoding_DefaultBinary,333,Object
+EndpointConfiguration_Encoding_DefaultJson,15199,Object
+EndpointConfiguration_Encoding_DefaultXml,332,Object
+EndpointDescription,312,DataType
+EndpointDescription_Encoding_DefaultBinary,314,Object
+EndpointDescription_Encoding_DefaultJson,15099,Object
+EndpointDescription_Encoding_DefaultXml,313,Object
+EndpointType,15528,DataType
+EndpointType_Encoding_DefaultBinary,15671,Object
+EndpointType_Encoding_DefaultJson,16150,Object
+EndpointType_Encoding_DefaultXml,15949,Object
+EndpointUrlListDataType,11943,DataType
+EndpointUrlListDataType_Encoding_DefaultBinary,11957,Object
+EndpointUrlListDataType_Encoding_DefaultJson,15363,Object
+EndpointUrlListDataType_Encoding_DefaultXml,11949,Object
+EngineeringUnits,11513,Variable
+EnumDefinition,100,DataType
+EnumDefinition_Encoding_DefaultBinary,123,Object
+EnumDefinition_Encoding_DefaultJson,15067,Object
+EnumDefinition_Encoding_DefaultXml,14799,Object
+EnumDescription,15488,DataType
+EnumDescription_Encoding_DefaultBinary,127,Object
+EnumDescription_Encoding_DefaultJson,15059,Object
+EnumDescription_Encoding_DefaultXml,15590,Object
+Enumeration,29,DataType
+EnumField,102,DataType
+EnumField_Encoding_DefaultBinary,14845,Object
+EnumField_Encoding_DefaultJson,15083,Object
+EnumField_Encoding_DefaultXml,14801,Object
+EnumStrings,11432,Variable
+EnumValues,3071,Variable
+EnumValueType,7594,DataType
+EnumValueType_Encoding_DefaultBinary,8251,Object
+EnumValueType_Encoding_DefaultJson,15082,Object
+EnumValueType_Encoding_DefaultXml,7616,Object
+EphemeralKeyType,17548,DataType
+EphemeralKeyType_Encoding_DefaultBinary,17549,Object
+EphemeralKeyType_Encoding_DefaultJson,17557,Object
+EphemeralKeyType_Encoding_DefaultXml,17553,Object
+EUInformation,887,DataType
+EUInformation_Encoding_DefaultBinary,889,Object
+EUInformation_Encoding_DefaultJson,15376,Object
+EUInformation_Encoding_DefaultXml,888,Object
+EventFieldList,917,DataType
+EventFieldList_Encoding_DefaultBinary,919,Object
+EventFieldList_Encoding_DefaultJson,15348,Object
+EventFieldList_Encoding_DefaultXml,918,Object
+EventFilter,725,DataType
+EventFilter_Encoding_DefaultBinary,727,Object
+EventFilter_Encoding_DefaultJson,15295,Object
+EventFilter_Encoding_DefaultXml,726,Object
+EventFilterResult,734,DataType
+EventFilterResult_Encoding_DefaultBinary,736,Object
+EventFilterResult_Encoding_DefaultJson,15314,Object
+EventFilterResult_Encoding_DefaultXml,735,Object
+EventNotificationList,914,DataType
+EventNotificationList_Encoding_DefaultBinary,916,Object
+EventNotificationList_Encoding_DefaultJson,15347,Object
+EventNotificationList_Encoding_DefaultXml,915,Object
+EventNotifierType,15033,DataType
+EventQueueOverflowEventType,3035,ObjectType
+EventTypesFolder,3048,Object
+ExceptionDeviationFormat,890,DataType
+ExclusiveDeviationAlarmType,9764,ObjectType
+ExclusiveLevelAlarmType,9482,ObjectType
+ExclusiveLimitAlarmType,9341,ObjectType
+ExclusiveLimitStateMachineType,9318,ObjectType
+ExclusiveRateOfChangeAlarmType,9623,ObjectType
+ExpandedNodeId,18,DataType
+ExpressionGuardVariableType,15128,VariableType
+ExtensionFieldsType,15489,ObjectType
+FieldMetaData,14524,DataType
+FieldMetaData_Encoding_DefaultBinary,14839,Object
+FieldMetaData_Encoding_DefaultJson,15051,Object
+FieldMetaData_Encoding_DefaultXml,14795,Object
+FieldTargetDataType,14744,DataType
+FieldTargetDataType_Encoding_DefaultBinary,14848,Object
+FieldTargetDataType_Encoding_DefaultJson,15061,Object
+FieldTargetDataType_Encoding_DefaultXml,14804,Object
+FileDirectoryType,13353,ObjectType
+FileSystem,16314,Object
+FileTransferStateMachineType,15803,ObjectType
+FileType,11575,ObjectType
+FilterOperand,589,DataType
+FilterOperand_Encoding_DefaultBinary,591,Object
+FilterOperand_Encoding_DefaultJson,15206,Object
+FilterOperand_Encoding_DefaultXml,590,Object
+FilterOperator,576,DataType
+FindServersOnNetworkRequest,12190,DataType
+FindServersOnNetworkRequest_Encoding_DefaultBinary,12208,Object
+FindServersOnNetworkRequest_Encoding_DefaultJson,15096,Object
+FindServersOnNetworkRequest_Encoding_DefaultXml,12196,Object
+FindServersOnNetworkResponse,12191,DataType
+FindServersOnNetworkResponse_Encoding_DefaultBinary,12209,Object
+FindServersOnNetworkResponse_Encoding_DefaultJson,15097,Object
+FindServersOnNetworkResponse_Encoding_DefaultXml,12197,Object
+FindServersRequest,420,DataType
+FindServersRequest_Encoding_DefaultBinary,422,Object
+FindServersRequest_Encoding_DefaultJson,15093,Object
+FindServersRequest_Encoding_DefaultXml,421,Object
+FindServersResponse,423,DataType
+FindServersResponse_Encoding_DefaultBinary,425,Object
+FindServersResponse_Encoding_DefaultJson,15094,Object
+FindServersResponse_Encoding_DefaultXml,424,Object
+FiniteStateMachineType,2771,ObjectType
+FiniteStateVariableType,2760,VariableType
+FiniteTransitionVariableType,2767,VariableType
+Float,10,DataType
+FolderType,61,ObjectType
+Frame,18813,DataType
+Frame_Encoding_DefaultBinary,18822,Object
+Frame_Encoding_DefaultJson,19071,Object
+Frame_Encoding_DefaultXml,18858,Object
+FrameType,18786,VariableType
+FromState,51,ReferenceType
+GeneralModelChangeEventType,2133,ObjectType
+GeneratesEvent,41,ReferenceType
+GenericAttributes,17607,DataType
+GenericAttributes_Encoding_DefaultBinary,17611,Object
+GenericAttributes_Encoding_DefaultJson,15164,Object
+GenericAttributes_Encoding_DefaultXml,17609,Object
+GenericAttributeValue,17606,DataType
+GenericAttributeValue_Encoding_DefaultBinary,17610,Object
+GenericAttributeValue_Encoding_DefaultJson,15163,Object
+GenericAttributeValue_Encoding_DefaultXml,17608,Object
+GetEndpointsRequest,426,DataType
+GetEndpointsRequest_Encoding_DefaultBinary,428,Object
+GetEndpointsRequest_Encoding_DefaultJson,15100,Object
+GetEndpointsRequest_Encoding_DefaultXml,427,Object
+GetEndpointsResponse,429,DataType
+GetEndpointsResponse_Encoding_DefaultBinary,431,Object
+GetEndpointsResponse_Encoding_DefaultJson,15101,Object
+GetEndpointsResponse_Encoding_DefaultXml,430,Object
+GuardVariableType,15113,VariableType
+Guid,14,DataType
+HAConfiguration,11202,Object
+HasAddIn,17604,ReferenceType
+HasAlarmSuppressionGroup,16361,ReferenceType
+HasArgumentDescription,129,ReferenceType
+HasCause,53,ReferenceType
+HasChild,34,ReferenceType
+HasComponent,47,ReferenceType
+HasCondition,9006,ReferenceType
+HasDataSetReader,15297,ReferenceType
+HasDataSetWriter,15296,ReferenceType
+HasDescription,39,ReferenceType
+HasDictionaryEntry,17597,ReferenceType
+HasEffect,54,ReferenceType
+HasEffectDisable,17276,ReferenceType
+HasEffectEnable,17983,ReferenceType
+HasEffectSuppressed,17984,ReferenceType
+HasEffectUnsuppressed,17985,ReferenceType
+HasEncoding,38,ReferenceType
+HasEventSource,36,ReferenceType
+HasFalseSubState,9005,ReferenceType
+HasGuard,15112,ReferenceType
+HasHistoricalConfiguration,56,ReferenceType
+HasInterface,17603,ReferenceType
+HasModellingRule,37,ReferenceType
+HasNotifier,48,ReferenceType
+HasOptionalInputArgumentDescription,131,ReferenceType
+HasOrderedComponent,49,ReferenceType
+HasProperty,46,ReferenceType
+HasPubSubConnection,14476,ReferenceType
+HasReaderGroup,18805,ReferenceType
+HasSubStateMachine,117,ReferenceType
+HasSubtype,45,ReferenceType
+HasTrueSubState,9004,ReferenceType
+HasTypeDefinition,40,ReferenceType
+HasWriterGroup,18804,ReferenceType
+HierarchicalReferences,33,ReferenceType
+HighlyManagedAlarmConditionClassType,17219,ObjectType
+HistoricalDataConfigurationType,2318,ObjectType
+HistoricalEventFilter,11215,Variable
+HistoryData,656,DataType
+HistoryData_Encoding_DefaultBinary,658,Object
+HistoryData_Encoding_DefaultJson,15270,Object
+HistoryData_Encoding_DefaultXml,657,Object
+HistoryEvent,659,DataType
+HistoryEvent_Encoding_DefaultBinary,661,Object
+HistoryEvent_Encoding_DefaultJson,15273,Object
+HistoryEvent_Encoding_DefaultXml,660,Object
+HistoryEventFieldList,920,DataType
+HistoryEventFieldList_Encoding_DefaultBinary,922,Object
+HistoryEventFieldList_Encoding_DefaultJson,15349,Object
+HistoryEventFieldList_Encoding_DefaultXml,921,Object
+HistoryModifiedData,11217,DataType
+HistoryModifiedData_Encoding_DefaultBinary,11227,Object
+HistoryModifiedData_Encoding_DefaultJson,15272,Object
+HistoryModifiedData_Encoding_DefaultXml,11219,Object
+HistoryReadDetails,641,DataType
+HistoryReadDetails_Encoding_DefaultBinary,643,Object
+HistoryReadDetails_Encoding_DefaultJson,15261,Object
+HistoryReadDetails_Encoding_DefaultXml,642,Object
+HistoryReadRequest,662,DataType
+HistoryReadRequest_Encoding_DefaultBinary,664,Object
+HistoryReadRequest_Encoding_DefaultJson,15274,Object
+HistoryReadRequest_Encoding_DefaultXml,663,Object
+HistoryReadResponse,665,DataType
+HistoryReadResponse_Encoding_DefaultBinary,667,Object
+HistoryReadResponse_Encoding_DefaultJson,15275,Object
+HistoryReadResponse_Encoding_DefaultXml,666,Object
+HistoryReadResult,638,DataType
+HistoryReadResult_Encoding_DefaultBinary,640,Object
+HistoryReadResult_Encoding_DefaultJson,15260,Object
+HistoryReadResult_Encoding_DefaultXml,639,Object
+HistoryReadValueId,635,DataType
+HistoryReadValueId_Encoding_DefaultBinary,637,Object
+HistoryReadValueId_Encoding_DefaultJson,15259,Object
+HistoryReadValueId_Encoding_DefaultXml,636,Object
+HistoryServerCapabilities,11192,Object
+HistoryServerCapabilitiesType,2330,ObjectType
+HistoryUpdateDetails,677,DataType
+HistoryUpdateDetails_Encoding_DefaultBinary,679,Object
+HistoryUpdateDetails_Encoding_DefaultJson,15279,Object
+HistoryUpdateDetails_Encoding_DefaultXml,678,Object
+HistoryUpdateRequest,698,DataType
+HistoryUpdateRequest_Encoding_DefaultBinary,700,Object
+HistoryUpdateRequest_Encoding_DefaultJson,15287,Object
+HistoryUpdateRequest_Encoding_DefaultXml,699,Object
+HistoryUpdateResponse,701,DataType
+HistoryUpdateResponse_Encoding_DefaultBinary,703,Object
+HistoryUpdateResponse_Encoding_DefaultJson,15288,Object
+HistoryUpdateResponse_Encoding_DefaultXml,702,Object
+HistoryUpdateResult,695,DataType
+HistoryUpdateResult_Encoding_DefaultBinary,697,Object
+HistoryUpdateResult_Encoding_DefaultJson,15286,Object
+HistoryUpdateResult_Encoding_DefaultXml,696,Object
+HistoryUpdateType,11234,DataType
+HttpsCertificateType,12558,ObjectType
+IBaseEthernetCapabilitiesType,24167,ObjectType
+Icon,3067,Variable
+IdentityCriteriaType,15632,DataType
+IdentityMappingRuleType,15634,DataType
+IdentityMappingRuleType_Encoding_DefaultBinary,15736,Object
+IdentityMappingRuleType_Encoding_DefaultJson,15042,Object
+IdentityMappingRuleType_Encoding_DefaultXml,15728,Object
+IdType,256,DataType
+IIeeeAutoNegotiationStatusType,24233,ObjectType
+IIeeeBaseEthernetPortType,24158,ObjectType
+IIeeeBaseTsnStatusStreamType,24183,ObjectType
+IIeeeBaseTsnStreamType,24173,ObjectType
+IIeeeBaseTsnTrafficSpecificationType,24179,ObjectType
+IIeeeTsnInterfaceConfigurationListenerType,24195,ObjectType
+IIeeeTsnInterfaceConfigurationTalkerType,24191,ObjectType
+IIeeeTsnInterfaceConfigurationType,24188,ObjectType
+IIeeeTsnMacAddressType,24199,ObjectType
+IIeeeTsnVlanTagType,24202,ObjectType
+IIetfBaseNetworkInterfaceType,24148,ObjectType
+Image,30,DataType
+ImageBMP,2000,DataType
+ImageGIF,2001,DataType
+ImageItemType,12047,VariableType
+ImageJPG,2002,DataType
+ImagePNG,2003,DataType
+Index,17588,DataType
+InitialStateType,2309,ObjectType
+InputArguments,3072,Variable
+InstanceNode,11879,DataType
+InstanceNode_Encoding_DefaultBinary,11889,Object
+InstanceNode_Encoding_DefaultJson,15069,Object
+InstanceNode_Encoding_DefaultXml,11887,Object
+InstrumentDiagnosticAlarmType,18347,ObjectType
+Int16,4,DataType
+Int32,6,DataType
+Int64,8,DataType
+Integer,27,DataType
+IntegerId,288,DataType
+InterfaceAdminStatus,24212,DataType
+InterfaceOperStatus,24214,DataType
+InterfaceTypes,17708,Object
+IOrderedObjectType,23513,ObjectType
+IPriorityMappingEntryType,24205,ObjectType
+IrdiDictionaryEntryType,17598,ObjectType
+ISrClassType,24169,ObjectType
+IssuedIdentityToken,938,DataType
+IssuedIdentityToken_Encoding_DefaultBinary,940,Object
+IssuedIdentityToken_Encoding_DefaultJson,15144,Object
+IssuedIdentityToken_Encoding_DefaultXml,939,Object
+JsonDataSetMessageContentMask,15658,DataType
+JsonDataSetReaderMessageDataType,15665,DataType
+JsonDataSetReaderMessageDataType_Encoding_DefaultBinary,15725,Object
+JsonDataSetReaderMessageDataType_Encoding_DefaultJson,16404,Object
+JsonDataSetReaderMessageDataType_Encoding_DefaultXml,16019,Object
+JsonDataSetReaderMessageType,21130,ObjectType
+JsonDataSetWriterMessageDataType,15664,DataType
+JsonDataSetWriterMessageDataType_Encoding_DefaultBinary,15724,Object
+JsonDataSetWriterMessageDataType_Encoding_DefaultJson,16394,Object
+JsonDataSetWriterMessageDataType_Encoding_DefaultXml,16018,Object
+JsonDataSetWriterMessageType,21128,ObjectType
+JsonNetworkMessageContentMask,15654,DataType
+JsonWriterGroupMessageDataType,15657,DataType
+JsonWriterGroupMessageDataType_Encoding_DefaultBinary,15719,Object
+JsonWriterGroupMessageDataType_Encoding_DefaultJson,16393,Object
+JsonWriterGroupMessageDataType_Encoding_DefaultXml,16017,Object
+JsonWriterGroupMessageType,21126,ObjectType
+KeyCredentialAuditEventType,18011,ObjectType
+KeyCredentialConfiguration,18155,Object
+KeyCredentialConfigurationFolderType,17496,ObjectType
+KeyCredentialConfigurationType,18001,ObjectType
+KeyCredentialDeletedAuditEventType,18047,ObjectType
+KeyCredentialUpdatedAuditEventType,18029,ObjectType
+KeyValuePair,14533,DataType
+KeyValuePair_Encoding_DefaultBinary,14846,Object
+KeyValuePair_Encoding_DefaultJson,15041,Object
+KeyValuePair_Encoding_DefaultXml,14802,Object
+LimitAlarmType,2955,ObjectType
+ListenerStreams,24232,Object
+LiteralOperand,595,DataType
+LiteralOperand_Encoding_DefaultBinary,597,Object
+LiteralOperand_Encoding_DefaultJson,15208,Object
+LiteralOperand_Encoding_DefaultXml,596,Object
+LocaleId,295,DataType
+LocalizedText,21,DataType
+LocalTime,3069,Variable
+MaintenanceConditionClassType,11165,ObjectType
+MappingTables,24228,Object
+MaxArrayLength,11512,Variable
+MaxByteStringLength,12908,Variable
+MaxCharacters,15002,Variable
+MaxStringLength,11498,Variable
+MdnsDiscoveryConfiguration,12891,DataType
+MdnsDiscoveryConfiguration_Encoding_DefaultBinary,12901,Object
+MdnsDiscoveryConfiguration_Encoding_DefaultJson,15106,Object
+MdnsDiscoveryConfiguration_Encoding_DefaultXml,12893,Object
+MessageSecurityMode,302,DataType
+MethodAttributes,358,DataType
+MethodAttributes_Encoding_DefaultBinary,360,Object
+MethodAttributes_Encoding_DefaultJson,15157,Object
+MethodAttributes_Encoding_DefaultXml,359,Object
+MethodNode,276,DataType
+MethodNode_Encoding_DefaultBinary,278,Object
+MethodNode_Encoding_DefaultJson,15077,Object
+MethodNode_Encoding_DefaultXml,277,Object
+ModelChangeStructureDataType,877,DataType
+ModelChangeStructureDataType_Encoding_DefaultBinary,879,Object
+ModelChangeStructureDataType_Encoding_DefaultJson,15373,Object
+ModelChangeStructureDataType_Encoding_DefaultXml,878,Object
+ModelChangeStructureVerbMask,11941,DataType
+ModellingRule_ExposesItsArray,83,Object
+ModellingRule_Mandatory,78,Object
+ModellingRule_MandatoryPlaceholder,11510,Object
+ModellingRule_Optional,80,Object
+ModellingRule_OptionalPlaceholder,11508,Object
+ModellingRuleType,77,ObjectType
+ModificationInfo,11216,DataType
+ModificationInfo_Encoding_DefaultBinary,11226,Object
+ModificationInfo_Encoding_DefaultJson,15271,Object
+ModificationInfo_Encoding_DefaultXml,11218,Object
+ModifyMonitoredItemsRequest,761,DataType
+ModifyMonitoredItemsRequest_Encoding_DefaultBinary,763,Object
+ModifyMonitoredItemsRequest_Encoding_DefaultJson,15327,Object
+ModifyMonitoredItemsRequest_Encoding_DefaultXml,762,Object
+ModifyMonitoredItemsResponse,764,DataType
+ModifyMonitoredItemsResponse_Encoding_DefaultBinary,766,Object
+ModifyMonitoredItemsResponse_Encoding_DefaultJson,15328,Object
+ModifyMonitoredItemsResponse_Encoding_DefaultXml,765,Object
+ModifySubscriptionRequest,791,DataType
+ModifySubscriptionRequest_Encoding_DefaultBinary,793,Object
+ModifySubscriptionRequest_Encoding_DefaultJson,15339,Object
+ModifySubscriptionRequest_Encoding_DefaultXml,792,Object
+ModifySubscriptionResponse,794,DataType
+ModifySubscriptionResponse_Encoding_DefaultBinary,796,Object
+ModifySubscriptionResponse_Encoding_DefaultJson,15340,Object
+ModifySubscriptionResponse_Encoding_DefaultXml,795,Object
+MonitoredItemCreateRequest,743,DataType
+MonitoredItemCreateRequest_Encoding_DefaultBinary,745,Object
+MonitoredItemCreateRequest_Encoding_DefaultJson,15321,Object
+MonitoredItemCreateRequest_Encoding_DefaultXml,744,Object
+MonitoredItemCreateResult,746,DataType
+MonitoredItemCreateResult_Encoding_DefaultBinary,748,Object
+MonitoredItemCreateResult_Encoding_DefaultJson,15322,Object
+MonitoredItemCreateResult_Encoding_DefaultXml,747,Object
+MonitoredItemModifyRequest,755,DataType
+MonitoredItemModifyRequest_Encoding_DefaultBinary,757,Object
+MonitoredItemModifyRequest_Encoding_DefaultJson,15325,Object
+MonitoredItemModifyRequest_Encoding_DefaultXml,756,Object
+MonitoredItemModifyResult,758,DataType
+MonitoredItemModifyResult_Encoding_DefaultBinary,760,Object
+MonitoredItemModifyResult_Encoding_DefaultJson,15326,Object
+MonitoredItemModifyResult_Encoding_DefaultXml,759,Object
+MonitoredItemNotification,806,DataType
+MonitoredItemNotification_Encoding_DefaultBinary,808,Object
+MonitoredItemNotification_Encoding_DefaultJson,15346,Object
+MonitoredItemNotification_Encoding_DefaultXml,807,Object
+MonitoringFilter,719,DataType
+MonitoringFilter_Encoding_DefaultBinary,721,Object
+MonitoringFilter_Encoding_DefaultJson,15293,Object
+MonitoringFilter_Encoding_DefaultXml,720,Object
+MonitoringFilterResult,731,DataType
+MonitoringFilterResult_Encoding_DefaultBinary,733,Object
+MonitoringFilterResult_Encoding_DefaultJson,15313,Object
+MonitoringFilterResult_Encoding_DefaultXml,732,Object
+MonitoringMode,716,DataType
+MonitoringParameters,740,DataType
+MonitoringParameters_Encoding_DefaultBinary,742,Object
+MonitoringParameters_Encoding_DefaultJson,15320,Object
+MonitoringParameters_Encoding_DefaultXml,741,Object
+MultiStateDictionaryEntryDiscreteBaseType,19077,VariableType
+MultiStateDictionaryEntryDiscreteType,19084,VariableType
+MultiStateDiscreteType,2376,VariableType
+MultiStateValueDiscreteType,11238,VariableType
+NamespaceMetadataType,11616,ObjectType
+NamespacesType,11645,ObjectType
+NamingRuleType,120,DataType
+NDimensionArrayItemType,12068,VariableType
+NegotiationStatus,24216,DataType
+NetworkAddressDataType,15502,DataType
+NetworkAddressDataType_Encoding_DefaultBinary,21151,Object
+NetworkAddressDataType_Encoding_DefaultJson,21199,Object
+NetworkAddressDataType_Encoding_DefaultXml,21175,Object
+NetworkAddressType,21145,ObjectType
+NetworkAddressUrlDataType,15510,DataType
+NetworkAddressUrlDataType_Encoding_DefaultBinary,21152,Object
+NetworkAddressUrlDataType_Encoding_DefaultJson,21200,Object
+NetworkAddressUrlDataType_Encoding_DefaultXml,21176,Object
+NetworkAddressUrlType,21147,ObjectType
+NetworkGroupDataType,11944,DataType
+NetworkGroupDataType_Encoding_DefaultBinary,11958,Object
+NetworkGroupDataType_Encoding_DefaultJson,15364,Object
+NetworkGroupDataType_Encoding_DefaultXml,11950,Object
+NetworkInterfaces,24229,Object
+Node,258,DataType
+Node_Encoding_DefaultBinary,260,Object
+Node_Encoding_DefaultJson,15068,Object
+Node_Encoding_DefaultXml,259,Object
+NodeAttributes,349,DataType
+NodeAttributes_Encoding_DefaultBinary,351,Object
+NodeAttributes_Encoding_DefaultJson,15151,Object
+NodeAttributes_Encoding_DefaultXml,350,Object
+NodeAttributesMask,348,DataType
+NodeClass,257,DataType
+NodeId,17,DataType
+NodeReference,580,DataType
+NodeReference_Encoding_DefaultBinary,582,Object
+NodeReference_Encoding_DefaultJson,15203,Object
+NodeReference_Encoding_DefaultXml,581,Object
+NodeTypeDescription,573,DataType
+NodeTypeDescription_Encoding_DefaultBinary,575,Object
+NodeTypeDescription_Encoding_DefaultJson,15201,Object
+NodeTypeDescription_Encoding_DefaultXml,574,Object
+NodeVersion,3068,Variable
+NonExclusiveDeviationAlarmType,10368,ObjectType
+NonExclusiveLevelAlarmType,10060,ObjectType
+NonExclusiveLimitAlarmType,9906,ObjectType
+NonExclusiveRateOfChangeAlarmType,10214,ObjectType
+NonHierarchicalReferences,32,ReferenceType
+NonTransparentNetworkRedundancyType,11945,ObjectType
+NonTransparentRedundancyType,2039,ObjectType
+NormalizedString,12877,DataType
+NotificationData,945,DataType
+NotificationData_Encoding_DefaultBinary,947,Object
+NotificationData_Encoding_DefaultJson,15344,Object
+NotificationData_Encoding_DefaultXml,946,Object
+NotificationMessage,803,DataType
+NotificationMessage_Encoding_DefaultBinary,805,Object
+NotificationMessage_Encoding_DefaultJson,15343,Object
+NotificationMessage_Encoding_DefaultXml,804,Object
+Number,26,DataType
+NumericRange,291,DataType
+ObjectAttributes,352,DataType
+ObjectAttributes_Encoding_DefaultBinary,354,Object
+ObjectAttributes_Encoding_DefaultJson,15152,Object
+ObjectAttributes_Encoding_DefaultXml,353,Object
+ObjectNode,261,DataType
+ObjectNode_Encoding_DefaultBinary,263,Object
+ObjectNode_Encoding_DefaultJson,15071,Object
+ObjectNode_Encoding_DefaultXml,262,Object
+ObjectsFolder,85,Object
+ObjectTypeAttributes,361,DataType
+ObjectTypeAttributes_Encoding_DefaultBinary,363,Object
+ObjectTypeAttributes_Encoding_DefaultJson,15158,Object
+ObjectTypeAttributes_Encoding_DefaultXml,362,Object
+ObjectTypeNode,264,DataType
+ObjectTypeNode_Encoding_DefaultBinary,266,Object
+ObjectTypeNode_Encoding_DefaultJson,15073,Object
+ObjectTypeNode_Encoding_DefaultXml,265,Object
+ObjectTypesFolder,88,Object
+OffNormalAlarmType,10637,ObjectType
+OPCBinarySchema_TypeSystem,93,Object
+OpcUa_BinarySchema,7617,Variable
+OpcUa_XmlSchema,8252,Variable
+OPCUANamespaceMetadata,15957,Object
+OpenFileMode,11939,DataType
+OpenSecureChannelRequest,444,DataType
+OpenSecureChannelRequest_Encoding_DefaultBinary,446,Object
+OpenSecureChannelRequest_Encoding_DefaultJson,15132,Object
+OpenSecureChannelRequest_Encoding_DefaultXml,445,Object
+OpenSecureChannelResponse,447,DataType
+OpenSecureChannelResponse_Encoding_DefaultBinary,449,Object
+OpenSecureChannelResponse_Encoding_DefaultJson,15133,Object
+OpenSecureChannelResponse_Encoding_DefaultXml,448,Object
+OperationLimitsType,11564,ObjectType
+OptionSet,12755,DataType
+OptionSet_Encoding_DefaultBinary,12765,Object
+OptionSet_Encoding_DefaultJson,15084,Object
+OptionSet_Encoding_DefaultXml,12757,Object
+OptionSetType,11487,VariableType
+OptionSetValues,12745,Variable
+OrderedListType,23518,ObjectType
+Organizes,35,ReferenceType
+Orientation,18811,DataType
+Orientation_Encoding_DefaultBinary,18820,Object
+Orientation_Encoding_DefaultJson,19069,Object
+Orientation_Encoding_DefaultXml,18856,Object
+OrientationType,18779,VariableType
+OutputArguments,3073,Variable
+OverrideValueHandling,15874,DataType
+ParsingResult,610,DataType
+ParsingResult_Encoding_DefaultBinary,612,Object
+ParsingResult_Encoding_DefaultJson,15236,Object
+ParsingResult_Encoding_DefaultXml,611,Object
+PerformUpdateType,11293,DataType
+PermissionType,94,DataType
+ProcessConditionClassType,11164,ObjectType
+ProgramDiagnostic2DataType,24033,DataType
+ProgramDiagnostic2DataType_Encoding_DefaultBinary,24034,Object
+ProgramDiagnostic2DataType_Encoding_DefaultJson,24042,Object
+ProgramDiagnostic2DataType_Encoding_DefaultXml,24038,Object
+ProgramDiagnostic2Type,15383,VariableType
+ProgramDiagnosticDataType,894,DataType
+ProgramDiagnosticDataType_Encoding_DefaultBinary,896,Object
+ProgramDiagnosticDataType_Encoding_DefaultJson,15381,Object
+ProgramDiagnosticDataType_Encoding_DefaultXml,895,Object
+ProgramDiagnosticType,2380,VariableType
+ProgramStateMachineType,2391,ObjectType
+ProgramTransitionAuditEventType,3806,ObjectType
+ProgramTransitionEventType,2378,ObjectType
+ProgressEventType,11436,ObjectType
+PropertyType,68,VariableType
+PublishedDataItemsDataType,15581,DataType
+PublishedDataItemsDataType_Encoding_DefaultBinary,15679,Object
+PublishedDataItemsDataType_Encoding_DefaultJson,16154,Object
+PublishedDataItemsDataType_Encoding_DefaultXml,15953,Object
+PublishedDataItemsType,14534,ObjectType
+PublishedDataSetDataType,15578,DataType
+PublishedDataSetDataType_Encoding_DefaultBinary,15677,Object
+PublishedDataSetDataType_Encoding_DefaultJson,16152,Object
+PublishedDataSetDataType_Encoding_DefaultXml,15951,Object
+PublishedDataSetSourceDataType,15580,DataType
+PublishedDataSetSourceDataType_Encoding_DefaultBinary,15678,Object
+PublishedDataSetSourceDataType_Encoding_DefaultJson,16153,Object
+PublishedDataSetSourceDataType_Encoding_DefaultXml,15952,Object
+PublishedDataSetType,14509,ObjectType
+PublishedEventsDataType,15582,DataType
+PublishedEventsDataType_Encoding_DefaultBinary,15681,Object
+PublishedEventsDataType_Encoding_DefaultJson,16155,Object
+PublishedEventsDataType_Encoding_DefaultXml,15954,Object
+PublishedEventsType,14572,ObjectType
+PublishedVariableDataType,14273,DataType
+PublishedVariableDataType_Encoding_DefaultBinary,14323,Object
+PublishedVariableDataType_Encoding_DefaultJson,15060,Object
+PublishedVariableDataType_Encoding_DefaultXml,14319,Object
+PublishRequest,824,DataType
+PublishRequest_Encoding_DefaultBinary,826,Object
+PublishRequest_Encoding_DefaultJson,15352,Object
+PublishRequest_Encoding_DefaultXml,825,Object
+PublishResponse,827,DataType
+PublishResponse_Encoding_DefaultBinary,829,Object
+PublishResponse_Encoding_DefaultJson,15353,Object
+PublishResponse_Encoding_DefaultXml,828,Object
+PublishSubscribe,14443,Object
+PublishSubscribeType,14416,ObjectType
+PubSubCommunicationFailureEventType,15563,ObjectType
+PubSubConfigurationDataType,15530,DataType
+PubSubConfigurationDataType_Encoding_DefaultBinary,21154,Object
+PubSubConfigurationDataType_Encoding_DefaultJson,21202,Object
+PubSubConfigurationDataType_Encoding_DefaultXml,21178,Object
+PubSubConnectionDataType,15617,DataType
+PubSubConnectionDataType_Encoding_DefaultBinary,15694,Object
+PubSubConnectionDataType_Encoding_DefaultJson,16281,Object
+PubSubConnectionDataType_Encoding_DefaultXml,15992,Object
+PubSubConnectionType,14209,ObjectType
+PubSubDiagnosticsConnectionType,19786,ObjectType
+PubSubDiagnosticsCounterClassification,19730,DataType
+PubSubDiagnosticsCounterType,19725,VariableType
+PubSubDiagnosticsDataSetReaderType,20027,ObjectType
+PubSubDiagnosticsDataSetWriterType,19968,ObjectType
+PubSubDiagnosticsReaderGroupType,19903,ObjectType
+PubSubDiagnosticsRootType,19732,ObjectType
+PubSubDiagnosticsType,19677,ObjectType
+PubSubDiagnosticsWriterGroupType,19834,ObjectType
+PubSubGroupDataType,15609,DataType
+PubSubGroupDataType_Encoding_DefaultBinary,15689,Object
+PubSubGroupDataType_Encoding_DefaultJson,16159,Object
+PubSubGroupDataType_Encoding_DefaultXml,15988,Object
+PubSubGroupType,14232,ObjectType
+PubSubKeyServiceType,15906,ObjectType
+PubSubState,14647,DataType
+PubSubStatusEventType,15535,ObjectType
+PubSubStatusType,14643,ObjectType
+PubSubTransportLimitsExceedEventType,15548,ObjectType
+QualifiedName,20,DataType
+QueryDataDescription,570,DataType
+QueryDataDescription_Encoding_DefaultBinary,572,Object
+QueryDataDescription_Encoding_DefaultJson,15200,Object
+QueryDataDescription_Encoding_DefaultXml,571,Object
+QueryDataSet,577,DataType
+QueryDataSet_Encoding_DefaultBinary,579,Object
+QueryDataSet_Encoding_DefaultJson,15202,Object
+QueryDataSet_Encoding_DefaultXml,578,Object
+QueryFirstRequest,613,DataType
+QueryFirstRequest_Encoding_DefaultBinary,615,Object
+QueryFirstRequest_Encoding_DefaultJson,15244,Object
+QueryFirstRequest_Encoding_DefaultXml,614,Object
+QueryFirstResponse,616,DataType
+QueryFirstResponse_Encoding_DefaultBinary,618,Object
+QueryFirstResponse_Encoding_DefaultJson,15252,Object
+QueryFirstResponse_Encoding_DefaultXml,617,Object
+QueryNextRequest,619,DataType
+QueryNextRequest_Encoding_DefaultBinary,621,Object
+QueryNextRequest_Encoding_DefaultJson,15254,Object
+QueryNextRequest_Encoding_DefaultXml,620,Object
+QueryNextResponse,622,DataType
+QueryNextResponse_Encoding_DefaultBinary,624,Object
+QueryNextResponse_Encoding_DefaultJson,15255,Object
+QueryNextResponse_Encoding_DefaultXml,623,Object
+Range,884,DataType
+Range_Encoding_DefaultBinary,886,Object
+Range_Encoding_DefaultJson,15375,Object
+Range_Encoding_DefaultXml,885,Object
+RationalNumber,18806,DataType
+RationalNumber_Encoding_DefaultBinary,18815,Object
+RationalNumber_Encoding_DefaultJson,19064,Object
+RationalNumber_Encoding_DefaultXml,18851,Object
+RationalNumberType,17709,VariableType
+ReadAnnotationDataDetails,23497,DataType
+ReadAnnotationDataDetails_Encoding_DefaultBinary,23500,Object
+ReadAnnotationDataDetails_Encoding_DefaultJson,23512,Object
+ReadAnnotationDataDetails_Encoding_DefaultXml,23506,Object
+ReadAtTimeDetails,653,DataType
+ReadAtTimeDetails_Encoding_DefaultBinary,655,Object
+ReadAtTimeDetails_Encoding_DefaultJson,15269,Object
+ReadAtTimeDetails_Encoding_DefaultXml,654,Object
+ReaderGroupDataType,15520,DataType
+ReaderGroupDataType_Encoding_DefaultBinary,21153,Object
+ReaderGroupDataType_Encoding_DefaultJson,21201,Object
+ReaderGroupDataType_Encoding_DefaultXml,21177,Object
+ReaderGroupMessageDataType,15622,DataType
+ReaderGroupMessageDataType_Encoding_DefaultBinary,15702,Object
+ReaderGroupMessageDataType_Encoding_DefaultJson,16285,Object
+ReaderGroupMessageDataType_Encoding_DefaultXml,15996,Object
+ReaderGroupMessageType,21091,ObjectType
+ReaderGroupTransportDataType,15621,DataType
+ReaderGroupTransportDataType_Encoding_DefaultBinary,15701,Object
+ReaderGroupTransportDataType_Encoding_DefaultJson,16284,Object
+ReaderGroupTransportDataType_Encoding_DefaultXml,15995,Object
+ReaderGroupTransportType,21090,ObjectType
+ReaderGroupType,17999,ObjectType
+ReadEventDetails,644,DataType
+ReadEventDetails_Encoding_DefaultBinary,646,Object
+ReadEventDetails_Encoding_DefaultJson,15262,Object
+ReadEventDetails_Encoding_DefaultXml,645,Object
+ReadProcessedDetails,650,DataType
+ReadProcessedDetails_Encoding_DefaultBinary,652,Object
+ReadProcessedDetails_Encoding_DefaultJson,15264,Object
+ReadProcessedDetails_Encoding_DefaultXml,651,Object
+ReadRawModifiedDetails,647,DataType
+ReadRawModifiedDetails_Encoding_DefaultBinary,649,Object
+ReadRawModifiedDetails_Encoding_DefaultJson,15263,Object
+ReadRawModifiedDetails_Encoding_DefaultXml,648,Object
+ReadRequest,629,DataType
+ReadRequest_Encoding_DefaultBinary,631,Object
+ReadRequest_Encoding_DefaultJson,15257,Object
+ReadRequest_Encoding_DefaultXml,630,Object
+ReadResponse,632,DataType
+ReadResponse_Encoding_DefaultBinary,634,Object
+ReadResponse_Encoding_DefaultJson,15258,Object
+ReadResponse_Encoding_DefaultXml,633,Object
+ReadValueId,626,DataType
+ReadValueId_Encoding_DefaultBinary,628,Object
+ReadValueId_Encoding_DefaultJson,15256,Object
+ReadValueId_Encoding_DefaultXml,627,Object
+RedundancySupport,851,DataType
+RedundantServerDataType,853,DataType
+RedundantServerDataType_Encoding_DefaultBinary,855,Object
+RedundantServerDataType_Encoding_DefaultJson,15362,Object
+RedundantServerDataType_Encoding_DefaultXml,854,Object
+ReferenceDescription,518,DataType
+ReferenceDescription_Encoding_DefaultBinary,520,Object
+ReferenceDescription_Encoding_DefaultJson,15182,Object
+ReferenceDescription_Encoding_DefaultXml,519,Object
+ReferenceNode,285,DataType
+ReferenceNode_Encoding_DefaultBinary,287,Object
+ReferenceNode_Encoding_DefaultJson,15080,Object
+ReferenceNode_Encoding_DefaultXml,286,Object
+References,31,ReferenceType
+ReferenceTypeAttributes,367,DataType
+ReferenceTypeAttributes_Encoding_DefaultBinary,369,Object
+ReferenceTypeAttributes_Encoding_DefaultJson,15160,Object
+ReferenceTypeAttributes_Encoding_DefaultXml,368,Object
+ReferenceTypeNode,273,DataType
+ReferenceTypeNode_Encoding_DefaultBinary,275,Object
+ReferenceTypeNode_Encoding_DefaultJson,15076,Object
+ReferenceTypeNode_Encoding_DefaultXml,274,Object
+ReferenceTypesFolder,91,Object
+RefreshEndEventType,2788,ObjectType
+RefreshRequiredEventType,2789,ObjectType
+RefreshStartEventType,2787,ObjectType
+RegisteredServer,432,DataType
+RegisteredServer_Encoding_DefaultBinary,434,Object
+RegisteredServer_Encoding_DefaultJson,15102,Object
+RegisteredServer_Encoding_DefaultXml,433,Object
+RegisterNodesRequest,558,DataType
+RegisterNodesRequest_Encoding_DefaultBinary,560,Object
+RegisterNodesRequest_Encoding_DefaultJson,15195,Object
+RegisterNodesRequest_Encoding_DefaultXml,559,Object
+RegisterNodesResponse,561,DataType
+RegisterNodesResponse_Encoding_DefaultBinary,563,Object
+RegisterNodesResponse_Encoding_DefaultJson,15196,Object
+RegisterNodesResponse_Encoding_DefaultXml,562,Object
+RegisterServer2Request,12193,DataType
+RegisterServer2Request_Encoding_DefaultBinary,12211,Object
+RegisterServer2Request_Encoding_DefaultJson,15107,Object
+RegisterServer2Request_Encoding_DefaultXml,12199,Object
+RegisterServer2Response,12194,DataType
+RegisterServer2Response_Encoding_DefaultBinary,12212,Object
+RegisterServer2Response_Encoding_DefaultJson,15130,Object
+RegisterServer2Response_Encoding_DefaultXml,12200,Object
+RegisterServerRequest,435,DataType
+RegisterServerRequest_Encoding_DefaultBinary,437,Object
+RegisterServerRequest_Encoding_DefaultJson,15103,Object
+RegisterServerRequest_Encoding_DefaultXml,436,Object
+RegisterServerResponse,438,DataType
+RegisterServerResponse_Encoding_DefaultBinary,440,Object
+RegisterServerResponse_Encoding_DefaultJson,15104,Object
+RegisterServerResponse_Encoding_DefaultXml,439,Object
+RelativePath,540,DataType
+RelativePath_Encoding_DefaultBinary,542,Object
+RelativePath_Encoding_DefaultJson,15189,Object
+RelativePath_Encoding_DefaultXml,541,Object
+RelativePathElement,537,DataType
+RelativePathElement_Encoding_DefaultBinary,539,Object
+RelativePathElement_Encoding_DefaultJson,15188,Object
+RelativePathElement_Encoding_DefaultXml,538,Object
+RepublishRequest,830,DataType
+RepublishRequest_Encoding_DefaultBinary,832,Object
+RepublishRequest_Encoding_DefaultJson,15354,Object
+RepublishRequest_Encoding_DefaultXml,831,Object
+RepublishResponse,833,DataType
+RepublishResponse_Encoding_DefaultBinary,835,Object
+RepublishResponse_Encoding_DefaultJson,15355,Object
+RepublishResponse_Encoding_DefaultXml,834,Object
+RequestHeader,389,DataType
+RequestHeader_Encoding_DefaultBinary,391,Object
+RequestHeader_Encoding_DefaultJson,15088,Object
+RequestHeader_Encoding_DefaultXml,390,Object
+Resources,24226,Object
+ResponseHeader,392,DataType
+ResponseHeader_Encoding_DefaultBinary,394,Object
+ResponseHeader_Encoding_DefaultJson,15089,Object
+ResponseHeader_Encoding_DefaultXml,393,Object
+RoleMappingRuleChangedAuditEventType,17641,ObjectType
+RolePermissionType,96,DataType
+RolePermissionType_Encoding_DefaultBinary,128,Object
+RolePermissionType_Encoding_DefaultJson,15062,Object
+RolePermissionType_Encoding_DefaultXml,16126,Object
+RoleSetType,15607,ObjectType
+RoleType,15620,ObjectType
+RootFolder,84,Object
+RsaEncryptedSecret,17545,DataType
+RsaMinApplicationCertificateType,12559,ObjectType
+RsaSha256ApplicationCertificateType,12560,ObjectType
+SafetyConditionClassType,17218,ObjectType
+SamplingIntervalDiagnosticsArrayType,2164,VariableType
+SamplingIntervalDiagnosticsDataType,856,DataType
+SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary,858,Object
+SamplingIntervalDiagnosticsDataType_Encoding_DefaultJson,15365,Object
+SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml,857,Object
+SamplingIntervalDiagnosticsType,2165,VariableType
+SByte,2,DataType
+SecurityGroupFolderType,15452,ObjectType
+SecurityGroupType,15471,ObjectType
+SecurityTokenRequestType,315,DataType
+SelectionListType,16309,VariableType
+SemanticChangeEventType,2738,ObjectType
+SemanticChangeStructureDataType,897,DataType
+SemanticChangeStructureDataType_Encoding_DefaultBinary,899,Object
+SemanticChangeStructureDataType_Encoding_DefaultJson,15374,Object
+SemanticChangeStructureDataType_Encoding_DefaultXml,898,Object
+Server,2253,Object
+Server_ServerRedundancy_CurrentServerId,11312,Variable
+Server_ServerRedundancy_RedundantServerArray,11313,Variable
+Server_ServerRedundancy_ServerNetworkGroups,14415,Variable
+Server_ServerRedundancy_ServerUriArray,11314,Variable
+ServerCapabilitiesType,2013,ObjectType
+ServerConfiguration,12637,Object
+ServerConfigurationType,12581,ObjectType
+ServerDiagnosticsSummaryDataType,859,DataType
+ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary,861,Object
+ServerDiagnosticsSummaryDataType_Encoding_DefaultJson,15366,Object
+ServerDiagnosticsSummaryDataType_Encoding_DefaultXml,860,Object
+ServerDiagnosticsSummaryType,2150,VariableType
+ServerDiagnosticsType,2020,ObjectType
+ServerOnNetwork,12189,DataType
+ServerOnNetwork_Encoding_DefaultBinary,12207,Object
+ServerOnNetwork_Encoding_DefaultJson,15095,Object
+ServerOnNetwork_Encoding_DefaultXml,12195,Object
+ServerRedundancyType,2034,ObjectType
+ServerState,852,DataType
+ServerStatusDataType,862,DataType
+ServerStatusDataType_Encoding_DefaultBinary,864,Object
+ServerStatusDataType_Encoding_DefaultJson,15367,Object
+ServerStatusDataType_Encoding_DefaultXml,863,Object
+ServerStatusType,2138,VariableType
+ServerType,2004,ObjectType
+ServerVendorCapabilityType,2137,VariableType
+ServiceCounterDataType,871,DataType
+ServiceCounterDataType_Encoding_DefaultBinary,873,Object
+ServiceCounterDataType_Encoding_DefaultJson,15370,Object
+ServiceCounterDataType_Encoding_DefaultXml,872,Object
+ServiceFault,395,DataType
+ServiceFault_Encoding_DefaultBinary,397,Object
+ServiceFault_Encoding_DefaultJson,15090,Object
+ServiceFault_Encoding_DefaultXml,396,Object
+SessionAuthenticationToken,388,DataType
+SessionDiagnosticsArrayType,2196,VariableType
+SessionDiagnosticsDataType,865,DataType
+SessionDiagnosticsDataType_Encoding_DefaultBinary,867,Object
+SessionDiagnosticsDataType_Encoding_DefaultJson,15368,Object
+SessionDiagnosticsDataType_Encoding_DefaultXml,866,Object
+SessionDiagnosticsObjectType,2029,ObjectType
+SessionDiagnosticsVariableType,2197,VariableType
+SessionlessInvokeRequestType,15901,DataType
+SessionlessInvokeRequestType_Encoding_DefaultBinary,15903,Object
+SessionlessInvokeRequestType_Encoding_DefaultJson,15091,Object
+SessionlessInvokeRequestType_Encoding_DefaultXml,15902,Object
+SessionlessInvokeResponseType,20999,DataType
+SessionlessInvokeResponseType_Encoding_DefaultBinary,21001,Object
+SessionlessInvokeResponseType_Encoding_DefaultJson,15092,Object
+SessionlessInvokeResponseType_Encoding_DefaultXml,21000,Object
+SessionsDiagnosticsSummaryType,2026,ObjectType
+SessionSecurityDiagnosticsArrayType,2243,VariableType
+SessionSecurityDiagnosticsDataType,868,DataType
+SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary,870,Object
+SessionSecurityDiagnosticsDataType_Encoding_DefaultJson,15369,Object
+SessionSecurityDiagnosticsDataType_Encoding_DefaultXml,869,Object
+SessionSecurityDiagnosticsType,2244,VariableType
+SetMonitoringModeRequest,767,DataType
+SetMonitoringModeRequest_Encoding_DefaultBinary,769,Object
+SetMonitoringModeRequest_Encoding_DefaultJson,15329,Object
+SetMonitoringModeRequest_Encoding_DefaultXml,768,Object
+SetMonitoringModeResponse,770,DataType
+SetMonitoringModeResponse_Encoding_DefaultBinary,772,Object
+SetMonitoringModeResponse_Encoding_DefaultJson,15331,Object
+SetMonitoringModeResponse_Encoding_DefaultXml,771,Object
+SetPublishingModeRequest,797,DataType
+SetPublishingModeRequest_Encoding_DefaultBinary,799,Object
+SetPublishingModeRequest_Encoding_DefaultJson,15341,Object
+SetPublishingModeRequest_Encoding_DefaultXml,798,Object
+SetPublishingModeResponse,800,DataType
+SetPublishingModeResponse_Encoding_DefaultBinary,802,Object
+SetPublishingModeResponse_Encoding_DefaultJson,15342,Object
+SetPublishingModeResponse_Encoding_DefaultXml,801,Object
+SetTriggeringRequest,773,DataType
+SetTriggeringRequest_Encoding_DefaultBinary,775,Object
+SetTriggeringRequest_Encoding_DefaultJson,15332,Object
+SetTriggeringRequest_Encoding_DefaultXml,774,Object
+SetTriggeringResponse,776,DataType
+SetTriggeringResponse_Encoding_DefaultBinary,778,Object
+SetTriggeringResponse_Encoding_DefaultJson,15333,Object
+SetTriggeringResponse_Encoding_DefaultXml,777,Object
+ShelvedStateMachineType,2929,ObjectType
+SignatureData,456,DataType
+SignatureData_Encoding_DefaultBinary,458,Object
+SignatureData_Encoding_DefaultJson,15137,Object
+SignatureData_Encoding_DefaultXml,457,Object
+SignedSoftwareCertificate,344,DataType
+SignedSoftwareCertificate_Encoding_DefaultBinary,346,Object
+SignedSoftwareCertificate_Encoding_DefaultJson,15136,Object
+SignedSoftwareCertificate_Encoding_DefaultXml,345,Object
+SimpleAttributeOperand,601,DataType
+SimpleAttributeOperand_Encoding_DefaultBinary,603,Object
+SimpleAttributeOperand_Encoding_DefaultJson,15210,Object
+SimpleAttributeOperand_Encoding_DefaultXml,602,Object
+SimpleTypeDescription,15005,DataType
+SimpleTypeDescription_Encoding_DefaultBinary,15421,Object
+SimpleTypeDescription_Encoding_DefaultJson,15700,Object
+SimpleTypeDescription_Encoding_DefaultXml,15529,Object
+StateMachineType,2299,ObjectType
+StateType,2307,ObjectType
+StateVariableType,2755,VariableType
+StatisticalConditionClassType,18665,ObjectType
+StatusChangeNotification,818,DataType
+StatusChangeNotification_Encoding_DefaultBinary,820,Object
+StatusChangeNotification_Encoding_DefaultJson,15350,Object
+StatusChangeNotification_Encoding_DefaultXml,819,Object
+StatusCode,19,DataType
+StatusResult,299,DataType
+StatusResult_Encoding_DefaultBinary,301,Object
+StatusResult_Encoding_DefaultJson,15371,Object
+StatusResult_Encoding_DefaultXml,300,Object
+Streams,24230,Object
+String,12,DataType
+Structure,22,DataType
+StructureDefinition,99,DataType
+StructureDefinition_Encoding_DefaultBinary,122,Object
+StructureDefinition_Encoding_DefaultJson,15066,Object
+StructureDefinition_Encoding_DefaultXml,14798,Object
+StructureDescription,15487,DataType
+StructureDescription_Encoding_DefaultBinary,126,Object
+StructureDescription_Encoding_DefaultJson,15058,Object
+StructureDescription_Encoding_DefaultXml,15589,Object
+StructureField,101,DataType
+StructureField_Encoding_DefaultBinary,14844,Object
+StructureField_Encoding_DefaultJson,15065,Object
+StructureField_Encoding_DefaultXml,14800,Object
+StructureType,98,DataType
+SubscribedDataSetDataType,15630,DataType
+SubscribedDataSetDataType_Encoding_DefaultBinary,15707,Object
+SubscribedDataSetDataType_Encoding_DefaultJson,16308,Object
+SubscribedDataSetDataType_Encoding_DefaultXml,16010,Object
+SubscribedDataSetMirrorDataType,15635,DataType
+SubscribedDataSetMirrorDataType_Encoding_DefaultBinary,15713,Object
+SubscribedDataSetMirrorDataType_Encoding_DefaultJson,16311,Object
+SubscribedDataSetMirrorDataType_Encoding_DefaultXml,16012,Object
+SubscribedDataSetMirrorType,15127,ObjectType
+SubscribedDataSetType,15108,ObjectType
+SubscriptionAcknowledgement,821,DataType
+SubscriptionAcknowledgement_Encoding_DefaultBinary,823,Object
+SubscriptionAcknowledgement_Encoding_DefaultJson,15351,Object
+SubscriptionAcknowledgement_Encoding_DefaultXml,822,Object
+SubscriptionDiagnosticsArrayType,2171,VariableType
+SubscriptionDiagnosticsDataType,874,DataType
+SubscriptionDiagnosticsDataType_Encoding_DefaultBinary,876,Object
+SubscriptionDiagnosticsDataType_Encoding_DefaultJson,15372,Object
+SubscriptionDiagnosticsDataType_Encoding_DefaultXml,875,Object
+SubscriptionDiagnosticsType,2172,VariableType
+SystemConditionClassType,11166,ObjectType
+SystemDiagnosticAlarmType,18496,ObjectType
+SystemEventType,2130,ObjectType
+SystemOffNormalAlarmType,11753,ObjectType
+SystemStatusChangeEventType,11446,ObjectType
+TagVariables,23479,Object
+TalkerStreams,24231,Object
+TargetVariablesDataType,15631,DataType
+TargetVariablesDataType_Encoding_DefaultBinary,15712,Object
+TargetVariablesDataType_Encoding_DefaultJson,16310,Object
+TargetVariablesDataType_Encoding_DefaultXml,16011,Object
+TargetVariablesType,15111,ObjectType
+TemporaryFileTransferType,15744,ObjectType
+TestingConditionSubClassType,17221,ObjectType
+ThreeDCartesianCoordinates,18810,DataType
+ThreeDCartesianCoordinates_Encoding_DefaultBinary,18819,Object
+ThreeDCartesianCoordinates_Encoding_DefaultJson,19068,Object
+ThreeDCartesianCoordinates_Encoding_DefaultXml,18855,Object
+ThreeDCartesianCoordinatesType,18774,VariableType
+ThreeDFrame,18814,DataType
+ThreeDFrame_Encoding_DefaultBinary,18823,Object
+ThreeDFrame_Encoding_DefaultJson,19072,Object
+ThreeDFrame_Encoding_DefaultXml,18859,Object
+ThreeDFrameType,18791,VariableType
+ThreeDOrientation,18812,DataType
+ThreeDOrientation_Encoding_DefaultBinary,18821,Object
+ThreeDOrientation_Encoding_DefaultJson,19070,Object
+ThreeDOrientation_Encoding_DefaultXml,18857,Object
+ThreeDOrientationType,18781,VariableType
+ThreeDVector,18808,DataType
+ThreeDVector_Encoding_DefaultBinary,18817,Object
+ThreeDVector_Encoding_DefaultJson,19066,Object
+ThreeDVector_Encoding_DefaultXml,18853,Object
+ThreeDVectorType,17716,VariableType
+Time,292,DataType
+TimestampsToReturn,625,DataType
+TimeString,12880,DataType
+TimeZoneDataType,8912,DataType
+TimeZoneDataType_Encoding_DefaultBinary,8917,Object
+TimeZoneDataType_Encoding_DefaultJson,15086,Object
+TimeZoneDataType_Encoding_DefaultXml,8913,Object
+Topics,23488,Object
+ToState,52,ReferenceType
+TrainingConditionClassType,17220,ObjectType
+TransferResult,836,DataType
+TransferResult_Encoding_DefaultBinary,838,Object
+TransferResult_Encoding_DefaultJson,15356,Object
+TransferResult_Encoding_DefaultXml,837,Object
+TransferSubscriptionsRequest,839,DataType
+TransferSubscriptionsRequest_Encoding_DefaultBinary,841,Object
+TransferSubscriptionsRequest_Encoding_DefaultJson,15357,Object
+TransferSubscriptionsRequest_Encoding_DefaultXml,840,Object
+TransferSubscriptionsResponse,842,DataType
+TransferSubscriptionsResponse_Encoding_DefaultBinary,844,Object
+TransferSubscriptionsResponse_Encoding_DefaultJson,15358,Object
+TransferSubscriptionsResponse_Encoding_DefaultXml,843,Object
+TransitionEventType,2311,ObjectType
+TransitionType,2310,ObjectType
+TransitionVariableType,2762,VariableType
+TranslateBrowsePathsToNodeIdsRequest,552,DataType
+TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary,554,Object
+TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultJson,15193,Object
+TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml,553,Object
+TranslateBrowsePathsToNodeIdsResponse,555,DataType
+TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary,557,Object
+TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultJson,15194,Object
+TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml,556,Object
+TransparentRedundancyType,2036,ObjectType
+TripAlarmType,10751,ObjectType
+TrustListDataType,12554,DataType
+TrustListDataType_Encoding_DefaultBinary,12680,Object
+TrustListDataType_Encoding_DefaultJson,15044,Object
+TrustListDataType_Encoding_DefaultXml,12676,Object
+TrustListMasks,12552,DataType
+TrustListOutOfDateAlarmType,19297,ObjectType
+TrustListType,12522,ObjectType
+TrustListUpdatedAuditEventType,12561,ObjectType
+TsnFailureCode,24218,DataType
+TsnListenerStatus,24224,DataType
+TsnStreamState,24220,DataType
+TsnTalkerStatus,24222,DataType
+TwoStateDiscreteType,2373,VariableType
+TwoStateVariableType,8995,VariableType
+TypeNode,11880,DataType
+TypeNode_Encoding_DefaultBinary,11890,Object
+TypeNode_Encoding_DefaultJson,15070,Object
+TypeNode_Encoding_DefaultXml,11888,Object
+TypesFolder,86,Object
+UABinaryFileDataType,15006,DataType
+UABinaryFileDataType_Encoding_DefaultBinary,15422,Object
+UABinaryFileDataType_Encoding_DefaultJson,15714,Object
+UABinaryFileDataType_Encoding_DefaultXml,15531,Object
+UadpDataSetMessageContentMask,15646,DataType
+UadpDataSetReaderMessageDataType,15653,DataType
+UadpDataSetReaderMessageDataType_Encoding_DefaultBinary,15718,Object
+UadpDataSetReaderMessageDataType_Encoding_DefaultJson,16392,Object
+UadpDataSetReaderMessageDataType_Encoding_DefaultXml,16016,Object
+UadpDataSetReaderMessageType,21116,ObjectType
+UadpDataSetWriterMessageDataType,15652,DataType
+UadpDataSetWriterMessageDataType_Encoding_DefaultBinary,15717,Object
+UadpDataSetWriterMessageDataType_Encoding_DefaultJson,16391,Object
+UadpDataSetWriterMessageDataType_Encoding_DefaultXml,16015,Object
+UadpDataSetWriterMessageType,21111,ObjectType
+UadpNetworkMessageContentMask,15642,DataType
+UadpWriterGroupMessageDataType,15645,DataType
+UadpWriterGroupMessageDataType_Encoding_DefaultBinary,15715,Object
+UadpWriterGroupMessageDataType_Encoding_DefaultJson,16323,Object
+UadpWriterGroupMessageDataType_Encoding_DefaultXml,16014,Object
+UadpWriterGroupMessageType,21105,ObjectType
+UInt16,5,DataType
+UInt32,7,DataType
+UInt64,9,DataType
+UInteger,28,DataType
+Union,12756,DataType
+Union_Encoding_DefaultBinary,12766,Object
+Union_Encoding_DefaultJson,15085,Object
+Union_Encoding_DefaultXml,12758,Object
+UnregisterNodesRequest,564,DataType
+UnregisterNodesRequest_Encoding_DefaultBinary,566,Object
+UnregisterNodesRequest_Encoding_DefaultJson,15197,Object
+UnregisterNodesRequest_Encoding_DefaultXml,565,Object
+UnregisterNodesResponse,567,DataType
+UnregisterNodesResponse_Encoding_DefaultBinary,569,Object
+UnregisterNodesResponse_Encoding_DefaultJson,15198,Object
+UnregisterNodesResponse_Encoding_DefaultXml,568,Object
+UnsignedRationalNumber,24107,DataType
+UnsignedRationalNumber_Encoding_DefaultBinary,24110,Object
+UnsignedRationalNumber_Encoding_DefaultJson,24134,Object
+UnsignedRationalNumber_Encoding_DefaultXml,24122,Object
+UpdateDataDetails,680,DataType
+UpdateDataDetails_Encoding_DefaultBinary,682,Object
+UpdateDataDetails_Encoding_DefaultJson,15280,Object
+UpdateDataDetails_Encoding_DefaultXml,681,Object
+UpdateEventDetails,683,DataType
+UpdateEventDetails_Encoding_DefaultBinary,685,Object
+UpdateEventDetails_Encoding_DefaultJson,15282,Object
+UpdateEventDetails_Encoding_DefaultXml,684,Object
+UpdateStructureDataDetails,11295,DataType
+UpdateStructureDataDetails_Encoding_DefaultBinary,11300,Object
+UpdateStructureDataDetails_Encoding_DefaultJson,15281,Object
+UpdateStructureDataDetails_Encoding_DefaultXml,11296,Object
+UriDictionaryEntryType,17600,ObjectType
+UserCredentialCertificateType,15181,ObjectType
+UserIdentityToken,316,DataType
+UserIdentityToken_Encoding_DefaultBinary,318,Object
+UserIdentityToken_Encoding_DefaultJson,15140,Object
+UserIdentityToken_Encoding_DefaultXml,317,Object
+UserNameIdentityToken,322,DataType
+UserNameIdentityToken_Encoding_DefaultBinary,324,Object
+UserNameIdentityToken_Encoding_DefaultJson,15142,Object
+UserNameIdentityToken_Encoding_DefaultXml,323,Object
+UserTokenPolicy,304,DataType
+UserTokenPolicy_Encoding_DefaultBinary,306,Object
+UserTokenPolicy_Encoding_DefaultJson,15098,Object
+UserTokenPolicy_Encoding_DefaultXml,305,Object
+UserTokenType,303,DataType
+UtcTime,294,DataType
+ValueAsText,11433,Variable
+VariableAttributes,355,DataType
+VariableAttributes_Encoding_DefaultBinary,357,Object
+VariableAttributes_Encoding_DefaultJson,15153,Object
+VariableAttributes_Encoding_DefaultXml,356,Object
+VariableNode,267,DataType
+VariableNode_Encoding_DefaultBinary,269,Object
+VariableNode_Encoding_DefaultJson,15074,Object
+VariableNode_Encoding_DefaultXml,268,Object
+VariableTypeAttributes,364,DataType
+VariableTypeAttributes_Encoding_DefaultBinary,366,Object
+VariableTypeAttributes_Encoding_DefaultJson,15159,Object
+VariableTypeAttributes_Encoding_DefaultXml,365,Object
+VariableTypeNode,270,DataType
+VariableTypeNode_Encoding_DefaultBinary,272,Object
+VariableTypeNode_Encoding_DefaultJson,15075,Object
+VariableTypeNode_Encoding_DefaultXml,271,Object
+VariableTypesFolder,89,Object
+Vector,18807,DataType
+Vector_Encoding_DefaultBinary,18816,Object
+Vector_Encoding_DefaultJson,19065,Object
+Vector_Encoding_DefaultXml,18852,Object
+VectorType,17714,VariableType
+VendorServerInfoType,2033,ObjectType
+VersionTime,20998,DataType
+ViewAttributes,373,DataType
+ViewAttributes_Encoding_DefaultBinary,375,Object
+ViewAttributes_Encoding_DefaultJson,15162,Object
+ViewAttributes_Encoding_DefaultXml,374,Object
+ViewDescription,511,DataType
+ViewDescription_Encoding_DefaultBinary,513,Object
+ViewDescription_Encoding_DefaultJson,15179,Object
+ViewDescription_Encoding_DefaultXml,512,Object
+ViewNode,279,DataType
+ViewNode_Encoding_DefaultBinary,281,Object
+ViewNode_Encoding_DefaultJson,15078,Object
+ViewNode_Encoding_DefaultXml,280,Object
+ViewsFolder,87,Object
+ViewVersion,12170,Variable
+WellKnownRole_Anonymous,15644,Object
+WellKnownRole_AuthenticatedUser,15656,Object
+WellKnownRole_ConfigureAdmin,15716,Object
+WellKnownRole_Engineer,16036,Object
+WellKnownRole_Observer,15668,Object
+WellKnownRole_Operator,15680,Object
+WellKnownRole_SecurityAdmin,15704,Object
+WellKnownRole_Supervisor,15692,Object
+WriteRequest,671,DataType
+WriteRequest_Encoding_DefaultBinary,673,Object
+WriteRequest_Encoding_DefaultJson,15277,Object
+WriteRequest_Encoding_DefaultXml,672,Object
+WriteResponse,674,DataType
+WriteResponse_Encoding_DefaultBinary,676,Object
+WriteResponse_Encoding_DefaultJson,15278,Object
+WriteResponse_Encoding_DefaultXml,675,Object
+WriterGroupDataType,15480,DataType
+WriterGroupDataType_Encoding_DefaultBinary,21150,Object
+WriterGroupDataType_Encoding_DefaultJson,21198,Object
+WriterGroupDataType_Encoding_DefaultXml,21174,Object
+WriterGroupMessageDataType,15616,DataType
+WriterGroupMessageDataType_Encoding_DefaultBinary,15693,Object
+WriterGroupMessageDataType_Encoding_DefaultJson,16280,Object
+WriterGroupMessageDataType_Encoding_DefaultXml,15991,Object
+WriterGroupMessageType,17998,ObjectType
+WriterGroupTransportDataType,15611,DataType
+WriterGroupTransportDataType_Encoding_DefaultBinary,15691,Object
+WriterGroupTransportDataType_Encoding_DefaultJson,16161,Object
+WriterGroupTransportDataType_Encoding_DefaultXml,15990,Object
+WriterGroupTransportType,17997,ObjectType
+WriterGroupType,17725,ObjectType
+WriteValue,668,DataType
+WriteValue_Encoding_DefaultBinary,670,Object
+WriteValue_Encoding_DefaultJson,15276,Object
+WriteValue_Encoding_DefaultXml,669,Object
+X509IdentityToken,325,DataType
+X509IdentityToken_Encoding_DefaultBinary,327,Object
+X509IdentityToken_Encoding_DefaultJson,15143,Object
+X509IdentityToken_Encoding_DefaultXml,326,Object
+XmlElement,16,DataType
+XmlSchema_TypeSystem,92,Object
+XVType,12080,DataType
+XVType_Encoding_DefaultBinary,12090,Object
+XVType_Encoding_DefaultJson,15380,Object
+XVType_Encoding_DefaultXml,12082,Object
+XYArrayItemType,12038,VariableType
+YArrayItemType,12029,VariableType
diff --git a/protocols/opcua/downloads/Opc.Ua.NodeSet2.Services.xml b/protocols/opcua/downloads/Opc.Ua.NodeSet2.Services.xml
new file mode 100644
index 0000000000..d37964bb2f
--- /dev/null
+++ b/protocols/opcua/downloads/Opc.Ua.NodeSet2.Services.xml
@@ -0,0 +1,63477 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ * Copyright (c) 2005-2021 The OPC Foundation, Inc. All rights reserved.
+ *
+ * OPC Foundation MIT License 1.00
+ * 
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * The complete license agreement can be found here:
+ * http://opcfoundation.org/License/MIT/1.00/
+-->
+
+<UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" LastModified="2021-09-15T00:00:00Z" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd">
+  <Models>
+    <Model ModelUri="http://opcfoundation.org/UA/" Version="1.04.10" PublicationDate="2021-09-15T00:00:00Z" />
+  </Models>
+  <Aliases>
+    <Alias Alias="Boolean">i=1</Alias>
+    <Alias Alias="SByte">i=2</Alias>
+    <Alias Alias="Byte">i=3</Alias>
+    <Alias Alias="Int16">i=4</Alias>
+    <Alias Alias="UInt16">i=5</Alias>
+    <Alias Alias="Int32">i=6</Alias>
+    <Alias Alias="UInt32">i=7</Alias>
+    <Alias Alias="Int64">i=8</Alias>
+    <Alias Alias="UInt64">i=9</Alias>
+    <Alias Alias="Float">i=10</Alias>
+    <Alias Alias="Double">i=11</Alias>
+    <Alias Alias="DateTime">i=13</Alias>
+    <Alias Alias="String">i=12</Alias>
+    <Alias Alias="ByteString">i=15</Alias>
+    <Alias Alias="Guid">i=14</Alias>
+    <Alias Alias="XmlElement">i=16</Alias>
+    <Alias Alias="NodeId">i=17</Alias>
+    <Alias Alias="ExpandedNodeId">i=18</Alias>
+    <Alias Alias="QualifiedName">i=20</Alias>
+    <Alias Alias="LocalizedText">i=21</Alias>
+    <Alias Alias="StatusCode">i=19</Alias>
+    <Alias Alias="Structure">i=22</Alias>
+    <Alias Alias="Number">i=26</Alias>
+    <Alias Alias="Integer">i=27</Alias>
+    <Alias Alias="UInteger">i=28</Alias>
+    <Alias Alias="HasComponent">i=47</Alias>
+    <Alias Alias="HasProperty">i=46</Alias>
+    <Alias Alias="Organizes">i=35</Alias>
+    <Alias Alias="HasEventSource">i=36</Alias>
+    <Alias Alias="HasNotifier">i=48</Alias>
+    <Alias Alias="HasSubtype">i=45</Alias>
+    <Alias Alias="HasTypeDefinition">i=40</Alias>
+    <Alias Alias="HasModellingRule">i=37</Alias>
+    <Alias Alias="HasEncoding">i=38</Alias>
+    <Alias Alias="HasDescription">i=39</Alias>
+    <Alias Alias="HasCause">i=53</Alias>
+    <Alias Alias="ToState">i=52</Alias>
+    <Alias Alias="FromState">i=51</Alias>
+    <Alias Alias="HasEffect">i=54</Alias>
+    <Alias Alias="HasTrueSubState">i=9004</Alias>
+    <Alias Alias="HasFalseSubState">i=9005</Alias>
+    <Alias Alias="HasDictionaryEntry">i=17597</Alias>
+    <Alias Alias="HasCondition">i=9006</Alias>
+    <Alias Alias="HasGuard">i=15112</Alias>
+    <Alias Alias="HasAddIn">i=17604</Alias>
+    <Alias Alias="HasInterface">i=17603</Alias>
+  </Aliases>
+  <UAObject NodeId="i=3062" BrowseName="Default Binary" SymbolicName="DefaultBinary">
+    <DisplayName>Default Binary</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=58</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=3063" BrowseName="Default XML" SymbolicName="DefaultXml">
+    <DisplayName>Default XML</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=58</Reference>
+    </References>
+  </UAObject>
+  <UADataType NodeId="i=24" BrowseName="BaseDataType" IsAbstract="true">
+    <DisplayName>BaseDataType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2</Documentation>
+    <References />
+  </UADataType>
+  <UADataType NodeId="i=26" BrowseName="Number" IsAbstract="true">
+    <DisplayName>Number</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=27" BrowseName="Integer" IsAbstract="true">
+    <DisplayName>Integer</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=26</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=28" BrowseName="UInteger" IsAbstract="true">
+    <DisplayName>UInteger</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=26</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=29" BrowseName="Enumeration" IsAbstract="true">
+    <DisplayName>Enumeration</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Part22/docs/5.3.1</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+    <Definition Name="Enumeration" />
+  </UADataType>
+  <UADataType NodeId="i=1" BrowseName="Boolean">
+    <DisplayName>Boolean</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.8</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=2" BrowseName="SByte">
+    <DisplayName>SByte</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.17</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=27</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=3" BrowseName="Byte">
+    <DisplayName>Byte</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.9</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=28</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=4" BrowseName="Int16">
+    <DisplayName>Int16</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.25</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=27</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=5" BrowseName="UInt16">
+    <DisplayName>UInt16</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.35</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=28</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=6" BrowseName="Int32">
+    <DisplayName>Int32</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.26</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=27</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=7" BrowseName="UInt32">
+    <DisplayName>UInt32</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.36</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=28</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=8" BrowseName="Int64">
+    <DisplayName>Int64</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.27</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=27</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=9" BrowseName="UInt64">
+    <DisplayName>UInt64</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=28</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=10" BrowseName="Float">
+    <DisplayName>Float</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.15</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=26</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=11" BrowseName="Double">
+    <DisplayName>Double</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=26</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=12" BrowseName="String">
+    <DisplayName>String</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=13" BrowseName="DateTime">
+    <DisplayName>DateTime</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=14" BrowseName="Guid">
+    <DisplayName>Guid</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.16</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=15" BrowseName="ByteString">
+    <DisplayName>ByteString</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=16" BrowseName="XmlElement">
+    <DisplayName>XmlElement</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.39</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=17" BrowseName="NodeId">
+    <DisplayName>NodeId</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/5.2.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=18" BrowseName="ExpandedNodeId">
+    <DisplayName>ExpandedNodeId</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part4/7.11</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=19" BrowseName="StatusCode">
+    <DisplayName>StatusCode</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part4/7.34.1</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=20" BrowseName="QualifiedName">
+    <DisplayName>QualifiedName</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.3</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=21" BrowseName="LocalizedText">
+    <DisplayName>LocalizedText</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.5</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=22" BrowseName="Structure" IsAbstract="true">
+    <DisplayName>Structure</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Part22/docs/5.3.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=23" BrowseName="DataValue">
+    <DisplayName>DataValue</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part4/7.7.1</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=25" BrowseName="DiagnosticInfo">
+    <DisplayName>DiagnosticInfo</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part4/7.8</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=24</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=30" BrowseName="Image" IsAbstract="true">
+    <DisplayName>Image</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/12.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=15</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=50" BrowseName="Decimal">
+    <DisplayName>Decimal</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.54</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=26</Reference>
+    </References>
+  </UADataType>
+  <UAReferenceType NodeId="i=31" BrowseName="References" IsAbstract="true" Symmetric="true">
+    <DisplayName>References</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.1</Documentation>
+    <References />
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=32" BrowseName="NonHierarchicalReferences" IsAbstract="true" Symmetric="true">
+    <DisplayName>NonHierarchicalReferences</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.3</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=31</Reference>
+    </References>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=33" BrowseName="HierarchicalReferences" IsAbstract="true">
+    <DisplayName>HierarchicalReferences</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=31</Reference>
+    </References>
+    <InverseName>HierarchicalReferences</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=34" BrowseName="HasChild" IsAbstract="true">
+    <DisplayName>HasChild</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.4</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=33</Reference>
+    </References>
+    <InverseName>ChildOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=35" BrowseName="Organizes">
+    <DisplayName>Organizes</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.6</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=33</Reference>
+    </References>
+    <InverseName>OrganizedBy</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=36" BrowseName="HasEventSource">
+    <DisplayName>HasEventSource</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.14</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=33</Reference>
+    </References>
+    <InverseName>EventSourceOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=37" BrowseName="HasModellingRule">
+    <DisplayName>HasModellingRule</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.11</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
+    </References>
+    <InverseName>ModellingRuleOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=38" BrowseName="HasEncoding">
+    <DisplayName>HasEncoding</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.13</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
+    </References>
+    <InverseName>EncodingOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=39" BrowseName="HasDescription">
+    <DisplayName>HasDescription</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.1</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
+    </References>
+    <InverseName>DescriptionOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=40" BrowseName="HasTypeDefinition">
+    <DisplayName>HasTypeDefinition</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.12</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
+    </References>
+    <InverseName>TypeDefinitionOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=41" BrowseName="GeneratesEvent">
+    <DisplayName>GeneratesEvent</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.16</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
+    </References>
+    <InverseName>GeneratedBy</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=3065" BrowseName="AlwaysGeneratesEvent">
+    <DisplayName>AlwaysGeneratesEvent</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.17</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=41</Reference>
+    </References>
+    <InverseName>AlwaysGeneratedBy</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=44" BrowseName="Aggregates" IsAbstract="true">
+    <DisplayName>Aggregates</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.5</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=34</Reference>
+    </References>
+    <InverseName>AggregatedBy</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=45" BrowseName="HasSubtype">
+    <DisplayName>HasSubtype</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.10</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=34</Reference>
+    </References>
+    <InverseName>SubtypeOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=46" BrowseName="HasProperty">
+    <DisplayName>HasProperty</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.9</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=44</Reference>
+    </References>
+    <InverseName>PropertyOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=47" BrowseName="HasComponent">
+    <DisplayName>HasComponent</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.7</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=44</Reference>
+    </References>
+    <InverseName>ComponentOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=48" BrowseName="HasNotifier">
+    <DisplayName>HasNotifier</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.15</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=36</Reference>
+    </References>
+    <InverseName>NotifierOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=49" BrowseName="HasOrderedComponent">
+    <DisplayName>HasOrderedComponent</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.8</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=47</Reference>
+    </References>
+    <InverseName>OrderedComponentOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=51" BrowseName="FromState">
+    <DisplayName>FromState</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.11</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
+    </References>
+    <InverseName>ToTransition</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=52" BrowseName="ToState">
+    <DisplayName>ToState</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.12</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
+    </References>
+    <InverseName>FromTransition</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=53" BrowseName="HasCause">
+    <DisplayName>HasCause</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.13</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
+    </References>
+    <InverseName>MayBeCausedBy</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=54" BrowseName="HasEffect">
+    <DisplayName>HasEffect</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.14</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
+    </References>
+    <InverseName>MayBeEffectedBy</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=117" BrowseName="HasSubStateMachine">
+    <DisplayName>HasSubStateMachine</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/B.4.15</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
+    </References>
+    <InverseName>SubStateMachineOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=56" BrowseName="HasHistoricalConfiguration">
+    <DisplayName>HasHistoricalConfiguration</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part11/5.2.3</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=44</Reference>
+    </References>
+    <InverseName>HistoricalConfigurationOf</InverseName>
+  </UAReferenceType>
+  <UAObjectType NodeId="i=58" BrowseName="BaseObjectType">
+    <DisplayName>BaseObjectType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/6.2</Documentation>
+    <References />
+  </UAObjectType>
+  <UAObjectType NodeId="i=61" BrowseName="FolderType">
+    <DisplayName>FolderType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/6.6</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
+    </References>
+  </UAObjectType>
+  <UAVariableType NodeId="i=62" BrowseName="BaseVariableType" IsAbstract="true" ValueRank="-2">
+    <DisplayName>BaseVariableType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/7.2</Documentation>
+    <References />
+  </UAVariableType>
+  <UAVariableType NodeId="i=63" BrowseName="BaseDataVariableType" ValueRank="-2">
+    <DisplayName>BaseDataVariableType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/7.4</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=62</Reference>
+    </References>
+  </UAVariableType>
+  <UAVariableType NodeId="i=68" BrowseName="PropertyType" ValueRank="-2">
+    <DisplayName>PropertyType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/7.3</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=62</Reference>
+    </References>
+  </UAVariableType>
+  <UAVariableType NodeId="i=69" BrowseName="DataTypeDescriptionType" ReleaseStatus="Deprecated" DataType="String">
+    <DisplayName>DataTypeDescriptionType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.3</Documentation>
+    <References>
+      <Reference ReferenceType="HasProperty">i=104</Reference>
+      <Reference ReferenceType="HasProperty">i=105</Reference>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=63</Reference>
+    </References>
+  </UAVariableType>
+  <UAVariable NodeId="i=104" BrowseName="DataTypeVersion" ReleaseStatus="Deprecated" ParentNodeId="i=69" DataType="String">
+    <DisplayName>DataTypeVersion</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=80</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=69</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=105" BrowseName="DictionaryFragment" ReleaseStatus="Deprecated" ParentNodeId="i=69" DataType="ByteString">
+    <DisplayName>DictionaryFragment</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=80</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=69</Reference>
+    </References>
+  </UAVariable>
+  <UAVariableType NodeId="i=72" BrowseName="DataTypeDictionaryType" ReleaseStatus="Deprecated" DataType="ByteString">
+    <DisplayName>DataTypeDictionaryType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasProperty">i=106</Reference>
+      <Reference ReferenceType="HasProperty">i=107</Reference>
+      <Reference ReferenceType="HasProperty">i=15001</Reference>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=63</Reference>
+    </References>
+  </UAVariableType>
+  <UAVariable NodeId="i=106" BrowseName="DataTypeVersion" ReleaseStatus="Deprecated" ParentNodeId="i=72" DataType="String">
+    <DisplayName>DataTypeVersion</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=80</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=72</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=107" BrowseName="NamespaceUri" ReleaseStatus="Deprecated" ParentNodeId="i=72" DataType="String">
+    <DisplayName>NamespaceUri</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=80</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=72</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=15001" BrowseName="Deprecated" ReleaseStatus="Deprecated" ParentNodeId="i=72" DataType="Boolean">
+    <DisplayName>Deprecated</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=80</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=72</Reference>
+    </References>
+  </UAVariable>
+  <UAObjectType NodeId="i=75" BrowseName="DataTypeSystemType" ReleaseStatus="Deprecated">
+    <DisplayName>DataTypeSystemType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.4</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
+    </References>
+  </UAObjectType>
+  <UAObjectType NodeId="i=76" BrowseName="DataTypeEncodingType">
+    <DisplayName>DataTypeEncodingType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/6.7</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
+    </References>
+  </UAObjectType>
+  <UADataType NodeId="i=120" BrowseName="NamingRuleType">
+    <DisplayName>NamingRuleType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.29</Documentation>
+    <References>
+      <Reference ReferenceType="HasProperty">i=12169</Reference>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=29</Reference>
+    </References>
+    <Definition Name="NamingRuleType">
+      <Field Name="Mandatory" Value="1">
+        <Description>The BrowseName must appear in all instances of the type.</Description>
+      </Field>
+      <Field Name="Optional" Value="2">
+        <Description>The BrowseName may appear in an instance of the type.</Description>
+      </Field>
+      <Field Name="Constraint" Value="3">
+        <Description>The modelling rule defines a constraint and the BrowseName is not used in an instance of the type.</Description>
+      </Field>
+    </Definition>
+  </UADataType>
+  <UAVariable NodeId="i=12169" BrowseName="EnumValues" ParentNodeId="i=120" DataType="i=7594" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>EnumValues</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=120</Reference>
+    </References>
+    <Value>
+      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
+        <ExtensionObject>
+          <TypeId>
+            <Identifier>i=7616</Identifier>
+          </TypeId>
+          <Body>
+            <EnumValueType>
+              <Value>1</Value>
+              <DisplayName>
+                <Text>Mandatory</Text>
+              </DisplayName>
+              <Description>
+                <Text>The BrowseName must appear in all instances of the type.</Text>
+              </Description>
+            </EnumValueType>
+          </Body>
+        </ExtensionObject>
+        <ExtensionObject>
+          <TypeId>
+            <Identifier>i=7616</Identifier>
+          </TypeId>
+          <Body>
+            <EnumValueType>
+              <Value>2</Value>
+              <DisplayName>
+                <Text>Optional</Text>
+              </DisplayName>
+              <Description>
+                <Text>The BrowseName may appear in an instance of the type.</Text>
+              </Description>
+            </EnumValueType>
+          </Body>
+        </ExtensionObject>
+        <ExtensionObject>
+          <TypeId>
+            <Identifier>i=7616</Identifier>
+          </TypeId>
+          <Body>
+            <EnumValueType>
+              <Value>3</Value>
+              <DisplayName>
+                <Text>Constraint</Text>
+              </DisplayName>
+              <Description>
+                <Text>The modelling rule defines a constraint and the BrowseName is not used in an instance of the type.</Text>
+              </Description>
+            </EnumValueType>
+          </Body>
+        </ExtensionObject>
+      </ListOfExtensionObject>
+    </Value>
+  </UAVariable>
+  <UAObjectType NodeId="i=77" BrowseName="ModellingRuleType">
+    <DisplayName>ModellingRuleType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/6.5</Documentation>
+    <References>
+      <Reference ReferenceType="HasProperty">i=111</Reference>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
+    </References>
+  </UAObjectType>
+  <UAVariable NodeId="i=111" BrowseName="NamingRule" ParentNodeId="i=77" DataType="i=120">
+    <DisplayName>NamingRule</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=77</Reference>
+    </References>
+    <Value>
+      <Int32 xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">1</Int32>
+    </Value>
+  </UAVariable>
+  <UAObject NodeId="i=78" BrowseName="Mandatory" SymbolicName="ModellingRule_Mandatory">
+    <DisplayName>Mandatory</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasProperty">i=112</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=77</Reference>
+    </References>
+  </UAObject>
+  <UAVariable NodeId="i=112" BrowseName="NamingRule" ParentNodeId="i=78" DataType="i=120">
+    <DisplayName>NamingRule</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=78</Reference>
+    </References>
+    <Value>
+      <Int32 xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">1</Int32>
+    </Value>
+  </UAVariable>
+  <UAObject NodeId="i=80" BrowseName="Optional" SymbolicName="ModellingRule_Optional">
+    <DisplayName>Optional</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.3</Documentation>
+    <References>
+      <Reference ReferenceType="HasProperty">i=113</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=77</Reference>
+    </References>
+  </UAObject>
+  <UAVariable NodeId="i=113" BrowseName="NamingRule" ParentNodeId="i=80" DataType="i=120">
+    <DisplayName>NamingRule</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=80</Reference>
+    </References>
+    <Value>
+      <Int32 xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">2</Int32>
+    </Value>
+  </UAVariable>
+  <UAObject NodeId="i=83" BrowseName="ExposesItsArray" SymbolicName="ModellingRule_ExposesItsArray">
+    <DisplayName>ExposesItsArray</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.1</Documentation>
+    <References>
+      <Reference ReferenceType="HasProperty">i=114</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=77</Reference>
+    </References>
+  </UAObject>
+  <UAVariable NodeId="i=114" BrowseName="NamingRule" ParentNodeId="i=83" DataType="i=120">
+    <DisplayName>NamingRule</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=83</Reference>
+    </References>
+    <Value>
+      <Int32 xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">3</Int32>
+    </Value>
+  </UAVariable>
+  <UAObject NodeId="i=11508" BrowseName="OptionalPlaceholder" SymbolicName="ModellingRule_OptionalPlaceholder">
+    <DisplayName>OptionalPlaceholder</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.4</Documentation>
+    <References>
+      <Reference ReferenceType="HasProperty">i=11509</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=77</Reference>
+    </References>
+  </UAObject>
+  <UAVariable NodeId="i=11509" BrowseName="NamingRule" ParentNodeId="i=11508" DataType="i=120">
+    <DisplayName>NamingRule</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=11508</Reference>
+    </References>
+    <Value>
+      <Int32 xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">2</Int32>
+    </Value>
+  </UAVariable>
+  <UAObject NodeId="i=11510" BrowseName="MandatoryPlaceholder" SymbolicName="ModellingRule_MandatoryPlaceholder">
+    <DisplayName>MandatoryPlaceholder</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.4.5</Documentation>
+    <References>
+      <Reference ReferenceType="HasProperty">i=11511</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=77</Reference>
+    </References>
+  </UAObject>
+  <UAVariable NodeId="i=11511" BrowseName="NamingRule" ParentNodeId="i=11510" DataType="i=120">
+    <DisplayName>NamingRule</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=11510</Reference>
+    </References>
+    <Value>
+      <Int32 xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">1</Int32>
+    </Value>
+  </UAVariable>
+  <UAObject NodeId="i=84" BrowseName="Root" SymbolicName="RootFolder">
+    <DisplayName>Root</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.2</Documentation>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=85" BrowseName="Objects" SymbolicName="ObjectsFolder">
+    <DisplayName>Objects</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.4</Documentation>
+    <References>
+      <Reference ReferenceType="Organizes" IsForward="false">i=84</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=86" BrowseName="Types" SymbolicName="TypesFolder">
+    <DisplayName>Types</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.5</Documentation>
+    <References>
+      <Reference ReferenceType="Organizes" IsForward="false">i=84</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=87" BrowseName="Views" SymbolicName="ViewsFolder">
+    <DisplayName>Views</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.3</Documentation>
+    <References>
+      <Reference ReferenceType="Organizes" IsForward="false">i=84</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=88" BrowseName="ObjectTypes" SymbolicName="ObjectTypesFolder">
+    <DisplayName>ObjectTypes</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.6</Documentation>
+    <References>
+      <Reference ReferenceType="Organizes" IsForward="false">i=86</Reference>
+      <Reference ReferenceType="Organizes">i=58</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=89" BrowseName="VariableTypes" SymbolicName="VariableTypesFolder">
+    <DisplayName>VariableTypes</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.7</Documentation>
+    <References>
+      <Reference ReferenceType="Organizes" IsForward="false">i=86</Reference>
+      <Reference ReferenceType="Organizes">i=62</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=90" BrowseName="DataTypes" SymbolicName="DataTypesFolder">
+    <DisplayName>DataTypes</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.9</Documentation>
+    <References>
+      <Reference ReferenceType="Organizes" IsForward="false">i=86</Reference>
+      <Reference ReferenceType="Organizes">i=24</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=91" BrowseName="ReferenceTypes" SymbolicName="ReferenceTypesFolder">
+    <DisplayName>ReferenceTypes</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/8.2.8</Documentation>
+    <References>
+      <Reference ReferenceType="Organizes" IsForward="false">i=86</Reference>
+      <Reference ReferenceType="Organizes">i=31</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=92" BrowseName="XML Schema" SymbolicName="XmlSchema_TypeSystem" ReleaseStatus="Deprecated">
+    <DisplayName>XML Schema</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.6</Documentation>
+    <References>
+      <Reference ReferenceType="Organizes" IsForward="false">i=90</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=75</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=93" BrowseName="OPC Binary" SymbolicName="OPCBinarySchema_TypeSystem" ReleaseStatus="Deprecated">
+    <DisplayName>OPC Binary</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/D.5.5</Documentation>
+    <References>
+      <Reference ReferenceType="Organizes" IsForward="false">i=90</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=75</Reference>
+    </References>
+  </UAObject>
+  <UAReferenceType NodeId="i=129" BrowseName="HasArgumentDescription">
+    <DisplayName>HasArgumentDescription</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Amendment3/11.18</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=47</Reference>
+    </References>
+    <InverseName>ArgumentDescriptionOf</InverseName>
+  </UAReferenceType>
+  <UAReferenceType NodeId="i=131" BrowseName="HasOptionalInputArgumentDescription">
+    <DisplayName>HasOptionalInputArgumentDescription</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Amendment3/11.19</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=129</Reference>
+    </References>
+    <InverseName>OptionalInputArgumentDescriptionOf</InverseName>
+  </UAReferenceType>
+  <UAObject NodeId="i=15957" BrowseName="0:http://opcfoundation.org/UA/" SymbolicName="OPCUANamespaceMetadata">
+    <DisplayName>http://opcfoundation.org/UA/</DisplayName>
+    <References>
+      <Reference ReferenceType="HasProperty">i=15958</Reference>
+      <Reference ReferenceType="HasProperty">i=15959</Reference>
+      <Reference ReferenceType="HasProperty">i=15960</Reference>
+      <Reference ReferenceType="HasProperty">i=15961</Reference>
+      <Reference ReferenceType="HasProperty">i=15962</Reference>
+      <Reference ReferenceType="HasProperty">i=15963</Reference>
+      <Reference ReferenceType="HasProperty">i=15964</Reference>
+      <Reference ReferenceType="HasProperty">i=16134</Reference>
+      <Reference ReferenceType="HasProperty">i=16135</Reference>
+      <Reference ReferenceType="HasProperty">i=16136</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=11715</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=11616</Reference>
+    </References>
+  </UAObject>
+  <UAVariable NodeId="i=15958" BrowseName="NamespaceUri" ParentNodeId="i=15957" DataType="String">
+    <DisplayName>NamespaceUri</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=15957</Reference>
+    </References>
+    <Value>
+      <String xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">http://opcfoundation.org/UA/</String>
+    </Value>
+  </UAVariable>
+  <UAVariable NodeId="i=15959" BrowseName="NamespaceVersion" ParentNodeId="i=15957" DataType="String">
+    <DisplayName>NamespaceVersion</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=15957</Reference>
+    </References>
+    <Value>
+      <String xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">1.04.10</String>
+    </Value>
+  </UAVariable>
+  <UAVariable NodeId="i=15960" BrowseName="NamespacePublicationDate" ParentNodeId="i=15957" DataType="DateTime">
+    <DisplayName>NamespacePublicationDate</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=15957</Reference>
+    </References>
+    <Value>
+      <DateTime xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">2021-09-15T00:00:00Z</DateTime>
+    </Value>
+  </UAVariable>
+  <UAVariable NodeId="i=15961" BrowseName="IsNamespaceSubset" ParentNodeId="i=15957" DataType="Boolean">
+    <DisplayName>IsNamespaceSubset</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=15957</Reference>
+    </References>
+    <Value>
+      <Boolean xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">false</Boolean>
+    </Value>
+  </UAVariable>
+  <UAVariable NodeId="i=15962" BrowseName="StaticNodeIdTypes" ParentNodeId="i=15957" DataType="i=256" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>StaticNodeIdTypes</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=15957</Reference>
+    </References>
+    <Value>
+      <ListOfInt32 xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
+        <Int32>0</Int32>
+      </ListOfInt32>
+    </Value>
+  </UAVariable>
+  <UAVariable NodeId="i=15963" BrowseName="StaticNumericNodeIdRange" ParentNodeId="i=15957" DataType="i=291" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>StaticNumericNodeIdRange</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=15957</Reference>
+    </References>
+    <Value>
+      <ListOfString xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
+        <String>1:2252</String>
+        <String>2270</String>
+        <String>2273</String>
+        <String>2280</String>
+        <String>2283</String>
+        <String>2291:2293</String>
+        <String>2297:2734</String>
+        <String>2738:2991</String>
+        <String>2995</String>
+        <String>2998:3703</String>
+        <String>3710:11191</String>
+        <String>11194:11195</String>
+        <String>11202:11241</String>
+        <String>11243:11272</String>
+        <String>11276:11280</String>
+        <String>11284:11311</String>
+        <String>11315:11491</String>
+        <String>11495:11501</String>
+        <String>11503:11701</String>
+        <String>11706</String>
+        <String>11708</String>
+        <String>11716:12164</String>
+        <String>12169:12748</String>
+        <String>12752:12872</String>
+        <String>12875:12884</String>
+        <String>12888:12910</String>
+        <String>12912:14414</String>
+        <String>14416:15003</String>
+        <String>15005:15605</String>
+        <String>15607:16300</String>
+        <String>16306:17633</String>
+        <String>17635:19090</String>
+        <String>19092:2147483647</String>
+      </ListOfString>
+    </Value>
+  </UAVariable>
+  <UAVariable NodeId="i=15964" BrowseName="StaticStringNodeIdPattern" ParentNodeId="i=15957" DataType="String">
+    <DisplayName>StaticStringNodeIdPattern</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=15957</Reference>
+    </References>
+    <Value>
+      <String xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd" />
+    </Value>
+  </UAVariable>
+  <UAVariable NodeId="i=16134" BrowseName="DefaultRolePermissions" ParentNodeId="i=15957" DataType="i=96" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>DefaultRolePermissions</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=15957</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=16135" BrowseName="DefaultUserRolePermissions" ParentNodeId="i=15957" DataType="i=96" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>DefaultUserRolePermissions</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=15957</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=16136" BrowseName="DefaultAccessRestrictions" ParentNodeId="i=15957" DataType="i=95">
+    <DisplayName>DefaultAccessRestrictions</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=15957</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3068" BrowseName="NodeVersion" DataType="String">
+    <DisplayName>NodeVersion</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=12170" BrowseName="ViewVersion" DataType="UInt32">
+    <DisplayName>ViewVersion</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3067" BrowseName="Icon" DataType="i=30">
+    <DisplayName>Icon</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3069" BrowseName="LocalTime" DataType="i=8912">
+    <DisplayName>LocalTime</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3070" BrowseName="AllowNulls" DataType="Boolean">
+    <DisplayName>AllowNulls</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=11433" BrowseName="ValueAsText" DataType="LocalizedText">
+    <DisplayName>ValueAsText</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=11498" BrowseName="MaxStringLength" DataType="UInt32">
+    <DisplayName>MaxStringLength</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=15002" BrowseName="MaxCharacters" DataType="UInt32">
+    <DisplayName>MaxCharacters</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=12908" BrowseName="MaxByteStringLength" DataType="UInt32">
+    <DisplayName>MaxByteStringLength</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=11512" BrowseName="MaxArrayLength" DataType="UInt32">
+    <DisplayName>MaxArrayLength</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=11513" BrowseName="EngineeringUnits" DataType="i=887">
+    <DisplayName>EngineeringUnits</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=11432" BrowseName="EnumStrings" DataType="LocalizedText" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>EnumStrings</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3071" BrowseName="EnumValues" DataType="i=7594" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>EnumValues</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=12745" BrowseName="OptionSetValues" DataType="LocalizedText" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>OptionSetValues</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3072" BrowseName="InputArguments" DataType="i=296" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>InputArguments</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3073" BrowseName="OutputArguments" DataType="i=296" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>OutputArguments</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=17605" BrowseName="DefaultInstanceBrowseName" DataType="QualifiedName">
+    <DisplayName>DefaultInstanceBrowseName</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+    </References>
+  </UAVariable>
+  <UADataType NodeId="i=2000" BrowseName="ImageBMP">
+    <DisplayName>ImageBMP</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.20</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=30</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=2001" BrowseName="ImageGIF">
+    <DisplayName>ImageGIF</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.21</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=30</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=2002" BrowseName="ImageJPG">
+    <DisplayName>ImageJPG</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.22</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=30</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=2003" BrowseName="ImagePNG">
+    <DisplayName>ImagePNG</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.23</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=30</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=16307" BrowseName="AudioDataType">
+    <DisplayName>AudioDataType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.53</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=15</Reference>
+    </References>
+  </UADataType>
+  <UADataType NodeId="i=12756" BrowseName="Union" IsAbstract="true">
+    <DisplayName>Union</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.42</Documentation>
+    <References>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
+    </References>
+    <Definition Name="Union" />
+  </UADataType>
+  <UAObjectType NodeId="i=2004" BrowseName="ServerType">
+    <DisplayName>ServerType</DisplayName>
+    <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/6.3.1</Documentation>
+    <References>
+      <Reference ReferenceType="HasProperty">i=2005</Reference>
+      <Reference ReferenceType="HasProperty">i=2006</Reference>
+      <Reference ReferenceType="HasProperty">i=15003</Reference>
+      <Reference ReferenceType="HasComponent">i=2007</Reference>
+      <Reference ReferenceType="HasProperty">i=2008</Reference>
+      <Reference ReferenceType="HasProperty">i=2742</Reference>
+      <Reference ReferenceType="HasProperty">i=12882</Reference>
+      <Reference ReferenceType="HasProperty">i=17612</Reference>
+      <Reference ReferenceType="HasComponent">i=2009</Reference>
+      <Reference ReferenceType="HasComponent">i=2010</Reference>
+      <Reference ReferenceType="HasComponent">i=2011</Reference>
+      <Reference ReferenceType="HasComponent">i=2012</Reference>
+      <Reference ReferenceType="HasComponent">i=11527</Reference>
+      <Reference ReferenceType="HasComponent">i=11489</Reference>
+      <Reference ReferenceType="HasComponent">i=12871</Reference>
+      <Reference ReferenceType="HasComponent">i=12746</Reference>
+      <Reference ReferenceType="HasComponent">i=12883</Reference>
+      <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
+    </References>
+  </UAObjectType>
+  <UAVariable NodeId="i=2005" BrowseName="ServerArray" ParentNodeId="i=2004" DataType="String" ValueRank="1" ArrayDimensions="0" MinimumSamplingInterval="1000">
+    <DisplayName>ServerArray</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2004</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=2006" BrowseName="NamespaceArray" ParentNodeId="i=2004" DataType="String" ValueRank="1" ArrayDimensions="0" MinimumSamplingInterval="1000">
+    <DisplayName>NamespaceArray</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2004</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=15003" BrowseName="UrisVersion" ParentNodeId="i=2004" DataType="i=20998" MinimumSamplingInterval="1000">
+    <DisplayName>UrisVersion</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=80</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2004</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=2007" BrowseName="ServerStatus" ParentNodeId="i=2004" DataType="i=862" MinimumSamplingInterval="1000">
+    <DisplayName>ServerStatus</DisplayName>
+    <References>
+      <Reference ReferenceType="HasComponent">i=3074</Reference>
+      <Reference ReferenceType="HasComponent">i=3075</Reference>
+      <Reference ReferenceType="HasComponent">i=3076</Reference>
+      <Reference ReferenceType="HasComponent">i=3077</Reference>
+      <Reference ReferenceType="HasComponent">i=3084</Reference>
+      <Reference ReferenceType="HasComponent">i=3085</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=2138</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2004</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3074" BrowseName="StartTime" ParentNodeId="i=2007" DataType="i=294">
+    <DisplayName>StartTime</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2007</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3075" BrowseName="CurrentTime" ParentNodeId="i=2007" DataType="i=294">
+    <DisplayName>CurrentTime</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2007</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3076" BrowseName="State" ParentNodeId="i=2007" DataType="i=852">
+    <DisplayName>State</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2007</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3077" BrowseName="BuildInfo" ParentNodeId="i=2007" DataType="i=338">
+    <DisplayName>BuildInfo</DisplayName>
+    <References>
+      <Reference ReferenceType="HasComponent">i=3078</Reference>
+      <Reference ReferenceType="HasComponent">i=3079</Reference>
+      <Reference ReferenceType="HasComponent">i=3080</Reference>
+      <Reference ReferenceType="HasComponent">i=3081</Reference>
+      <Reference ReferenceType="HasComponent">i=3082</Reference>
+      <Reference ReferenceType="HasComponent">i=3083</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=3051</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2007</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3078" BrowseName="ProductUri" ParentNodeId="i=3077" DataType="String" MinimumSamplingInterval="1000">
+    <DisplayName>ProductUri</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3077</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3079" BrowseName="ManufacturerName" ParentNodeId="i=3077" DataType="String" MinimumSamplingInterval="1000">
+    <DisplayName>ManufacturerName</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3077</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3080" BrowseName="ProductName" ParentNodeId="i=3077" DataType="String" MinimumSamplingInterval="1000">
+    <DisplayName>ProductName</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3077</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3081" BrowseName="SoftwareVersion" ParentNodeId="i=3077" DataType="String" MinimumSamplingInterval="1000">
+    <DisplayName>SoftwareVersion</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3077</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3082" BrowseName="BuildNumber" ParentNodeId="i=3077" DataType="String" MinimumSamplingInterval="1000">
+    <DisplayName>BuildNumber</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3077</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3083" BrowseName="BuildDate" ParentNodeId="i=3077" DataType="i=294" MinimumSamplingInterval="1000">
+    <DisplayName>BuildDate</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3077</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3084" BrowseName="SecondsTillShutdown" ParentNodeId="i=2007" DataType="UInt32">
+    <DisplayName>SecondsTillShutdown</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2007</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3085" BrowseName="ShutdownReason" ParentNodeId="i=2007" DataType="LocalizedText">
+    <DisplayName>ShutdownReason</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2007</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=2008" BrowseName="ServiceLevel" ParentNodeId="i=2004" DataType="Byte" MinimumSamplingInterval="1000">
+    <DisplayName>ServiceLevel</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2004</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=2742" BrowseName="Auditing" ParentNodeId="i=2004" DataType="Boolean" MinimumSamplingInterval="1000">
+    <DisplayName>Auditing</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2004</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=12882" BrowseName="EstimatedReturnTime" ParentNodeId="i=2004" DataType="DateTime" MinimumSamplingInterval="1000">
+    <DisplayName>EstimatedReturnTime</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=80</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2004</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=17612" BrowseName="LocalTime" ParentNodeId="i=2004" DataType="i=8912" MinimumSamplingInterval="1000">
+    <DisplayName>LocalTime</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=80</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2004</Reference>
+    </References>
+  </UAVariable>
+  <UAObject NodeId="i=2009" BrowseName="ServerCapabilities" ParentNodeId="i=2004">
+    <DisplayName>ServerCapabilities</DisplayName>
+    <References>
+      <Reference ReferenceType="HasProperty">i=3086</Reference>
+      <Reference ReferenceType="HasProperty">i=3087</Reference>
+      <Reference ReferenceType="HasProperty">i=3088</Reference>
+      <Reference ReferenceType="HasProperty">i=3089</Reference>
+      <Reference ReferenceType="HasProperty">i=3090</Reference>
+      <Reference ReferenceType="HasProperty">i=3091</Reference>
+      <Reference ReferenceType="HasProperty">i=3092</Reference>
+      <Reference ReferenceType="HasComponent">i=3093</Reference>
+      <Reference ReferenceType="HasComponent">i=3094</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=2013</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2004</Reference>
+    </References>
+  </UAObject>
+  <UAVariable NodeId="i=3086" BrowseName="ServerProfileArray" ParentNodeId="i=2009" DataType="String" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>ServerProfileArray</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2009</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3087" BrowseName="LocaleIdArray" ParentNodeId="i=2009" DataType="i=295" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>LocaleIdArray</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2009</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3088" BrowseName="MinSupportedSampleRate" ParentNodeId="i=2009" DataType="i=290">
+    <DisplayName>MinSupportedSampleRate</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2009</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3089" BrowseName="MaxBrowseContinuationPoints" ParentNodeId="i=2009" DataType="UInt16">
+    <DisplayName>MaxBrowseContinuationPoints</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2009</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3090" BrowseName="MaxQueryContinuationPoints" ParentNodeId="i=2009" DataType="UInt16">
+    <DisplayName>MaxQueryContinuationPoints</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2009</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3091" BrowseName="MaxHistoryContinuationPoints" ParentNodeId="i=2009" DataType="UInt16">
+    <DisplayName>MaxHistoryContinuationPoints</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2009</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3092" BrowseName="SoftwareCertificates" ParentNodeId="i=2009" DataType="i=344" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>SoftwareCertificates</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2009</Reference>
+    </References>
+  </UAVariable>
+  <UAObject NodeId="i=3093" BrowseName="ModellingRules" ParentNodeId="i=2009">
+    <DisplayName>ModellingRules</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2009</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=3094" BrowseName="AggregateFunctions" ParentNodeId="i=2009">
+    <DisplayName>AggregateFunctions</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=61</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2009</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=2010" BrowseName="ServerDiagnostics" ParentNodeId="i=2004">
+    <DisplayName>ServerDiagnostics</DisplayName>
+    <References>
+      <Reference ReferenceType="HasComponent">i=3095</Reference>
+      <Reference ReferenceType="HasComponent">i=3110</Reference>
+      <Reference ReferenceType="HasComponent">i=3111</Reference>
+      <Reference ReferenceType="HasProperty">i=3114</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=2020</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2004</Reference>
+    </References>
+  </UAObject>
+  <UAVariable NodeId="i=3095" BrowseName="ServerDiagnosticsSummary" ParentNodeId="i=2010" DataType="i=859">
+    <DisplayName>ServerDiagnosticsSummary</DisplayName>
+    <References>
+      <Reference ReferenceType="HasComponent">i=3096</Reference>
+      <Reference ReferenceType="HasComponent">i=3097</Reference>
+      <Reference ReferenceType="HasComponent">i=3098</Reference>
+      <Reference ReferenceType="HasComponent">i=3099</Reference>
+      <Reference ReferenceType="HasComponent">i=3100</Reference>
+      <Reference ReferenceType="HasComponent">i=3101</Reference>
+      <Reference ReferenceType="HasComponent">i=3102</Reference>
+      <Reference ReferenceType="HasComponent">i=3104</Reference>
+      <Reference ReferenceType="HasComponent">i=3105</Reference>
+      <Reference ReferenceType="HasComponent">i=3106</Reference>
+      <Reference ReferenceType="HasComponent">i=3107</Reference>
+      <Reference ReferenceType="HasComponent">i=3108</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=2150</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2010</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3096" BrowseName="ServerViewCount" ParentNodeId="i=3095" DataType="UInt32">
+    <DisplayName>ServerViewCount</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3095</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3097" BrowseName="CurrentSessionCount" ParentNodeId="i=3095" DataType="UInt32">
+    <DisplayName>CurrentSessionCount</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3095</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3098" BrowseName="CumulatedSessionCount" ParentNodeId="i=3095" DataType="UInt32">
+    <DisplayName>CumulatedSessionCount</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3095</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3099" BrowseName="SecurityRejectedSessionCount" ParentNodeId="i=3095" DataType="UInt32">
+    <DisplayName>SecurityRejectedSessionCount</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3095</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3100" BrowseName="RejectedSessionCount" ParentNodeId="i=3095" DataType="UInt32">
+    <DisplayName>RejectedSessionCount</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3095</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3101" BrowseName="SessionTimeoutCount" ParentNodeId="i=3095" DataType="UInt32">
+    <DisplayName>SessionTimeoutCount</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3095</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3102" BrowseName="SessionAbortCount" ParentNodeId="i=3095" DataType="UInt32">
+    <DisplayName>SessionAbortCount</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3095</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3104" BrowseName="PublishingIntervalCount" ParentNodeId="i=3095" DataType="UInt32">
+    <DisplayName>PublishingIntervalCount</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3095</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3105" BrowseName="CurrentSubscriptionCount" ParentNodeId="i=3095" DataType="UInt32">
+    <DisplayName>CurrentSubscriptionCount</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3095</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3106" BrowseName="CumulatedSubscriptionCount" ParentNodeId="i=3095" DataType="UInt32">
+    <DisplayName>CumulatedSubscriptionCount</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3095</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3107" BrowseName="SecurityRejectedRequestsCount" ParentNodeId="i=3095" DataType="UInt32">
+    <DisplayName>SecurityRejectedRequestsCount</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3095</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3108" BrowseName="RejectedRequestsCount" ParentNodeId="i=3095" DataType="UInt32">
+    <DisplayName>RejectedRequestsCount</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=63</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3095</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3110" BrowseName="SubscriptionDiagnosticsArray" ParentNodeId="i=2010" DataType="i=874" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>SubscriptionDiagnosticsArray</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=2171</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2010</Reference>
+    </References>
+  </UAVariable>
+  <UAObject NodeId="i=3111" BrowseName="SessionsDiagnosticsSummary" ParentNodeId="i=2010">
+    <DisplayName>SessionsDiagnosticsSummary</DisplayName>
+    <References>
+      <Reference ReferenceType="HasComponent">i=3112</Reference>
+      <Reference ReferenceType="HasComponent">i=3113</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=2026</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2010</Reference>
+    </References>
+  </UAObject>
+  <UAVariable NodeId="i=3112" BrowseName="SessionDiagnosticsArray" ParentNodeId="i=3111" DataType="i=865" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>SessionDiagnosticsArray</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=2196</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3111</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3113" BrowseName="SessionSecurityDiagnosticsArray" ParentNodeId="i=3111" DataType="i=868" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>SessionSecurityDiagnosticsArray</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=2243</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=3111</Reference>
+    </References>
+  </UAVariable>
+  <UAVariable NodeId="i=3114" BrowseName="EnabledFlag" ParentNodeId="i=2010" DataType="Boolean" AccessLevel="3">
+    <DisplayName>EnabledFlag</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2010</Reference>
+    </References>
+  </UAVariable>
+  <UAObject NodeId="i=2011" BrowseName="VendorServerInfo" ParentNodeId="i=2004">
+    <DisplayName>VendorServerInfo</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=2033</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2004</Reference>
+    </References>
+  </UAObject>
+  <UAObject NodeId="i=2012" BrowseName="ServerRedundancy" ParentNodeId="i=2004">
+    <DisplayName>ServerRedundancy</DisplayName>
+    <References>
+      <Reference ReferenceType="HasProperty">i=3115</Reference>
+      <Reference ReferenceType="HasTypeDefinition">i=2034</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2004</Reference>
+    </References>
+  </UAObject>
+  <UAVariable NodeId="i=3115" BrowseName="RedundancySupport" ParentNodeId="i=2012" DataType="i=851">
+    <DisplayName>RedundancySupport</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=2012</Reference>
+    </References>
+  </UAVariable>
+  <UAObject NodeId="i=11527" BrowseName="Namespaces" ParentNodeId="i=2004">
+    <DisplayName>Namespaces</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=11645</Reference>
+      <Reference ReferenceType="HasModellingRule">i=80</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2004</Reference>
+    </References>
+  </UAObject>
+  <UAMethod NodeId="i=11489" BrowseName="GetMonitoredItems" ParentNodeId="i=2004">
+    <DisplayName>GetMonitoredItems</DisplayName>
+    <References>
+      <Reference ReferenceType="HasProperty">i=11490</Reference>
+      <Reference ReferenceType="HasProperty">i=11491</Reference>
+      <Reference ReferenceType="HasModellingRule">i=80</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2004</Reference>
+    </References>
+  </UAMethod>
+  <UAVariable NodeId="i=11490" BrowseName="InputArguments" ParentNodeId="i=11489" DataType="i=296" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>InputArguments</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=11489</Reference>
+    </References>
+    <Value>
+      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
+        <ExtensionObject>
+          <TypeId>
+            <Identifier>i=297</Identifier>
+          </TypeId>
+          <Body>
+            <Argument>
+              <Name>SubscriptionId</Name>
+              <DataType>
+                <Identifier>i=7</Identifier>
+              </DataType>
+              <ValueRank>-1</ValueRank>
+              <ArrayDimensions />
+            </Argument>
+          </Body>
+        </ExtensionObject>
+      </ListOfExtensionObject>
+    </Value>
+  </UAVariable>
+  <UAVariable NodeId="i=11491" BrowseName="OutputArguments" ParentNodeId="i=11489" DataType="i=296" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>OutputArguments</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=11489</Reference>
+    </References>
+    <Value>
+      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
+        <ExtensionObject>
+          <TypeId>
+            <Identifier>i=297</Identifier>
+          </TypeId>
+          <Body>
+            <Argument>
+              <Name>ServerHandles</Name>
+              <DataType>
+                <Identifier>i=7</Identifier>
+              </DataType>
+              <ValueRank>1</ValueRank>
+              <ArrayDimensions>
+                <UInt32>0</UInt32>
+              </ArrayDimensions>
+            </Argument>
+          </Body>
+        </ExtensionObject>
+        <ExtensionObject>
+          <TypeId>
+            <Identifier>i=297</Identifier>
+          </TypeId>
+          <Body>
+            <Argument>
+              <Name>ClientHandles</Name>
+              <DataType>
+                <Identifier>i=7</Identifier>
+              </DataType>
+              <ValueRank>1</ValueRank>
+              <ArrayDimensions>
+                <UInt32>0</UInt32>
+              </ArrayDimensions>
+            </Argument>
+          </Body>
+        </ExtensionObject>
+      </ListOfExtensionObject>
+    </Value>
+  </UAVariable>
+  <UAMethod NodeId="i=12871" BrowseName="ResendData" ParentNodeId="i=2004">
+    <DisplayName>ResendData</DisplayName>
+    <References>
+      <Reference ReferenceType="HasProperty">i=12872</Reference>
+      <Reference ReferenceType="HasModellingRule">i=80</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2004</Reference>
+    </References>
+  </UAMethod>
+  <UAVariable NodeId="i=12872" BrowseName="InputArguments" ParentNodeId="i=12871" DataType="i=296" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>InputArguments</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=12871</Reference>
+    </References>
+    <Value>
+      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
+        <ExtensionObject>
+          <TypeId>
+            <Identifier>i=297</Identifier>
+          </TypeId>
+          <Body>
+            <Argument>
+              <Name>SubscriptionId</Name>
+              <DataType>
+                <Identifier>i=7</Identifier>
+              </DataType>
+              <ValueRank>-1</ValueRank>
+              <ArrayDimensions />
+            </Argument>
+          </Body>
+        </ExtensionObject>
+      </ListOfExtensionObject>
+    </Value>
+  </UAVariable>
+  <UAMethod NodeId="i=12746" BrowseName="SetSubscriptionDurable" ParentNodeId="i=2004">
+    <DisplayName>SetSubscriptionDurable</DisplayName>
+    <References>
+      <Reference ReferenceType="HasProperty">i=12747</Reference>
+      <Reference ReferenceType="HasProperty">i=12748</Reference>
+      <Reference ReferenceType="HasModellingRule">i=80</Reference>
+      <Reference ReferenceType="HasComponent" IsForward="false">i=2004</Reference>
+    </References>
+  </UAMethod>
+  <UAVariable NodeId="i=12747" BrowseName="InputArguments" ParentNodeId="i=12746" DataType="i=296" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>InputArguments</DisplayName>
+    <References>
+      <Reference ReferenceType="HasTypeDefinition">i=68</Reference>
+      <Reference ReferenceType="HasModellingRule">i=78</Reference>
+      <Reference ReferenceType="HasProperty" IsForward="false">i=12746</Reference>
+    </References>
+    <Value>
+      <ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
+        <ExtensionObject>
+          <TypeId>
+            <Identifier>i=297</Identifier>
+          </TypeId>
+          <Body>
+            <Argument>
+              <Name>SubscriptionId</Name>
+              <DataType>
+                <Identifier>i=7</Identifier>
+              </DataType>
+              <ValueRank>-1</ValueRank>
+              <ArrayDimensions />
+            </Argument>
+          </Body>
+        </ExtensionObject>
+        <ExtensionObject>
+          <TypeId>
+            <Identifier>i=297</Identifier>
+          </TypeId>
+          <Body>
+            <Argument>
+              <Name>LifetimeInHours</Name>
+              <DataType>
+                <Identifier>i=7</Identifier>
+              </DataType>
+              <ValueRank>-1</ValueRank>
+              <ArrayDimensions />
+            </Argument>
+          </Body>
+        </ExtensionObject>
+      </ListOfExtensionObject>
+    </Value>
+  </UAVariable>
+  <UAVariable NodeId="i=12748" BrowseName="OutputArguments" ParentNodeId="i=12746" DataType="i=296" ValueRank="1" ArrayDimensions="0">
+    <DisplayName>OutputArguments</DisplayName>
+    <References>
... 65304 lines suppressed ...